[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