diff options
author | Uoti Urpala <uau@symbol.nonexistent.invalid> | 2008-08-08 02:04:43 +0300 |
---|---|---|
committer | Uoti Urpala <uau@symbol.nonexistent.invalid> | 2008-08-08 02:13:09 +0300 |
commit | 17d3e4b36d18f4a653f7c5f6ea2f15fcd3a2f069 (patch) | |
tree | 5d1910a2ab6381f6b4fb0ffc2834f55f7fef7129 /libvo/vosub_vidix.c | |
parent | 2ba9df3df3d61a7cc1bde9f897bc77eaaf14b383 (diff) | |
parent | af76be6e197382af491fadef3fcf821a721c99f5 (diff) | |
download | mpv-17d3e4b36d18f4a653f7c5f6ea2f15fcd3a2f069.tar.bz2 mpv-17d3e4b36d18f4a653f7c5f6ea2f15fcd3a2f069.tar.xz |
Merge svn changes up to r27441
Conflicts:
cfg-common-opts.h
command.c
configure
input/input.c
libmpcodecs/dec_video.c
libmpcodecs/vd.c
libmpdemux/stheader.h
libvo/sub.c
libvo/video_out.c
libvo/vo_xv.c
libvo/vosub_vidix.c
libvo/x11_common.c
libvo/x11_common.h
mp_core.h
mplayer.c
stream/stream.h
Diffstat (limited to 'libvo/vosub_vidix.c')
-rw-r--r-- | libvo/vosub_vidix.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/libvo/vosub_vidix.c b/libvo/vosub_vidix.c index da93ce571d..f95cbb60ad 100644 --- a/libvo/vosub_vidix.c +++ b/libvo/vosub_vidix.c @@ -213,6 +213,34 @@ static int vidix_draw_slice_packed(uint8_t *image[], int stride[], int w,int h,i return 0; } +static int vidix_draw_slice_nv12(uint8_t *image[], int stride[], int w,int h,int x,int y) +{ + uint8_t *src; + uint8_t *dest; + int i; + + /* Plane Y */ + dest = vidix_mem + vidix_play.offsets[next_frame] + vidix_play.offset.y; + dest += dstrides.y*y + x; + src = image[0]; + for(i=0;i<h;i++){ + memcpy(dest,src,w); + src+=stride[0]; + dest += dstrides.y; + } + + /* Plane UV */ + dest = vidix_mem + vidix_play.offsets[next_frame] + vidix_play.offset.u; + dest += dstrides.u*y/2 + x; + src = image[1]; + for(i=0;i<h/2;i++){ + memcpy(dest,src,w); + src+=stride[1]; + dest+=dstrides.u; + } + return 0; +} + static int vidix_draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y) { mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_SUB_VIDIX_DummyVidixdrawsliceWasCalled); @@ -255,6 +283,7 @@ static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned lvo_mem = vidix_mem + vidix_play.offsets[next_frame] + vidix_play.offset.y; apitch = vidix_play.dest.pitch.y-1; switch(vidix_play.fourcc){ + case IMGFMT_NV12: case IMGFMT_YV12: case IMGFMT_IYUV: case IMGFMT_I420: @@ -450,6 +479,7 @@ int vidix_init(unsigned src_width,unsigned src_height, switch(format) { + case IMGFMT_NV12: case IMGFMT_YV12: case IMGFMT_I420: case IMGFMT_IYUV: @@ -496,6 +526,8 @@ int vidix_init(unsigned src_width,unsigned src_height, vo_server->draw_slice = vidix_draw_slice_420; else if (src_format == IMGFMT_YVU9 || src_format == IMGFMT_IF09) vo_server->draw_slice = vidix_draw_slice_410; + else if (src_format == IMGFMT_NV12) + vo_server->draw_slice = vidix_draw_slice_nv12; else vo_server->draw_slice = vidix_draw_slice_packed; } return 0; |