diff options
author | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-07-11 19:16:30 +0000 |
---|---|---|
committer | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-07-11 19:16:30 +0000 |
commit | 3f457aa9b77cb934ae793af94ba9933ca38ee1f0 (patch) | |
tree | 21c7f9d5f60fda5dba721c678bdf981493b6325b /libmpcodecs/vd_divx4.c | |
parent | 281381185222544409a88bd027179bc6be104b59 (diff) | |
download | mpv-3f457aa9b77cb934ae793af94ba9933ca38ee1f0.tar.bz2 mpv-3f457aa9b77cb934ae793af94ba9933ca38ee1f0.tar.xz |
support for external pp by divx4. some fixes/cosmetics?
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6709 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/vd_divx4.c')
-rw-r--r-- | libmpcodecs/vd_divx4.c | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/libmpcodecs/vd_divx4.c b/libmpcodecs/vd_divx4.c index 9d9c63e38f..b0023000b8 100644 --- a/libmpcodecs/vd_divx4.c +++ b/libmpcodecs/vd_divx4.c @@ -33,9 +33,12 @@ LIBVD_EXTERN(divx4) #include <decore.h> #endif +#define USE_DIVX_BUILTIN_PP + // to set/get/query special features/parameters static int control(sh_video_t *sh,int cmd,void* arg,...){ switch(cmd){ +#ifdef USE_DIVX_BUILTIN_PP case VDCTRL_QUERY_MAX_PP_LEVEL: return 9; // for divx4linux case VDCTRL_SET_PP_LEVEL: { @@ -46,6 +49,7 @@ static int control(sh_video_t *sh,int cmd,void* arg,...){ decore(0x123,DEC_OPT_SETPP,&dec_set,NULL); return CONTROL_OK; } +#endif #ifdef DECORE_VERSION #if DECORE_VERSION >= 20011010 case VDCTRL_SET_EQUALIZER: { @@ -127,8 +131,10 @@ static int init(sh_video_t *sh){ dec_param.y_dim = sh->disp_h; decore(0x123, DEC_OPT_INIT, &dec_param, NULL); +#ifdef USE_DIVX_BUILTIN_PP dec_set.postproc_level = divx_quality; decore(0x123, DEC_OPT_SETPP, &dec_set, NULL); +#endif mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: DivX4Linux video codec init OK!\n"); @@ -146,12 +152,15 @@ static void uninit(sh_video_t *sh){ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ mp_image_t* mpi; DEC_FRAME dec_frame; +#ifndef USE_DIVX_BUILTIN_PP + DEC_FRAME_INFO frameinfo; +#endif if(len<=0) return NULL; // skipped frame dec_frame.length = len; dec_frame.bitstream = data; - dec_frame.render_flag = (flags&3)?0:1; + dec_frame.render_flag = (flags&VDFLAGS_DROPFRAME)?0:1; mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_PRESERVE | MP_IMGFLAG_ACCEPT_WIDTH, sh->disp_w, sh->disp_h); @@ -159,16 +168,27 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ dec_frame.bmp=mpi->planes[0]; dec_frame.stride=mpi->width; - + + decore(0x123, #ifndef DEC_OPT_FRAME_311 - decore(0x123, DEC_OPT_FRAME, &dec_frame, NULL); + DEC_OPT_FRAME, #else - decore(0x123, (sh->format==mmioFOURCC('D','I','V','3'))?DEC_OPT_FRAME_311:DEC_OPT_FRAME, &dec_frame, NULL); + (sh->format==mmioFOURCC('D','I','V','3'))?DEC_OPT_FRAME_311:DEC_OPT_FRAME, +#endif + &dec_frame, +#ifndef USE_DIVX_BUILTIN_PP + &frameinfo +#else + NULL +#endif + ); + +#ifndef USE_DIVX_BUILTIN_PP + mpi->qscale = frameinfo.quant_store; + mpi->qstride = frameinfo.quant_stride; #endif return mpi; } - #endif #endif - |