summaryrefslogtreecommitdiffstats
path: root/libvo
diff options
context:
space:
mode:
authorben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-08-07 12:28:28 +0000
committerben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-08-07 12:28:28 +0000
commitf56b633045948f792397102ef15c227c75b6ab62 (patch)
tree66958901d26278e2ca69cb13354606acf193e810 /libvo
parente0b1c9a6b772683af9cb2a4f555cec1c5aa56afb (diff)
downloadmpv-f56b633045948f792397102ef15c227c75b6ab62.tar.bz2
mpv-f56b633045948f792397102ef15c227c75b6ab62.tar.xz
Add NV12 colorspace support to VIDIX driver.
patch by Magnus Damm <magnus dot damm at gmail dot com> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27430 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r--libvo/vosub_vidix.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/libvo/vosub_vidix.c b/libvo/vosub_vidix.c
index e2b7d10634..bb53dfb89a 100644
--- a/libvo/vosub_vidix.c
+++ b/libvo/vosub_vidix.c
@@ -212,6 +212,34 @@ static uint32_t vidix_draw_slice_packed(uint8_t *image[], int stride[], int w,in
return 0;
}
+static uint32_t 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 uint32_t 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);
@@ -254,6 +282,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:
@@ -449,6 +478,7 @@ int vidix_init(unsigned src_width,unsigned src_height,
switch(format)
{
+ case IMGFMT_NV12:
case IMGFMT_YV12:
case IMGFMT_I420:
case IMGFMT_IYUV:
@@ -495,6 +525,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;