summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2013-07-15 22:57:06 +0100
committerTim-Philipp Müller <tim@centricular.net>2013-07-15 23:04:35 +0100
commit79249be0aae8ba77d1f7685ac5b3c36a4d8552c3 (patch)
tree9336cadee7182217a1a470ba0b840c8456110010
parentec630db32f8202472badf350983e986049eeac66 (diff)
downloadgstreamer-plugins-bad-79249be0aae8ba77d1f7685ac5b3c36a4d8552c3.tar.gz
h263parse: add pixel-aspect-ratio if upstream doesn't provide one
-rw-r--r--gst/videoparsers/gsth263parse.c16
-rw-r--r--gst/videoparsers/h263parse.c7
-rw-r--r--gst/videoparsers/h263parse.h4
3 files changed, 25 insertions, 2 deletions
diff --git a/gst/videoparsers/gsth263parse.c b/gst/videoparsers/gsth263parse.c
index 06ff205dd..8d7b5e67f 100644
--- a/gst/videoparsers/gsth263parse.c
+++ b/gst/videoparsers/gsth263parse.c
@@ -180,9 +180,9 @@ static void
gst_h263_parse_set_src_caps (GstH263Parse * h263parse,
const H263Params * params)
{
- GstStructure *st;
+ GstStructure *st = NULL;
GstCaps *caps, *sink_caps;
- gint fr_num, fr_denom;
+ gint fr_num, fr_denom, par_num, par_denom;
g_assert (h263parse->state == PASSTHROUGH || h263parse->state == GOT_HEADER);
@@ -211,6 +211,18 @@ gst_h263_parse_set_src_caps (GstH263Parse * h263parse,
gst_caps_set_simple (caps, "width", G_TYPE_INT, params->width,
"height", G_TYPE_INT, params->height, NULL);
+ if (st != NULL
+ && gst_structure_get_fraction (st, "pixel-aspect-ratio", &par_num,
+ &par_denom)) {
+ /* Got it in caps - nothing more to do */
+ GST_DEBUG_OBJECT (h263parse, "sink caps override PAR");
+ } else {
+ /* Caps didn't have the framerate - get it from params */
+ gst_h263_parse_get_par (params, &par_num, &par_denom);
+ }
+ gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+ par_num, par_denom, NULL);
+
if (h263parse->state == GOT_HEADER) {
gst_caps_set_simple (caps,
"annex-d", G_TYPE_BOOLEAN, (params->features & H263_OPTION_UMV_MODE),
diff --git a/gst/videoparsers/h263parse.c b/gst/videoparsers/h263parse.c
index b6ea4d283..bd118d32e 100644
--- a/gst/videoparsers/h263parse.c
+++ b/gst/videoparsers/h263parse.c
@@ -668,3 +668,10 @@ gst_h263_parse_get_framerate (const H263Params * params, gint * num,
*num = params->pcfnum;
*denom = params->pcfdenom;
}
+
+void
+gst_h263_parse_get_par (const H263Params * params, gint * num, gint * denom)
+{
+ *num = params->parnum;
+ *denom = params->pardenom;
+}
diff --git a/gst/videoparsers/h263parse.h b/gst/videoparsers/h263parse.h
index 07812802b..72a61da02 100644
--- a/gst/videoparsers/h263parse.h
+++ b/gst/videoparsers/h263parse.h
@@ -141,6 +141,10 @@ void gst_h263_parse_get_framerate (const H263Params * params,
gint * num,
gint * denom);
+void gst_h263_parse_get_par (const H263Params * params,
+ gint * num,
+ gint * denom);
+
gint gst_h263_parse_get_profile (const H263Params * params);
gint gst_h263_parse_get_level (const H263Params * params,