Fix I420 handling, though still don't know why divx4 codec queries for I420 not YUY2!

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5461 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
atmos4 2002-04-01 18:16:27 +00:00
parent a6a5b81c2f
commit 1d13f15b04
1 changed files with 45 additions and 14 deletions

View File

@ -1125,21 +1125,45 @@ static uint32_t draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int
x/=2;y/=2;w/=2;h/=2;
dst = priv->overlay->pixels[2] + priv->overlay->pitches[2]*y + x;
src = image[1];
switch(priv->format) {
case IMGFMT_YV12:
dst = priv->overlay->pixels[2] + priv->overlay->pitches[2]*y + x;
src = image[1];
for(i=0;i<h;i++){
memcpy(dst,src,w);
src+=stride[2];
dst += priv->overlay->pitches[2];
dst += priv->overlay->pitches[2];
}
dst = priv->overlay->pixels[1] + priv->overlay->pitches[1]*y + x;
src = image[2];
dst = priv->overlay->pixels[1] + priv->overlay->pitches[1]*y + x;
src = image[2];
for(i=0;i<h;i++){
memcpy(dst,src,w);
src+=stride[1];
dst += priv->overlay->pitches[1];
dst += priv->overlay->pitches[1];
}
break;
case IMGFMT_IYUV:
dst = priv->overlay->pixels[1] + priv->overlay->pitches[1]*y + x;
src = image[1];
for(i=0;i<h;i++){
memcpy(dst,src,w);
src+=stride[1];
dst += priv->overlay->pitches[1];
}
dst = priv->overlay->pixels[2] + priv->overlay->pitches[2]*y + x;
src = image[2];
for(i=0;i<h;i++){
memcpy(dst,src,w);
src+=stride[2];
dst += priv->overlay->pitches[2];
}
break;
default:
printf("SDL: unsupported image format in draw_slice, contact MPlayer developers!\n");
}
SDL_OVR_UNLOCK
@ -1610,17 +1634,24 @@ static uint32_t preinit(const char *arg)
static uint32_t get_image(mp_image_t *mpi)
{
struct sdl_priv_s *priv = &sdl_priv;
struct sdl_priv_s *priv = &sdl_priv;
if(priv->format != mpi->imgfmt) return VO_FALSE;
if(mpi->type == MP_IMGTYPE_STATIC || mpi->type == MP_IMGTYPE_TEMP) {
if(priv->format == IMGFMT_YV12 || priv->format == SDL_IYUV_OVERLAY) {
mpi->planes[0] = priv->overlay->pixels[0] + priv->y*priv->overlay->pitches[0];
mpi->planes[2] = priv->overlay->pixels[1] + priv->y*priv->overlay->pitches[1]/2;
mpi->planes[1] = priv->overlay->pixels[2] + priv->y*priv->overlay->pitches[2]/2;
mpi->stride[0] = priv->overlay->pitches[0];
mpi->stride[2] = priv->overlay->pitches[1];
mpi->stride[1] = priv->overlay->pitches[2];
if(mpi->flags&MP_IMGFLAG_PLANAR) {
mpi->planes[0] = priv->overlay->pixels[0] + priv->y*priv->overlay->pitches[0];
mpi->stride[0] = priv->overlay->pitches[0];
if(mpi->flags&MP_IMGFLAG_SWAPPED) {
mpi->planes[1] = priv->overlay->pixels[1] + priv->y*priv->overlay->pitches[1]/2;
mpi->stride[1] = priv->overlay->pitches[1];
mpi->planes[2] = priv->overlay->pixels[2] + priv->y*priv->overlay->pitches[2]/2;
mpi->stride[2] = priv->overlay->pitches[2];
} else {
mpi->planes[2] = priv->overlay->pixels[1] + priv->y*priv->overlay->pitches[1]/2;
mpi->stride[2] = priv->overlay->pitches[1];
mpi->planes[1] = priv->overlay->pixels[2] + priv->y*priv->overlay->pitches[2]/2;
mpi->stride[1] = priv->overlay->pitches[2];
}
}
else if(IMGFMT_IS_RGB(priv->format) || IMGFMT_IS_BGR(priv->format)) {
if(priv->dblit) {