annotate libmpdemux/demux_rawvideo.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents 4d81dbdf46b9
children caae775a1619
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
1
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
2 #include "config.h"
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
3
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
4 #include <stdlib.h>
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
5 #include <stdio.h>
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
6 #include <unistd.h>
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
7 #include <string.h>
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
8
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16598
diff changeset
9 #include "m_option.h"
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
10
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 17636
diff changeset
11 #include "stream/stream.h"
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
12 #include "demuxer.h"
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
13 #include "stheader.h"
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
14
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16598
diff changeset
15 #include "libmpcodecs/img_format.h"
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
16
9708
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
17 extern int demuxer_type;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
18 static int format = IMGFMT_I420;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
19 static int size_id = 0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
20 static int width = 0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
21 static int height = 0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
22 static float fps = 25;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
23 static int imgsize=0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
24
10594
57bdcdb061d7 Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents: 10305
diff changeset
25 m_option_t demux_rawvideo_opts[] = {
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
26 // size:
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
27 { "w", &width, CONF_TYPE_INT,CONF_RANGE,1,8192, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
28 { "h", &height, CONF_TYPE_INT,CONF_RANGE,1,8192, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
29 { "sqcif", &size_id, CONF_TYPE_FLAG,0,0,1, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
30 { "qcif", &size_id, CONF_TYPE_FLAG,0,0,2, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
31 { "cif", &size_id, CONF_TYPE_FLAG,0,0,3, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
32 { "4cif", &size_id, CONF_TYPE_FLAG,0,0,4, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
33 { "pal", &size_id, CONF_TYPE_FLAG,0,0,5, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
34 { "ntsc", &size_id, CONF_TYPE_FLAG,0,0,6, NULL },
9068
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
35 { "16cif", &size_id, CONF_TYPE_FLAG,0,0,7, NULL },
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
36 { "sif", &size_id, CONF_TYPE_FLAG,0,0,8, NULL },
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
37 // format:
10599
822b1fa6db25 using CONF_TYPE_IMGFMT
alex
parents: 10594
diff changeset
38 { "format", &format, CONF_TYPE_IMGFMT, 0, 0 , 0, NULL },
822b1fa6db25 using CONF_TYPE_IMGFMT
alex
parents: 10594
diff changeset
39 // below options are obsolete
14166
c7822e66c36f y420 vs i420 typo
diego
parents: 10599
diff changeset
40 { "i420", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_I420, NULL },
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
41 { "yv12", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_YV12, NULL },
10305
3e40b8f879c8 HM12 & NV12 "decoder" (specially interleaved YUV formats, used by Hauppauge's PVR cards)
arpi
parents: 9708
diff changeset
42 { "nv12", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_NV12, NULL },
3e40b8f879c8 HM12 & NV12 "decoder" (specially interleaved YUV formats, used by Hauppauge's PVR cards)
arpi
parents: 9708
diff changeset
43 { "hm12", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_HM12, NULL },
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
44 { "yuy2", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_YUY2, NULL },
9068
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
45 { "uyvy", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_UYVY, NULL },
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
46 { "y8", &format, CONF_TYPE_FLAG, 0, 0 , IMGFMT_Y8, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
47 // misc:
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
48 { "fps", &fps, CONF_TYPE_FLOAT,CONF_RANGE,0.001,1000, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
49 { "size", &imgsize, CONF_TYPE_INT, CONF_RANGE, 1 , 8192*8192*4, NULL },
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
50
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
51 {NULL, NULL, 0, 0, 0, 0, NULL}
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
52 };
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
53
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
54
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
55 static demuxer_t* demux_rawvideo_open(demuxer_t* demuxer) {
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
56 sh_video_t* sh_video;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
57
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
58 switch(size_id){
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
59 case 1: width=128; height=96; break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
60 case 2: width=176; height=144; break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
61 case 3: width=352; height=288; break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
62 case 4: width=704; height=576; break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
63 case 5: width=720; height=576; break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
64 case 6: width=720; height=480; break;
9068
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
65 case 7: width=1408;height=1152;break;
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
66 case 8: width=352; height=240; break;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
67 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
68 if(!width || !height){
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
69 mp_msg(MSGT_DEMUX,MSGL_ERR,"rawvideo: width or height not specified!\n");
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
70 return 0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
71 }
9068
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
72
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
73 if(!imgsize)
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
74 switch(format){
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
75 case IMGFMT_I420:
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
76 case IMGFMT_IYUV:
10305
3e40b8f879c8 HM12 & NV12 "decoder" (specially interleaved YUV formats, used by Hauppauge's PVR cards)
arpi
parents: 9708
diff changeset
77 case IMGFMT_NV12:
3e40b8f879c8 HM12 & NV12 "decoder" (specially interleaved YUV formats, used by Hauppauge's PVR cards)
arpi
parents: 9708
diff changeset
78 case IMGFMT_HM12:
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
79 case IMGFMT_YV12: imgsize=width*height+2*(width>>1)*(height>>1);break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
80 case IMGFMT_YUY2: imgsize=width*height*2;break;
9068
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
81 case IMGFMT_UYVY: imgsize=width*height*2;break;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
82 case IMGFMT_Y8: imgsize=width*height;break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
83 default:
17219
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
84 if (IMGFMT_IS_RGB(format))
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
85 imgsize = width * height * ((IMGFMT_RGB_DEPTH(format) + 7) >> 3);
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
86 else if (IMGFMT_IS_BGR(format))
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
87 imgsize = width * height * ((IMGFMT_BGR_DEPTH(format) + 7) >> 3);
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
88 else {
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
89 mp_msg(MSGT_DEMUX,MSGL_ERR,"rawvideo: img size not specified and unknown format!\n");
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
90 return 0;
17219
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
91 }
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
92 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
93
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
94 sh_video = new_sh_video(demuxer,0);
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
95 sh_video->format=format;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
96 sh_video->fps=fps;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
97 sh_video->frametime=1.0/fps;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
98 sh_video->disp_w=width;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
99 sh_video->disp_h=height;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
100 sh_video->i_bps=fps*imgsize;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
101
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
102 demuxer->movi_start = demuxer->stream->start_pos;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
103 demuxer->movi_end = demuxer->stream->end_pos;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
104
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
105 demuxer->video->sh = sh_video;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
106 sh_video->ds = demuxer->video;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
107
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
108 return demuxer;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
109 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
110
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
111 static int demux_rawvideo_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds) {
9708
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
112 sh_video_t* sh = demuxer->video->sh;
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
113 off_t pos;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
114 if(demuxer->stream->eof) return 0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
115 if(ds!=demuxer->video) return 0;
9708
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
116 pos = stream_tell(demuxer->stream);
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
117 ds_read_packet(ds,demuxer->stream,imgsize,(pos/imgsize)*sh->frametime,pos,0x10);
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
118 return 1;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
119 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
120
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17219
diff changeset
121 static void demux_rawvideo_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
122 stream_t* s = demuxer->stream;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
123 sh_video_t* sh_video = demuxer->video->sh;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
124 off_t pos;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
125
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
126 pos = (flags & 1) ? demuxer->movi_start : stream_tell(s);
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
127 if(flags & 2)
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
128 pos += ((demuxer->movi_end - demuxer->movi_start)*rel_seek_secs);
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
129 else
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
130 pos += (rel_seek_secs*sh_video->i_bps);
9708
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
131 if(pos < 0) pos = 0;
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
132 if(demuxer->movi_end && pos > demuxer->movi_end) pos = (demuxer->movi_end-imgsize);
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
133 pos/=imgsize;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
134 stream_seek(s,pos*imgsize);
9708
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
135 //sh_video->timer=pos * sh_video->frametime;
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
136 demuxer->video->pts = pos * sh_video->frametime;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
137 // printf("demux_rawvideo: streamtell=%d\n",(int)stream_tell(demuxer->stream));
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
138 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
139
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
140
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
141 demuxer_desc_t demuxer_desc_rawvideo = {
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
142 "Raw video demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
143 "rawvideo",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
144 "rawvideo",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
145 "?",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
146 "",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
147 DEMUXER_TYPE_RAWVIDEO,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
148 0, // no autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
149 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
150 demux_rawvideo_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
151 demux_rawvideo_open,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
152 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
153 demux_rawvideo_seek,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
154 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
155 };