diff options
author | Julien Moutte <julien@moutte.net> | 2005-10-17 16:59:20 +0000 |
---|---|---|
committer | Julien Moutte <julien@moutte.net> | 2005-10-17 16:59:20 +0000 |
commit | 22060a915c7403238946667852514ada1f80a123 (patch) | |
tree | 68e27c6b382e24c4fb2856c4e7f786cf8be39b77 | |
parent | 55fd6600e0ed9546c9430f4ae795f66ccda8a117 (diff) |
gst/videobox/gstvideobox.c: Fix caps nego some more to get
Original commit message from CVS:
2005-10-17 Julien MOUTTE <julien@moutte.net>
* gst/videobox/gstvideobox.c: (gst_video_box_transform_caps),
(gst_video_box_get_unit_size): Fix caps nego some more to get
AYUV
output declared in transform_caps.
-rw-r--r-- | ChangeLog | 6 | ||||
m--------- | common | 0 | ||||
-rw-r--r-- | gst/videobox/gstvideobox.c | 52 |
3 files changed, 44 insertions, 14 deletions
@@ -1,5 +1,11 @@ 2005-10-17 Julien MOUTTE <julien@moutte.net> + * gst/videobox/gstvideobox.c: (gst_video_box_transform_caps), + (gst_video_box_get_unit_size): Fix caps nego some more to get AYUV + output declared in transform_caps. + +2005-10-17 Julien MOUTTE <julien@moutte.net> + * ext/libpng/gstpngdec.c: (gst_pngdec_init): We use fixed caps. 2005-10-17 Julien MOUTTE <julien@moutte.net> diff --git a/common b/common -Subproject 3a9d355b657cf710011aa1eaadd64f6723527e1 +Subproject cf363b3ae6ce3c4a84a561e04ffc4e3b37435a6 diff --git a/gst/videobox/gstvideobox.c b/gst/videobox/gstvideobox.c index 9b548528..4d4de613 100644 --- a/gst/videobox/gstvideobox.c +++ b/gst/videobox/gstvideobox.c @@ -337,22 +337,46 @@ gst_video_box_transform_caps (GstBaseTransform * trans, { GstVideoBox *video_box; GstCaps *to; - GstStructure *structure; - gint dir, i, tmp; video_box = GST_VIDEO_BOX (trans); - to = gst_caps_copy (from); - dir = (direction == GST_PAD_SINK) ? -1 : 1; - - /* FIXME, include AYUV */ - for (i = 0; i < gst_caps_get_size (to); i++) { - structure = gst_caps_get_structure (to, i); - if (gst_structure_get_int (structure, "width", &tmp)) - gst_structure_set (structure, "width", G_TYPE_INT, - tmp + dir * (video_box->box_left + video_box->box_right), NULL); - if (gst_structure_get_int (structure, "height", &tmp)) - gst_structure_set (structure, "height", G_TYPE_INT, - tmp + dir * (video_box->box_top + video_box->box_bottom), NULL); + + if (gst_caps_is_fixed (from)) { + GstCaps *to_ayuv, *to_i420; + GstStructure *structure; + gint width, height, dir; + gdouble fps; + + dir = (direction == GST_PAD_SINK) ? -1 : 1; + + structure = gst_caps_get_structure (from, 0); + + gst_structure_get_int (structure, "width", &width); + gst_structure_get_int (structure, "height", &height); + gst_structure_get_double (structure, "framerate", &fps); + + width += dir * (video_box->box_left + video_box->box_right); + height += dir * (video_box->box_top + video_box->box_bottom); + + to_i420 = gst_caps_new_simple ("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('I', '4', '2', '0'), + "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, "framerate", G_TYPE_DOUBLE, fps, NULL); + + to_ayuv = gst_caps_new_simple ("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'), + "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, "framerate", G_TYPE_DOUBLE, fps, NULL); + to = to_i420; + gst_caps_append (to, to_ayuv); + } else { + GstPadTemplate *tmpl; + + if (direction == GST_PAD_SINK) { + tmpl = gst_static_pad_template_get (&gst_video_box_src_template); + } else { + tmpl = gst_static_pad_template_get (&gst_video_box_sink_template); + } + to = gst_caps_copy (gst_pad_template_get_caps (tmpl)); } return to; |