[x264-devel] [PATCH] nv21 input support

Geek.Song ffmpeg at gmail.com
Sun Mar 16 06:14:55 CET 2014


On Sat, Mar 15, 2014 at 12:16 AM, Yu Xiaolei <dreifachstein at gmail.com>wrote:

> This eliminates an extra copy when recording from android camera preview
> data
>
> ---
>  common/frame.c |    8 ++++++++
>  common/mc.c    |   12 ++++++++++++
>  common/mc.h    |    1 +
>  x264.h         |   23 ++++++++++++-----------
>  4 files changed, 33 insertions(+), 11 deletions(-)
>
> diff --git a/common/frame.c b/common/frame.c
> index 4b4a69f..f21368b 100644
> --- a/common/frame.c
> +++ b/common/frame.c
> @@ -49,6 +49,7 @@ static int x264_frame_internal_csp( int external_csp )
>          case X264_CSP_NV12:
>          case X264_CSP_I420:
>          case X264_CSP_YV12:
> +        case X264_CSP_NV21:
>              return X264_CSP_NV12;
>          case X264_CSP_NV16:
>          case X264_CSP_I422:
> @@ -435,6 +436,13 @@ int x264_frame_copy_picture( x264_t *h, x264_frame_t
> *dst, x264_picture_t *src )
>              h->mc.plane_copy( dst->plane[1], dst->i_stride[1],
> (pixel*)pix[1],
>                                stride[1]/sizeof(pixel), h->param.i_width,
> h->param.i_height>>v_shift );
>          }
> +        else if ( i_csp == X264_CSP_NV21 )
> +        {
> +            get_plane_ptr( h, src, &pix[1], &stride[1], 1, 0, v_shift );
> +            h->mc.plane_copy_swap( dst->plane[1], dst->i_stride[1],
> (pixel*)pix[1],
> +                                   stride[1]/sizeof(pixel),
> h->param.i_width, h->param.i_height>>v_shift );
> +
> +        }
>

I think :

stride[1]/sizeof(pixel), h->param.i_width, h->param.i_height>>v_shift );

should be:

stride[1]/sizeof(pixel), h->param.i_width>>1, h->param.i_height>>v_shift );


diff --git a/x264.h b/x264.h
> index 2e4a98d..77d9ce4 100644
> --- a/x264.h
> +++ b/x264.h
> @@ -41,7 +41,7 @@
>
>  #include "x264_config.h"
>
> -#define X264_BUILD 142
> +#define X264_BUILD 143
>
>  /* Application developers planning to link against a shared library
> version of
>   * libx264 from a Microsoft Visual Studio or similar development
> environment
> @@ -212,16 +212,17 @@ static const char * const x264_nal_hrd_names[] = {
> "none", "vbr", "cbr", 0 };
>  #define X264_CSP_I420           0x0001  /* yuv 4:2:0 planar */
>  #define X264_CSP_YV12           0x0002  /* yvu 4:2:0 planar */
>  #define X264_CSP_NV12           0x0003  /* yuv 4:2:0, with one y plane
> and one packed u+v */
> -#define X264_CSP_I422           0x0004  /* yuv 4:2:2 planar */
> -#define X264_CSP_YV16           0x0005  /* yvu 4:2:2 planar */
> -#define X264_CSP_NV16           0x0006  /* yuv 4:2:2, with one y plane
> and one packed u+v */
> -#define X264_CSP_V210           0x0007  /* 10-bit yuv 4:2:2 packed in 32
> */
> -#define X264_CSP_I444           0x0008  /* yuv 4:4:4 planar */
> -#define X264_CSP_YV24           0x0009  /* yvu 4:4:4 planar */
> -#define X264_CSP_BGR            0x000a  /* packed bgr 24bits   */
> -#define X264_CSP_BGRA           0x000b  /* packed bgr 32bits   */
> -#define X264_CSP_RGB            0x000c  /* packed rgb 24bits   */
> -#define X264_CSP_MAX            0x000d  /* end of list */
> +#define X264_CSP_NV21           0x0004  /* yuv 4:2:0, with one y plane
> and one packed v+u */
> +#define X264_CSP_I422           0x0005  /* yuv 4:2:2 planar */
> +#define X264_CSP_YV16           0x0006  /* yvu 4:2:2 planar */
> +#define X264_CSP_NV16           0x0007  /* yuv 4:2:2, with one y plane
> and one packed u+v */
> +#define X264_CSP_V210           0x0008  /* 10-bit yuv 4:2:2 packed in 32
> */
> +#define X264_CSP_I444           0x0009  /* yuv 4:4:4 planar */
> +#define X264_CSP_YV24           0x000a  /* yvu 4:4:4 planar */
> +#define X264_CSP_BGR            0x000b  /* packed bgr 24bits   */
> +#define X264_CSP_BGRA           0x000c  /* packed bgr 32bits   */
> +#define X264_CSP_RGB            0x000d  /* packed rgb 24bits   */
> +#define X264_CSP_MAX            0x000e  /* end of list */
>  #define X264_CSP_VFLIP          0x1000  /* the csp is vertically flipped
> */
>  #define X264_CSP_HIGH_DEPTH     0x2000  /* the csp has a depth of 16 bits
> per pixel component */
>
>
You need  not modify the definition of other X264_CSP_XXXs, you just append
X264_CSP_NV21 before X264_CSP_MAX.

-----------------------------------------------------------------------------------------
My key fingerprint: d1:03:f5:32:26:ff:d7:3c:e4:42:e3:51:ec:92:78:b2
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x264-devel/attachments/20140316/1a66f8fa/attachment.html>


More information about the x264-devel mailing list