annotate libmpcodecs/vd_libdv.c @ 24992:5701e23ebcb4

Better handling of win32 GUI thread: 1. Use _beginthreadex to create the GUI thread to avoid possible memory leak when linked to MS CRT. 2. Terminate the GUI thread in an cleaner way using PostThreadMessage() rather than the unrecommended TerminateThread().
author zuxy
date Sun, 11 Nov 2007 08:14:57 +0000
parents 71b3e04d0555
children 0f1b5b68af32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6927
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
1 #include <stdio.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
2 #include <stdlib.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
3 #include <string.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
4 #include <sys/types.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
5 #include <unistd.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
6 #include <math.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
7
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
8 #include "config.h"
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
9
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
10 #include "img_format.h"
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
11
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
12 #include <libdv/dv.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
13 #include <libdv/dv_types.h>
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
14
22599
4faee1254928 Add explicit location for headers from the stream/ directory.
diego
parents: 18771
diff changeset
15 #include "stream/stream.h"
22601
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22599
diff changeset
16 #include "libmpdemux/demuxer.h"
ed8f90096c65 Add explicit location for headers from the libmpdemux/ directory.
diego
parents: 22599
diff changeset
17 #include "libmpdemux/stheader.h"
6927
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
18
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
19 #include "vd_internal.h"
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
20
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
21 static vd_info_t info =
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
22 {
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
23 "Raw DV Video Decoder",
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
24 "libdv",
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
25 "Alexander Neundorf <neundorf@kde.org>",
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
26 "http://libdv.sf.net",
7191
1eadce15446c -afm/-vfm help implemenetd, some cosmetics of ad/vd codec names/comments
arpi
parents: 7180
diff changeset
27 "native codec"
6927
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
28 };
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
29
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
30 LIBVD_EXTERN(libdv)
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
31
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
32 // to set/get/query special features/parameters
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
33 static int control(sh_video_t *sh,int cmd,void* arg,...){
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
34 return CONTROL_UNKNOWN;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
35 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
36
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
37 static dv_decoder_t* global_rawdv_decoder=NULL;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
38
22886
71b3e04d0555 "()" to "(void)" function param list fixes
uau
parents: 22601
diff changeset
39 dv_decoder_t* init_global_rawdv_decoder(void)
6927
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
40 {
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
41 if(!global_rawdv_decoder){
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
42 global_rawdv_decoder=dv_decoder_new(TRUE,TRUE,FALSE);
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
43 global_rawdv_decoder->quality=DV_QUALITY_BEST;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
44 global_rawdv_decoder->prev_frame_decoded = 0;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
45 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
46 return global_rawdv_decoder;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
47 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
48
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
49 // init driver
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
50 static int init(sh_video_t *sh)
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
51 {
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
52 sh->context = (void *)init_global_rawdv_decoder();
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
53 return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_YUY2);
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
54 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
55
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
56 // uninit driver
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
57 static void uninit(sh_video_t *sh){
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
58 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
59
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
60 // decode a frame
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
61 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags)
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
62 {
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
63 mp_image_t* mpi;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
64 dv_decoder_t *decoder=sh->context;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
65
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
66 if(len<=0 || (flags&3)){
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
67 // fprintf(stderr,"decode() (rawdv) SKIPPED\n");
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
68 return NULL; // skipped frame
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
69 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
70
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
71 dv_parse_header(decoder, data);
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
72
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
73 mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE, sh->disp_w, sh->disp_h);
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
74
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
75 if(!mpi){ // temporary!
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
76 fprintf(stderr,"couldn't allocate image for stderr codec\n");
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
77 return NULL;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
78 }
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
79
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
80 dv_decode_full_frame(decoder, data, e_dv_color_yuv, mpi->planes, mpi->stride);
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
81
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
82 return mpi;
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents:
diff changeset
83 }