[MPlayer-dev-eng] [PATCH 5/5] vo_xv: Support NV12/21

Alexander Strasser eclipse7 at gmx.net
Fri Jun 16 01:24:38 EEST 2017


On 2017-06-15 01:37 +0200, Alexander Strasser wrote:
> On 2017-06-15 00:50 +0200, Alexander Strasser wrote:
> > Based-on-a-patch-by: Ville Syrjälä >syrjala sci fi<
> > Signed-off-by: Alexander Strasser <eclipse7 at gmx.net>
> > ---
> >  libvo/vo_xv.c | 19 ++++++++++++++++++-
> >  1 file changed, 18 insertions(+), 1 deletion(-)
> > 
> > diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
> > index 3febbf748..222c72f5f 100644
> > --- a/libvo/vo_xv.c
> > +++ b/libvo/vo_xv.c
> [...]
> > @@ -398,9 +399,14 @@ static int draw_slice(uint8_t * image[], int stride[], int w, int h,
> >          idx_p1 = 2; idx_p2 = 1;
> >      case IMGFMT_I420:
> >      case IMGFMT_IYUV:
> > +        num_planes = 3;
> >          x /= 2;
> > -        y /= 2;
> >          w /= 2;
> > +    case IMGFMT_NV12:
> > +    case IMGFMT_NV21:
> 
> > +        x &= ~1;
> > +        w &= ~1;
> 
> After reading this hunk again; I think it is wrong. Those two lines should
> only be in the path for NV12/21.
> 
> I wonder if the choice of the switch is that good after all. Maybe it's still
> OK I have to try again after rewriting and separating the tail parts for 
> NV12/21 and the others.

Replacement patch attachend.


[...]

  Alexander
-------------- next part --------------
>From 50888a3834861fae8832e14d58caa7b61afa1020 Mon Sep 17 00:00:00 2001
From: Alexander Strasser <eclipse7 at gmx.net>
Date: Tue, 16 May 2017 23:57:59 +0200
Subject: [PATCH] vo_xv: Support NV12/21
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Based-on-a-patch-by: Ville Syrjälä >syrjala sci fi<
---
 libvo/vo_xv.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index 3febbf7..7a523aa 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -413,6 +413,18 @@ static int draw_slice(uint8_t * image[], int stride[], int w, int h,
             memcpy_pic(dst, image[idx_p2], w, h, xvimage[current_buf]->pitches[2],
                        stride[idx_p2]);
         break;
+    case IMGFMT_NV12:
+    case IMGFMT_NV21:
+        x &= ~1;
+        y /= 2;
+        w &= ~1;
+        h /= 2;
+
+        dst = xvimage[current_buf]->data + xvimage[current_buf]->offsets[1] +
+            xvimage[current_buf]->pitches[1] * y + x;
+            memcpy_pic(dst, image[idx_p1], w, h, xvimage[current_buf]->pitches[1],
+                       stride[idx_p1]);
+        break;
     }
 
     return 0;
@@ -496,6 +508,13 @@ static uint32_t get_image(mp_image_t * mpi)
             mpi->stride[1] = xvimage[current_buf]->pitches[idx_p1];
             mpi->stride[2] = xvimage[current_buf]->pitches[idx_p2];
             break;
+        case IMGFMT_NV12:
+        case IMGFMT_NV21:
+            mpi->planes[1] =
+                xvimage[current_buf]->data +
+                xvimage[current_buf]->offsets[1];
+            mpi->stride[1] = xvimage[current_buf]->pitches[1];
+            break;
         }
         mpi->flags |= MP_IMGFLAG_DIRECT;
         mpi->priv = (void *)(intptr_t)current_buf;
@@ -511,6 +530,8 @@ static int is_supported_format(uint32_t format)
     case IMGFMT_YV12:
     case IMGFMT_I420:
     case IMGFMT_IYUV:
+    case IMGFMT_NV12:
+    case IMGFMT_NV21:
         return 1;
     default:
         return 0;
-- 
2.8.2



More information about the MPlayer-dev-eng mailing list