2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 #include <sys/types.h>
28 #include "img_format.h"
31 #include <libdv/dv_types.h>
33 #include "stream/stream.h"
34 #include "libmpdemux/demuxer.h"
35 #include "libmpdemux/stheader.h"
37 #include "vd_internal.h"
40 static const vd_info_t info
=
42 "Raw DV Video Decoder",
44 "Alexander Neundorf <neundorf@kde.org>",
45 "http://libdv.sf.net",
51 // to set/get/query special features/parameters
52 static int control(sh_video_t
*sh
,int cmd
,void* arg
,...){
53 return CONTROL_UNKNOWN
;
56 static dv_decoder_t
* global_rawdv_decoder
=NULL
;
58 dv_decoder_t
* init_global_rawdv_decoder(void)
60 if(!global_rawdv_decoder
){
61 global_rawdv_decoder
=dv_decoder_new(TRUE
,TRUE
,FALSE
);
62 global_rawdv_decoder
->quality
=DV_QUALITY_BEST
;
63 global_rawdv_decoder
->prev_frame_decoded
= 0;
65 return global_rawdv_decoder
;
69 static int init(sh_video_t
*sh
)
71 sh
->context
= (void *)init_global_rawdv_decoder();
72 return mpcodecs_config_vo(sh
,sh
->disp_w
,sh
->disp_h
,IMGFMT_YUY2
);
76 static void uninit(sh_video_t
*sh
){
80 static mp_image_t
* decode(sh_video_t
*sh
,void* data
,int len
,int flags
)
83 dv_decoder_t
*decoder
=sh
->context
;
85 if(len
<=0 || (flags
&3)){
86 // fprintf(stderr,"decode() (rawdv) SKIPPED\n");
87 return NULL
; // skipped frame
90 dv_parse_header(decoder
, data
);
92 mpi
=mpcodecs_get_image(sh
, MP_IMGTYPE_TEMP
, MP_IMGFLAG_ACCEPT_STRIDE
, sh
->disp_w
, sh
->disp_h
);
94 if(!mpi
){ // temporary!
95 fprintf(stderr
,"couldn't allocate image for stderr codec\n");
99 dv_decode_full_frame(decoder
, data
, e_dv_color_yuv
, mpi
->planes
, mpi
->stride
);