summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-11-22 10:20:47 +0000
committerhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-11-22 10:20:47 +0000
commitc27c5503534fd26ea3d61ac91a9ebc5c26b662e2 (patch)
treebc98214e5aed108859e1ed164070321745fe887a /libmpcodecs
parente1852f27ec59586b77453f419c6f5d9b30d3af46 (diff)
downloadmpv-c27c5503534fd26ea3d61ac91a9ebc5c26b662e2.tar.bz2
mpv-c27c5503534fd26ea3d61ac91a9ebc5c26b662e2.tar.xz
1e6l fix (use 422P instead of UYVY)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14013 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/vd_libmpeg2.c57
1 files changed, 25 insertions, 32 deletions
diff --git a/libmpcodecs/vd_libmpeg2.c b/libmpcodecs/vd_libmpeg2.c
index c191a53d2a..3eb96021a6 100644
--- a/libmpcodecs/vd_libmpeg2.c
+++ b/libmpcodecs/vd_libmpeg2.c
@@ -29,17 +29,20 @@ LIBVD_EXTERN(libmpeg2)
#include "../cpudetect.h"
-mpeg2_convert_t mpeg2convert_uyvy;
-
// to set/get/query special features/parameters
static int control(sh_video_t *sh,int cmd,void* arg,...){
mpeg2dec_t * mpeg2dec = sh->context;
+ const mpeg2_info_t * info = mpeg2_info (mpeg2dec);
switch(cmd) {
case VDCTRL_QUERY_FORMAT:
- if ( (*((int*)arg)) == IMGFMT_YV12 && mpeg2dec->convert == NULL)
+ if (info->sequence->width >> 1 == info->sequence->chroma_width &&
+ info->sequence->height >> 1 == info->sequence->chroma_height &&
+ (*((int*)arg)) == IMGFMT_YV12)
return CONTROL_TRUE;
- if ( (*((int*)arg)) == IMGFMT_UYVY && mpeg2dec->convert == mpeg2convert_uyvy)
+ if (info->sequence->width >> 1 == info->sequence->chroma_width &&
+ info->sequence->height == info->sequence->chroma_height &&
+ (*((int*)arg)) == IMGFMT_422P)
return CONTROL_TRUE;
return CONTROL_FALSE;
}
@@ -85,10 +88,8 @@ static int init(sh_video_t *sh){
static void uninit(sh_video_t *sh){
mpeg2dec_t * mpeg2dec = sh->context;
if (mpeg2dec->pending_buffer) free(mpeg2dec->pending_buffer);
- if (mpeg2dec->convert == NULL) {
- mpeg2dec->decoder.convert=NULL;
- mpeg2dec->decoder.convert_id=NULL;
- }
+ mpeg2dec->decoder.convert=NULL;
+ mpeg2dec->decoder.convert_id=NULL;
mpeg2_close (mpeg2dec);
}
@@ -117,10 +118,8 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
int drop_frame, framedrop=flags&3;
// MPlayer registers its own draw_slice callback, prevent libmpeg2 from freeing the context
- if (mpeg2dec->convert == NULL) {
- mpeg2dec->decoder.convert=NULL;
- mpeg2dec->decoder.convert_id=NULL;
- }
+ mpeg2dec->decoder.convert=NULL;
+ mpeg2dec->decoder.convert_id=NULL;
if(len<=0) return NULL; // skipped null frame
@@ -162,10 +161,9 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
info->sequence->height, IMGFMT_YV12)) return 0;
} else if (info->sequence->width >> 1 == info->sequence->chroma_width &&
info->sequence->height == info->sequence->chroma_height) {
- if (mpeg2_convert(mpeg2dec, mpeg2convert_uyvy, NULL)) return 0;
if(!mpcodecs_config_vo(sh,
info->sequence->width,
- info->sequence->height, IMGFMT_UYVY)) return 0;
+ info->sequence->height, IMGFMT_422P)) return 0;
} else return 0;
break;
case STATE_PICTURE:
@@ -180,17 +178,14 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
}
mpeg2_skip(mpeg2dec, 0); //mpeg2skip skips frames until set again to 0
- if (mpeg2dec->convert == NULL) {
- use_callback = (!framedrop && vd_use_slices &&
- (info->current_picture->flags&PIC_FLAG_PROGRESSIVE_FRAME)) ?
- MP_IMGFLAG_DRAW_CALLBACK:0;
- } else {
- use_callback = 0;
- }
+ use_callback = (!framedrop && vd_use_slices &&
+ (info->current_picture->flags&PIC_FLAG_PROGRESSIVE_FRAME)) ?
+ MP_IMGFLAG_DRAW_CALLBACK:0;
// get_buffer "callback":
mpi_new=mpcodecs_get_image(sh,MP_IMGTYPE_IPB,
- (type==PIC_FLAG_CODING_TYPE_B) ? use_callback : (MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE),
+ (type==PIC_FLAG_CODING_TYPE_B) ?
+ use_callback : (MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE),
(info->sequence->picture_width+15)&(~15),
(info->sequence->picture_height+15)&(~15) );
@@ -215,16 +210,14 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
mpi_new->qscale_type= 1;
#endif
- if (mpeg2dec->convert == NULL) {
- if (mpi_new->flags&MP_IMGFLAG_DRAW_CALLBACK
- && !(mpi_new->flags&MP_IMGFLAG_DIRECT)) {
- // nice, filter/vo likes draw_callback :)
- mpeg2dec->decoder.convert=draw_slice;
- mpeg2dec->decoder.convert_id=sh;
- } else {
- mpeg2dec->decoder.convert=NULL;
- mpeg2dec->decoder.convert_id=NULL;
- }
+ if (mpi_new->flags&MP_IMGFLAG_DRAW_CALLBACK
+ && !(mpi_new->flags&MP_IMGFLAG_DIRECT)) {
+ // nice, filter/vo likes draw_callback :)
+ mpeg2dec->decoder.convert=draw_slice;
+ mpeg2dec->decoder.convert_id=sh;
+ } else {
+ mpeg2dec->decoder.convert=NULL;
+ mpeg2dec->decoder.convert_id=NULL;
}
break;