summaryrefslogtreecommitdiff
path: root/gst/transcode/gsttranscodebin.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/transcode/gsttranscodebin.c')
-rw-r--r--gst/transcode/gsttranscodebin.c26
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);
}