From 1d689ae3a30b16457f8d9f31741002dcf8d9c261 Mon Sep 17 00:00:00 2001 From: nick Date: Fri, 1 Feb 2002 09:32:20 +0000 Subject: Using new tune info git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4457 b3059339-0415-0410-9bf9-f77b7e298cf2 --- vidix/drivers/radeon_vid.c | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) (limited to 'vidix/drivers') diff --git a/vidix/drivers/radeon_vid.c b/vidix/drivers/radeon_vid.c index d4af19e668..ba764e9bb9 100644 --- a/vidix/drivers/radeon_vid.c +++ b/vidix/drivers/radeon_vid.c @@ -870,16 +870,50 @@ static void radeon_vid_display_video( void ) if(__verbose > 1) radeon_vid_dump_regs(); } -static unsigned radeon_query_pitch(unsigned fourcc) +static unsigned radeon_query_pitch(unsigned fourcc,const vidix_yuv_t *spitch) { - unsigned pitch; + unsigned pitch,spy,spv,spu; + spy = spv = spu = 0; + switch(spitch->y) + { + case 16: + case 32: + case 64: + case 128: + case 256: spy = spitch->y; break; + default: break; + } + switch(spitch->u) + { + case 16: + case 32: + case 64: + case 128: + case 256: spu = spitch->u; break; + default: break; + } + switch(spitch->v) + { + case 16: + case 32: + case 64: + case 128: + case 256: spv = spitch->v; break; + default: break; + } switch(fourcc) { /* 4:2:0 */ case IMGFMT_IYUV: case IMGFMT_YV12: - case IMGFMT_I420: pitch = 32; break; - default: pitch = 16; break; + case IMGFMT_I420: + if(spy > 16 && spu == spy/2 && spv == spy/2) pitch = spy; + else pitch = 32; + break; + default: + if(spy >= 16) pitch = spy; + else pitch = 16; + break; } return pitch; } @@ -899,7 +933,7 @@ static int radeon_vid_init_video( vidix_playback_t *config ) config->fourcc == IMGFMT_IYUV) is_420 = 1; if(config->fourcc == IMGFMT_RGB32 || config->fourcc == IMGFMT_BGR32) is_rgb32 = 1; - best_pitch = radeon_query_pitch(config->fourcc); + best_pitch = radeon_query_pitch(config->fourcc,&config->src.pitch); mpitch = best_pitch-1; switch(config->fourcc) { @@ -1032,7 +1066,7 @@ static int radeon_vid_init_video( vidix_playback_t *config ) static void radeon_compute_framesize(vidix_playback_t *info) { unsigned pitch,awidth; - pitch = radeon_query_pitch(info->fourcc); + pitch = radeon_query_pitch(info->fourcc,&info->src.pitch); awidth = (info->src.w + (pitch-1)) & ~(pitch-1); switch(info->fourcc) { -- cgit v1.2.3