Camerabin camera service: configure default video settings
encodebin doesn't like the encoding profile with ANY container caps, if container and codecs are not specified try to find a commonly used supported combination Change-Id: Icbde042bd17d9682112fb8bbb8f0d506f6ddebe1 Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
b6a8c713bc
commit
864ab3a39a
@@ -130,7 +130,49 @@ qint64 CameraBinRecorder::duration() const
|
||||
|
||||
void CameraBinRecorder::applySettings()
|
||||
{
|
||||
//settings are applied during camera startup
|
||||
CameraBinContainer *containerControl = m_session->mediaContainerControl();
|
||||
CameraBinAudioEncoder *audioEncoderControl = m_session->audioEncodeControl();
|
||||
CameraBinVideoEncoder *videoEncoderControl = m_session->videoEncodeControl();
|
||||
|
||||
containerControl->resetActualContainerFormat();
|
||||
audioEncoderControl->resetActualSettings();
|
||||
videoEncoderControl->resetActualSettings();
|
||||
|
||||
//encodebin doesn't like the encoding profile with ANY caps,
|
||||
//if container and codecs are not specified,
|
||||
//try to find a commonly used supported combination
|
||||
if (containerControl->containerFormat().isEmpty() &&
|
||||
audioEncoderControl->audioSettings().codec().isEmpty() &&
|
||||
videoEncoderControl->videoSettings().codec().isEmpty()) {
|
||||
|
||||
QList<QStringList> candidates;
|
||||
candidates.append(QStringList() << "video/x-matroska" << "video/x-h264" << "audio/mpeg, mpegversion=(int)4");
|
||||
candidates.append(QStringList() << "video/webm" << "video/x-vp8" << "audio/x-vorbis");
|
||||
candidates.append(QStringList() << "application/ogg" << "video/x-theora" << "audio/x-vorbis");
|
||||
candidates.append(QStringList() << "video/quicktime" << "video/x-h264" << "audio/mpeg, mpegversion=(int)4");
|
||||
candidates.append(QStringList() << "video/quicktime" << "video/x-h264" << "audio/mpeg");
|
||||
candidates.append(QStringList() << "video/x-msvideo" << "video/x-divx" << "audio/mpeg");
|
||||
|
||||
foreach (const QStringList &candidate, candidates) {
|
||||
if (containerControl->supportedContainers().contains(candidate[0]) &&
|
||||
videoEncoderControl->supportedVideoCodecs().contains(candidate[1]) &&
|
||||
audioEncoderControl->supportedAudioCodecs().contains(candidate[2])) {
|
||||
containerControl->setActualContainerFormat(candidate[0]);
|
||||
|
||||
QVideoEncoderSettings videoSettings = videoEncoderControl->videoSettings();
|
||||
videoSettings.setCodec(candidate[1]);
|
||||
if (videoSettings.resolution().isEmpty())
|
||||
videoSettings.setResolution(640, 480);
|
||||
videoEncoderControl->setActualVideoSettings(videoSettings);
|
||||
|
||||
QAudioEncoderSettings audioSettings = audioEncoderControl->audioSettings();
|
||||
audioSettings.setCodec(candidate[2]);
|
||||
audioEncoderControl->setActualAudioSettings(audioSettings);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GstEncodingContainerProfile *CameraBinRecorder::videoProfile()
|
||||
|
||||
Reference in New Issue
Block a user