summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurélien Zanelli <aurelien.zanelli@parrot.com>2014-04-09 18:51:41 +0200
committerJulien Isorce <julien.isorce@collabora.co.uk>2014-04-15 15:09:23 +0100
commit6834d2e0b353a0807257ba2177ebe39ae93a5fa4 (patch)
tree94987d149f9c6ca5b41fbc3d0ad5723c36736646
parentc115da9fd508272cf3ffec5ae66892c52e7682f1 (diff)
omxbufferpool: make video stride and offset calculation easier
It will be easier to support more color format.
-rw-r--r--omx/gstomxbufferpool.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/omx/gstomxbufferpool.c b/omx/gstomxbufferpool.c
index dfd5c62..5ebb191 100644
--- a/omx/gstomxbufferpool.c
+++ b/omx/gstomxbufferpool.c
@@ -372,27 +372,21 @@ gst_omx_buffer_pool_alloc_buffer (GstBufferPool * bpool,
g_ptr_array_add (pool->buffers, buf);
if (pool->add_videometa) {
- gsize offset[4] = { 0, };
- gint stride[4] = { 0, };
+ const guint nstride = pool->port->port_def.format.video.nStride;
+ const guint nslice = pool->port->port_def.format.video.nSliceHeight;
+ gsize offset[GST_VIDEO_MAX_PLANES] = { 0, };
+ gint stride[GST_VIDEO_MAX_PLANES] = { nstride, 0, };
- switch (pool->video_info.finfo->format) {
+ switch (GST_VIDEO_INFO_FORMAT (&pool->video_info)) {
case GST_VIDEO_FORMAT_I420:
- offset[0] = 0;
- stride[0] = pool->port->port_def.format.video.nStride;
- offset[1] =
- stride[0] * pool->port->port_def.format.video.nSliceHeight;
- stride[1] = pool->port->port_def.format.video.nStride / 2;
- offset[2] =
- offset[1] +
- stride[1] * (pool->port->port_def.format.video.nSliceHeight / 2);
- stride[2] = pool->port->port_def.format.video.nStride / 2;
+ stride[1] = nstride / 2;
+ offset[1] = offset[0] + stride[0] * nslice;
+ stride[2] = nstride / 2;
+ offset[2] = offset[1] + (stride[1] * nslice / 2);
break;
case GST_VIDEO_FORMAT_NV12:
- offset[0] = 0;
- stride[0] = pool->port->port_def.format.video.nStride;
- offset[1] =
- stride[0] * pool->port->port_def.format.video.nSliceHeight;
- stride[1] = pool->port->port_def.format.video.nStride;
+ stride[1] = nstride;
+ offset[1] = offset[0] + stride[0] * nslice;
break;
default:
g_assert_not_reached ();