diff options
author | Aurélien Zanelli <aurelien.zanelli@parrot.com> | 2014-04-09 18:51:41 +0200 |
---|---|---|
committer | Julien Isorce <julien.isorce@collabora.co.uk> | 2014-04-15 15:09:23 +0100 |
commit | 6834d2e0b353a0807257ba2177ebe39ae93a5fa4 (patch) | |
tree | 94987d149f9c6ca5b41fbc3d0ad5723c36736646 | |
parent | c115da9fd508272cf3ffec5ae66892c52e7682f1 (diff) |
omxbufferpool: make video stride and offset calculation easier
It will be easier to support more color format.
-rw-r--r-- | omx/gstomxbufferpool.c | 28 |
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 (); |