summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-12-12 15:42:09 +0000
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2012-12-12 15:42:09 +0000
commit21ac746f336c3170b31ce56f323a73d0329fe781 (patch)
tree8329d53f881a2d21b525bbd49a23e158dbc74392
parentcb9e40ff4c78014a336b77bd2b142e12758106ef (diff)
avdec: Improve src template caps
-rw-r--r--ext/libav/gstavauddec.c2
-rw-r--r--ext/libav/gstavcodecmap.c29
-rw-r--r--ext/libav/gstavviddec.c7
3 files changed, 17 insertions, 21 deletions
diff --git a/ext/libav/gstavauddec.c b/ext/libav/gstavauddec.c
index c179563..59c51fd 100644
--- a/ext/libav/gstavauddec.c
+++ b/ext/libav/gstavauddec.c
@@ -94,7 +94,7 @@ gst_ffmpegauddec_base_init (GstFFMpegAudDecClass * klass)
in_plugin->id, FALSE, in_plugin);
if (!srccaps) {
GST_DEBUG ("Couldn't get source caps for decoder '%s'", in_plugin->name);
- srccaps = gst_caps_from_string ("unknown/unknown");
+ srccaps = gst_caps_from_string ("audio/x-raw");
}
/* pad templates */
diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
index 91b8876..ab59686 100644
--- a/ext/libav/gstavcodecmap.c
+++ b/ext/libav/gstavcodecmap.c
@@ -2022,15 +2022,6 @@ gst_ffmpeg_audio_set_sample_fmts (GstCaps * caps,
return;
}
- /* Only a single format */
- if (fmts[1] == -1) {
- format = gst_ffmpeg_smpfmt_to_audioformat (fmts[0]);
- if (format != GST_AUDIO_FORMAT_UNKNOWN)
- gst_caps_set_simple (caps, "format", G_TYPE_STRING,
- gst_audio_format_to_string (format), NULL);
- return;
- }
-
g_value_init (&va, GST_TYPE_LIST);
g_value_init (&v, G_TYPE_STRING);
while (*fmts != -1) {
@@ -2041,8 +2032,12 @@ gst_ffmpeg_audio_set_sample_fmts (GstCaps * caps,
}
fmts++;
}
- if (gst_value_list_get_size (&va) > 0)
+ if (gst_value_list_get_size (&va) == 1) {
+ /* The single value is still in v */
+ gst_caps_set_value (caps, "format", &v);
+ } else if (gst_value_list_get_size (&va) > 1) {
gst_caps_set_value (caps, "format", &va);
+ }
g_value_unset (&v);
g_value_unset (&va);
}
@@ -2099,14 +2094,6 @@ gst_ffmpeg_video_set_pix_fmts (GstCaps * caps, const enum AVPixelFormat *fmts)
}
/* Only a single format */
- if (fmts[1] == -1) {
- format = gst_ffmpeg_pixfmt_to_videoformat (fmts[0]);
- if (format != GST_VIDEO_FORMAT_UNKNOWN)
- gst_caps_set_simple (caps, "format", G_TYPE_STRING,
- gst_video_format_to_string (format), NULL);
- return;
- }
-
g_value_init (&va, GST_TYPE_LIST);
g_value_init (&v, G_TYPE_STRING);
while (*fmts != -1) {
@@ -2117,8 +2104,12 @@ gst_ffmpeg_video_set_pix_fmts (GstCaps * caps, const enum AVPixelFormat *fmts)
}
fmts++;
}
- if (gst_value_list_get_size (&va) > 0)
+ if (gst_value_list_get_size (&va) == 1) {
+ /* The single value is still in v */
+ gst_caps_set_value (caps, "format", &v);
+ } else if (gst_value_list_get_size (&va) > 1) {
gst_caps_set_value (caps, "format", &va);
+ }
g_value_unset (&v);
g_value_unset (&va);
}
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
index 3b6375e..bd34f19 100644
--- a/ext/libav/gstavviddec.c
+++ b/ext/libav/gstavviddec.c
@@ -173,7 +173,12 @@ gst_ffmpegviddec_base_init (GstFFMpegVidDecClass * klass)
GST_DEBUG ("Couldn't get sink caps for decoder '%s'", in_plugin->name);
sinkcaps = gst_caps_new_empty_simple ("unknown/unknown");
}
- srccaps = gst_caps_new_empty_simple ("video/x-raw");
+ srccaps = gst_ffmpeg_codectype_to_video_caps (NULL,
+ in_plugin->id, FALSE, in_plugin);
+ if (!srccaps) {
+ GST_DEBUG ("Couldn't get source caps for decoder '%s'", in_plugin->name);
+ srccaps = gst_caps_from_string ("video/x-raw");
+ }
/* pad templates */
sinktempl = gst_pad_template_new ("sink", GST_PAD_SINK,