diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-02-05 14:46:11 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-02-09 19:03:56 +0000 |
commit | ea27ae88abcf82e4c034d48f5b45e16f0fd29a6b (patch) | |
tree | 267af0abf6128c33b7724c588de028303841e92d /src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp | |
parent | 177dd889e1f1a046c04770e4afe85d29b1476a84 (diff) |
More changes for QMediaFormat handling on the backend
The codecs supported by a certain muxer/demuxer are actually
something we need to determine from the backend. So a static
mapping in QMediaFormat will not really work.
Change-Id: I848c607ed222eba160a7c9c1c7b216b991e5ceba
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp')
-rw-r--r-- | src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp | 40 |
1 files changed, 11 insertions, 29 deletions
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp index 193ccaa34..131e18e80 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp @@ -129,25 +129,17 @@ GstElement *QGstreamerCaptureSession::buildFileSink() static GstEncodingContainerProfile *createContainerProfile(const QMediaEncoderSettings &settings) { - GstCaps *caps = nullptr; - auto *formatInfo = QGstreamerIntegration::instance()->m_formatsInfo; - if (!formatInfo->encodableMediaContainers().contains(settings.format())) - return nullptr; - - const char *format = formatInfo->nativeFormat(settings.format()); - Q_ASSERT(format); - - caps = gst_caps_from_string(format); + QGstCaps caps = formatInfo->formatCaps(settings.format()); GstEncodingContainerProfile *profile = (GstEncodingContainerProfile *)gst_encoding_container_profile_new( "container_profile", (gchar *)"custom container profile", - caps, + const_cast<GstCaps *>(caps.caps), NULL); //preset - gst_caps_unref(caps); + caps.unref(); return profile; } @@ -156,23 +148,17 @@ static GstEncodingProfile *createVideoProfile(const QMediaEncoderSettings &setti { auto *formatInfo = QGstreamerIntegration::instance()->m_formatsInfo; - if (!formatInfo->encodableVideoCodecs().contains(settings.videoCodec())) - return nullptr; - - const char *codec = formatInfo->nativeFormat(settings.videoCodec()); - Q_ASSERT(codec); - GstCaps *caps = gst_caps_from_string(codec); - - if (!caps) + QGstCaps caps = formatInfo->videoCaps(settings); + if (caps.isNull()) return nullptr; GstEncodingVideoProfile *profile = gst_encoding_video_profile_new( - caps, + const_cast<GstCaps *>(caps.caps), nullptr, NULL, //restriction 0); //presence - gst_caps_unref(caps); + caps.unref(); gst_encoding_video_profile_set_pass(profile, 0); gst_encoding_video_profile_set_variableframerate(profile, TRUE); @@ -184,21 +170,17 @@ static GstEncodingProfile *createAudioProfile(const QMediaEncoderSettings &setti { auto *formatInfo = QGstreamerIntegration::instance()->m_formatsInfo; - if (!formatInfo->encodableAudioCodecs().contains(settings.audioCodec())) + QGstCaps caps = formatInfo->audioCaps(settings); + if (caps.isNull()) return nullptr; - const char *codec = formatInfo->nativeFormat(settings.audioCodec()); - Q_ASSERT(codec); - - GstCaps *caps = gst_caps_from_string(codec); - GstEncodingProfile *profile = (GstEncodingProfile *)gst_encoding_audio_profile_new( - caps, + const_cast<GstCaps *>(caps.caps), nullptr, //preset NULL, //restriction 0); //presence - gst_caps_unref(caps); + caps.unref(); return profile; } |