vd_libdv.c
来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C语言 代码 · 共 84 行
C
84 行
#include <uclib.h>#include <uclib.h>#include <uclib.h>#include <sys/types.h>#include <uclib.h>#include <math.h>#include "config.h"#include "img_format.h"#include <libdv/dv.h>#include <libdv/dv_types.h>#include "stream/stream.h"#include "libmpdemux/demuxer.h"#include "libmpdemux/stheader.h"#include "vd_internal.h"static vd_info_t info ={ "Raw DV Video Decoder", "libdv", "Alexander Neundorf <neundorf@kde.org>", "http://libdv.sf.net", "native codec"};LIBVD_EXTERN(libdv)// to set/get/query special features/parametersstatic int control(sh_video_t *sh,int cmd,void* arg,...){ return CONTROL_UNKNOWN;}static dv_decoder_t* global_rawdv_decoder=NULL;dv_decoder_t* init_global_rawdv_decoder(void){ if(!global_rawdv_decoder){ global_rawdv_decoder=dv_decoder_new(TRUE,TRUE,FALSE); global_rawdv_decoder->quality=DV_QUALITY_BEST; global_rawdv_decoder->prev_frame_decoded = 0; } return global_rawdv_decoder;}// init driverstatic int init(sh_video_t *sh){ sh->context = (void *)init_global_rawdv_decoder(); return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YUY2);}// uninit driverstatic void uninit(sh_video_t *sh){}// decode a framestatic mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ mp_image_t* mpi; dv_decoder_t *decoder=sh->context; if(len<=0 || (flags&3)){// fprintf(stderr,"decode() (rawdv) SKIPPED\n"); return NULL; // skipped frame } dv_parse_header(decoder, data); mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, sh->disp_w, sh->disp_h); if(!mpi){ // temporary! fprintf(stderr,"couldn't allocate image for stderr codec\n"); return NULL; } dv_decode_full_frame(decoder, data, e_dv_color_yuv, mpi->planes, mpi->stride); return mpi;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?