10 #include "img_format.h"
13 #include <libdv/dv_types.h>
15 #include "stream/stream.h"
16 #include "libmpdemux/demuxer.h"
17 #include "libmpdemux/stheader.h"
19 #include "vd_internal.h"
21 static vd_info_t info
=
23 "Raw DV Video Decoder",
25 "Alexander Neundorf <neundorf@kde.org>",
26 "http://libdv.sf.net",
32 // to set/get/query special features/parameters
33 static int control(sh_video_t
*sh
,int cmd
,void* arg
,...){
34 return CONTROL_UNKNOWN
;
37 static dv_decoder_t
* global_rawdv_decoder
=NULL
;
39 dv_decoder_t
* init_global_rawdv_decoder(void)
41 if(!global_rawdv_decoder
){
42 global_rawdv_decoder
=dv_decoder_new(TRUE
,TRUE
,FALSE
);
43 global_rawdv_decoder
->quality
=DV_QUALITY_BEST
;
44 global_rawdv_decoder
->prev_frame_decoded
= 0;
46 return global_rawdv_decoder
;
50 static int init(sh_video_t
*sh
)
52 sh
->context
= (void *)init_global_rawdv_decoder();
53 return mpcodecs_config_vo(sh
,sh
->disp_w
,sh
->disp_h
,IMGFMT_YUY2
);
57 static void uninit(sh_video_t
*sh
){
61 static mp_image_t
* decode(sh_video_t
*sh
,void* data
,int len
,int flags
)
64 dv_decoder_t
*decoder
=sh
->context
;
66 if(len
<=0 || (flags
&3)){
67 // fprintf(stderr,"decode() (rawdv) SKIPPED\n");
68 return NULL
; // skipped frame
71 dv_parse_header(decoder
, data
);
73 mpi
=mpcodecs_get_image(sh
, MP_IMGTYPE_TEMP
, MP_IMGFLAG_ACCEPT_STRIDE
, sh
->disp_w
, sh
->disp_h
);
75 if(!mpi
){ // temporary!
76 fprintf(stderr
,"couldn't allocate image for stderr codec\n");
80 dv_decode_full_frame(decoder
, data
, e_dv_color_yuv
, mpi
->planes
, mpi
->stride
);