[prev in list] [next in list] [prev in thread] [next in thread]
List: mplayer-dev-eng
Subject: [MPlayer-dev-eng] [PATCH 2/2] vo_xv: Add NV12/NV21 support
From: Ville Syrjälä <syrjala () sci ! fi>
Date: 2017-02-26 21:57:28
Message-ID: 20170226215728.2032-2-syrjala () sci ! fi
[Download RAW message or body]
Add support for NV12/NV21. Useful for cases when your hardware doesn't
do YV12/I420.
---
libvo/vo_xv.c | 54 +++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index 95600fc85b5e..4185ea244b46 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -392,28 +392,41 @@ static int draw_slice(uint8_t * image[], int stride[], int w, int h,
memcpy_pic(dst, image[0], w, h, xvimage[current_buf]->pitches[0],
stride[0]);
- x /= 2;
y /= 2;
- w /= 2;
h /= 2;
- dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[1] +
- xvimage[current_buf]->pitches[1] * y + x;
- if (image_format != IMGFMT_YV12)
- memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1],
- stride[1]);
- else
- memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1],
- stride[2]);
+ if (image_format == IMGFMT_NV12 || image_format == IMGFMT_NV21)
+ {
+ x &= ~1;
+ w &= ~1;
- dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[2] +
- xvimage[current_buf]->pitches[2] * y + x;
- if (image_format == IMGFMT_YV12)
+ dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[1] +
+ xvimage[current_buf]->pitches[1] * y + x;
memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1],
stride[1]);
- else
- memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1],
- stride[2]);
+ } else
+ {
+ x /= 2;
+ w /= 2;
+
+ dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[1] +
+ xvimage[current_buf]->pitches[1] * y + x;
+ if (image_format != IMGFMT_YV12)
+ memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1],
+ stride[1]);
+ else
+ memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1],
+ stride[2]);
+
+ dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[2] +
+ xvimage[current_buf]->pitches[2] * y + x;
+ if (image_format == IMGFMT_YV12)
+ memcpy_pic(dst, image[1], w, h, xvimage[current_buf]->pitches[1],
+ stride[1]);
+ else
+ memcpy_pic(dst, image[2], w, h, xvimage[current_buf]->pitches[1],
+ stride[2]);
+ }
return 0;
}
@@ -481,7 +494,14 @@ static uint32_t get_image(mp_image_t * mpi)
xvimage[current_buf]->data + xvimage[current_buf]->offsets[0];
mpi->stride[0] = xvimage[current_buf]->pitches[0];
mpi->width = mpi->stride[0] / (mpi->bpp / 8);
- if (mpi->flags & MP_IMGFLAG_PLANAR)
+ if (mpi->flags & MP_IMGFLAG_PLANAR && mpi->num_planes == 2)
+ {
+ // NV12/NV21
+ mpi->planes[1] =
+ xvimage[current_buf]->data +
+ xvimage[current_buf]->offsets[1];
+ mpi->stride[1] = xvimage[current_buf]->pitches[1];
+ } else if (mpi->flags & MP_IMGFLAG_PLANAR)
{
if (mpi->flags & MP_IMGFLAG_SWAPPED)
{
--
2.10.2
_______________________________________________
MPlayer-dev-eng mailing list
MPlayer-dev-eng@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic