====== Мультимедия ====== **qt += multimedia**\\ {{ :develop:qt:qt-media_0.jpg?direct&600 |}} ===== QMediaObject ===== Предоставляет некоторые базовые функции, которые являются общими для классов более высокого уровня, в основном такие как: **доступность**, **метаданные**, функции для **соединения со вспомогательными классами**.\\ Классы более высокого уровня обеспечивают фактическую мультимедийную функциональность за счет внутреннего использования **QMediaService** и используют интерфейсы **QMediaControl**, реализованные службой, для реализации своего API.\\ Большинство медиа-объектов при создании будут запрашивать новый экземпляр **QMediaService**, но некоторые (QMediaRecorder, QAudioRecorder) могут совместно использовать службу.\\ ==== QMediaService ==== **Класс устарел, не рекомендуется к использованию**, альтернатива не указана.\\ Общий базовый класс, для реализации медиа-сервисов.\\ Из функций толком ничего не указано в доке, видимо выводится из использования, а функционал вынесен в другие классы.\\ ==== QMediaControl ==== Базовый класс для элементов управления медиа-сервисом.\\ Из функций тоже ничего не указано, наследуемых классов оч много, очевидно именно в них весь функционал\\ "Большая часть кода приложения не будет напрямую взаимодействовать с элементами управления медиа-службой, вместо этого **QMediaObject** действует как посредник, между эл управления и приложением"\\ ===== QCamera ===== Предоставляет интерфейс для системных камер.\\ Можно использовать с **QCameraViewfinder** для отображения видоискателя, **QMediaRecorder** для записи видео и **QCameraImageCapture** для съемки изображений\\ Имеется несколько свойств: * **captureMode** - тип носителя (CaptureViewfinder (отображение видоискателя); CaptureStillImage (захват изображения); CaptureVideo (захват видео)), изменение режима вызывает изменение статуса камеры. Так же, дается сигнал- **captureModeChanged()** * **lockStatus** - общий статус всех запрошенных блокировок камеры (фокус/экспозиция и т.д.) * **state** - текущее состояние камеры (UnloadedState; LoadedState; ActiveState). Есть сигнал * **status** - текущий статус камеры (ActiveStatus; Starting; StoppingStatus и т.д.). Есть сигнал ==== QCameraImageCapture ==== Класс для доступа к функциям записи мультимедийных объектов.\\ enum **CaptureDestination**: {CaptureToFile; CaptureToBuffer}\\ int **Capture(QString)**- захват изображения и сохранение его в файл. Асинхронная, вызываются сигналы типа imageCaptured(), imageSaved(id, name), error().\\ Если путь/имя файла не передано в аргументе, используется умолчательные, возвращается в сигналах.\\ Возвращает параметр **Id** используемый в упомянутых сигналах\\ Перед вызовом стоит проверить готовность камеры, свойство- **isReadyForCapture()**. Есть соответствующий сигнал.\\ **imageAvailable(int Id, QVideoFrame)**- сигнал, посылается когда захват установлен в буфер и есть доступный кадр.\\ ==== QCameraInfo ==== Получение информации о доступных в системе камерах.\\ Статические ф-ции **defaultCamera()** и **availableCameras()** возвращают доступные устр-ва.\\ Можно создавать собственные объекты, ссылающиеся на физ устр-ва\\
:!: Пример: выбор камеры из списка const QList vCamers= QCameraInfo::availableCameras(); for(const QCameraInfo &cameraInfo:vCamers) { if(cameraInfo.deviceName()== "myCamera") camera= new QCamera(cameraInfo()) }
==== QCameraViewfinder ==== Виджет видоискателя камеры
:!: Пример: использование QCameraViewfinder camera= new Camera; viewfinder= new QCameraViewfinder(); viewfinder->show(); camera->setViewfinder(viewfindeer); imageCapture= new QCameraImageCapture(camera); camera->setCaptureMode(QCamera::CaptureStillImage); camera->start();
==== QCameraFocus ==== Позволяет настраивать фокусировку и масштабирование.\\ Масштабирование может быть **оптическим** (более дорогое но более качественное, используются сенсоры камеры поэтому может не поддерживаться) либо **цифровым** (простое увеличение части рамки).\\ **maximumOpticalZoom()** позволяет проверить поддержку оптического зума, **zoomTo()** позволяет одновременно изменять оптическое и цифровое масштабирование.\\ Некоторое оборудование поддерживает автофокусировку, можно использовать с помощью **FocusPointMode**. Можно использовать в сочетании с **QCameraFocusZone**.\\
:!: Установить фокус в нижней части, 25% от угла.. вроде как QCameraFocus *focus= camera->focus(); focus->setFocusMode(QCameraFocus::FocusPointCustom); focus->setCustomFocusPoint(QPointF(0.25f, 0.75f)); // super zoom focus->zoomTo(3.0, 4.0);