diff options
Diffstat (limited to 'gst/transcode/gsttranscodebin.c')
-rw-r--r-- | gst/transcode/gsttranscodebin.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/gst/transcode/gsttranscodebin.c b/gst/transcode/gsttranscodebin.c index 1d8b50745..f1362f133 100644 --- a/gst/transcode/gsttranscodebin.c +++ b/gst/transcode/gsttranscodebin.c @@ -306,13 +306,29 @@ make_decodebin (GstTranscodeBin * self) gst_encoding_container_profile_get_profiles (GST_ENCODING_CONTAINER_PROFILE (self->profile)); tmp; tmp = tmp->next) { - GstCaps *restrictions = - gst_encoding_profile_get_restriction (tmp->data); + GstEncodingProfile *profile = tmp->data; + GstCaps *restrictions; - if (!restrictions || gst_caps_is_any (restrictions)) { - GstCaps *encodecaps = gst_encoding_profile_get_format (tmp->data); + restrictions = gst_encoding_profile_get_restriction (profile); - gst_caps_append (decodecaps, encodecaps); + if (!restrictions || gst_caps_is_any (restrictions)) { + GstCaps *encodecaps = gst_encoding_profile_get_format (profile); + GstElement *filter = NULL; + + /* Filter operates on raw data so don't allow decodebin to produce + * encoded data if one is defined. */ + if (GST_IS_ENCODING_VIDEO_PROFILE (profile) && self->video_filter) + filter = self->video_filter; + else if (GST_IS_ENCODING_AUDIO_PROFILE (profile) + && self->audio_filter) + filter = self->audio_filter; + + if (!filter) { + GST_DEBUG_OBJECT (self, + "adding %" GST_PTR_FORMAT " as output caps to decodebin", + encodecaps); + gst_caps_append (decodecaps, encodecaps); + } } else { gst_caps_unref (restrictions); } |