====== Мультимедия ======
**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);