annotate libmpdemux/demux_rawvideo.c @ 25281:cf9a7a933032

test for presence of .svn directory if we are supposed to traverse the tree according to svn info .svn might be missing (i.e. after svn export)
author ivo
date Wed, 05 Dec 2007 23:36:03 +0000
parents bb7c65f2a289
children d4fe6e23283e
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
25241
bb7c65f2a289 Make m_option_t arrays referenced by cfg-common.h const
reimar
parents: 25193
diff changeset
25 const 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;
25193
55783f005bf3 simplify
michael
parents: 24740
diff changeset
80 case IMGFMT_YUY2:
9068
8f1659a47aa4 16cif,sif,uyvy
michael
parents: 9065
diff changeset
81 case IMGFMT_UYVY: imgsize=width*height*2;break;
24740
caae775a1619 support Y800 in raw video
diego
parents: 22605
diff changeset
82 case IMGFMT_Y800:
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
83 case IMGFMT_Y8: imgsize=width*height;break;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
84 default:
17219
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
85 if (IMGFMT_IS_RGB(format))
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
86 imgsize = width * height * ((IMGFMT_RGB_DEPTH(format) + 7) >> 3);
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
87 else if (IMGFMT_IS_BGR(format))
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
88 imgsize = width * height * ((IMGFMT_BGR_DEPTH(format) + 7) >> 3);
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
89 else {
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
90 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
91 return 0;
17219
fde45c312c31 calculate framesize for raw RGB and BGR.
reimar
parents: 17012
diff changeset
92 }
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
93 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
94
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
95 sh_video = new_sh_video(demuxer,0);
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
96 sh_video->format=format;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
97 sh_video->fps=fps;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
98 sh_video->frametime=1.0/fps;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
99 sh_video->disp_w=width;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
100 sh_video->disp_h=height;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
101 sh_video->i_bps=fps*imgsize;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
102
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
103 demuxer->movi_start = demuxer->stream->start_pos;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
104 demuxer->movi_end = demuxer->stream->end_pos;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
105
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
106 demuxer->video->sh = sh_video;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
107 sh_video->ds = demuxer->video;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
108
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
109 return demuxer;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
110 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
111
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
112 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
113 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
114 off_t pos;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
115 if(demuxer->stream->eof) return 0;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
116 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
117 pos = stream_tell(demuxer->stream);
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
118 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
119 return 1;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
120 }
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
121
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17219
diff changeset
122 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
123 stream_t* s = demuxer->stream;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
124 sh_video_t* sh_video = demuxer->video->sh;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
125 off_t pos;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
126
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
127 pos = (flags & 1) ? demuxer->movi_start : stream_tell(s);
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
128 if(flags & 2)
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
129 pos += ((demuxer->movi_end - demuxer->movi_start)*rel_seek_secs);
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
130 else
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
131 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
132 if(pos < 0) pos = 0;
a37708f0b574 on now set the demuxer type some we can use rawvideo with -audiofile
albeu
parents: 9068
diff changeset
133 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
134 pos/=imgsize;
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
135 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
136 //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
137 demuxer->video->pts = pos * sh_video->frametime;
9065
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
138 // printf("demux_rawvideo: streamtell=%d\n",(int)stream_tell(demuxer->stream));
59805b2d220a raw video demuxer, requested by Michael
arpi
parents:
diff changeset
139 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
140
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
141
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
142 demuxer_desc_t demuxer_desc_rawvideo = {
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
143 "Raw video demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
144 "rawvideo",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
145 "rawvideo",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
146 "?",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
147 "",
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
148 DEMUXER_TYPE_RAWVIDEO,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
149 0, // no autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
150 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
151 demux_rawvideo_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
152 demux_rawvideo_open,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
153 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
154 demux_rawvideo_seek,
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
155 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 14166
diff changeset
156 };