annotate libmpdemux/demux_mf.c @ 27404:778fac8c186f

Add separate variables for CFLAGS that are specific to internal libraries and only add them to CFLAGS when compiling objects from those libraries.
author diego
date Thu, 07 Aug 2008 21:46:06 +0000
parents 4be576db89df
children e2552a27678c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
1
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
2 #include <stdio.h>
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
3 #include <stdlib.h>
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
4 #include <unistd.h>
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
5 #include <sys/types.h>
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
6 #include <sys/stat.h>
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
7 #include <unistd.h>
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
8
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
9 #include "config.h"
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
10 #include "mp_msg.h"
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
11 #include "help_mp.h"
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
12
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 22083
diff changeset
13 #include "stream/stream.h"
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
14 #include "demuxer.h"
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
15 #include "stheader.h"
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
16 #include "mf.h"
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
17
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17624
diff changeset
18 static void demux_seek_mf(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
19 mf_t * mf = (mf_t *)demuxer->priv;
4565
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
20 sh_video_t * sh_video = demuxer->video->sh;
25883
baf32110d3fc Use defines to give names to the different seek flags.
reimar
parents: 25707
diff changeset
21 int newpos = (flags & SEEK_ABSOLUTE)?0:mf->curr_frame - 1;
4565
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
22
25883
baf32110d3fc Use defines to give names to the different seek flags.
reimar
parents: 25707
diff changeset
23 if ( flags & SEEK_FACTOR ) newpos+=rel_seek_secs*(mf->nr_of_files - 1);
4565
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
24 else newpos+=rel_seek_secs * sh_video->fps;
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
25 if ( newpos < 0 ) newpos=0;
19180
c5ee8c9808ef fix 3 bugs in libmpdemux/demux_mf.c
gpoirier
parents: 17636
diff changeset
26 if( newpos >= mf->nr_of_files) newpos=mf->nr_of_files - 1;
4565
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
27 mf->curr_frame=newpos;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
28 }
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
29
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
30 // return value:
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
31 // 0 = EOF or no stream found
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
32 // 1 = successfully read a packet
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
33 static int demux_mf_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds){
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
34 mf_t * mf;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
35 struct stat fs;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
36 FILE * f;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
37
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
38 mf=(mf_t*)demuxer->priv;
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
39 if ( mf->curr_frame >= mf->nr_of_files ) return 0;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
40
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
41 stat( mf->names[mf->curr_frame],&fs );
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
42 // printf( "[demux_mf] frame: %d (%s,%d)\n",mf->curr_frame,mf->names[mf->curr_frame],fs.st_size );
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
43
9992
e33317c4d9af fopen requires binary flag on windows, too
faust3
parents: 9945
diff changeset
44 if ( !( f=fopen( mf->names[mf->curr_frame],"rb" ) ) ) return 0;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
45 {
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
46 sh_video_t * sh_video = demuxer->video->sh;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
47 demux_packet_t * dp = new_demux_packet( fs.st_size );
4565
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
48 if ( !fread( dp->buffer,fs.st_size,1,f ) ) return 0;
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
49 dp->pts=mf->curr_frame / sh_video->fps;
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
50 dp->pos=mf->curr_frame;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
51 dp->flags=0;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
52 // append packet to DS stream:
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
53 ds_add_packet( demuxer->video,dp );
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
54 }
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
55 fclose( f );
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
56
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
57 mf->curr_frame++;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
58 return 1;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
59 }
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
60
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
61 static const struct {
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
62 const char *type;
25062
25ee4d06a2df 100l, fix uint32_t* instead of uint32_t typo in demux_mf type->fourcc table
reimar
parents: 25034
diff changeset
63 uint32_t format;
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
64 } type2format[] = {
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
65 { "bmp", mmioFOURCC('b', 'm', 'p', ' ') },
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
66 { "jpeg", mmioFOURCC('I', 'J', 'P', 'G') },
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
67 { "jpg", mmioFOURCC('I', 'J', 'P', 'G') },
25961
354ad909efcf add ffpcx decoder, works on my samples.
compn
parents: 25883
diff changeset
68 { "pcx", mmioFOURCC('p', 'c', 'x', ' ') },
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
69 { "png", mmioFOURCC('M', 'P', 'N', 'G') },
26711
4be576db89df add ffptx , works on ptx samples
compn
parents: 26070
diff changeset
70 { "ptx", mmioFOURCC('p', 't', 'x', ' ') },
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
71 { "tga", mmioFOURCC('M', 'T', 'G', 'A') },
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
72 { "tif", mmioFOURCC('t', 'i', 'f', 'f') },
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
73 { "sgi", mmioFOURCC('S', 'G', 'I', '1') },
26070
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
74 { "sun", mmioFOURCC('s', 'u', 'n', ' ') },
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
75 { "ras", mmioFOURCC('s', 'u', 'n', ' ') },
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
76 { "ra", mmioFOURCC('s', 'u', 'n', ' ') },
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
77 { "im1", mmioFOURCC('s', 'u', 'n', ' ') },
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
78 { "im8", mmioFOURCC('s', 'u', 'n', ' ') },
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
79 { "im24", mmioFOURCC('s', 'u', 'n', ' ') },
77aa6f108f20 sun rasterfile decoder
compn
parents: 25961
diff changeset
80 { "sunras", mmioFOURCC('s', 'u', 'n', ' ') },
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
81 { NULL, 0 }
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
82 };
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
83
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
84 static demuxer_t* demux_open_mf(demuxer_t* demuxer){
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
85 sh_video_t *sh_video = NULL;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
86 mf_t *mf = NULL;
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
87 int i;
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
88
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
89 if(!demuxer->stream->url) return NULL;
22083
59982606e602 mf demuxer only works with mf:// urls, so check for that.
reimar
parents: 19794
diff changeset
90 if(strncmp(demuxer->stream->url, "mf://", 5)) return NULL;
9148
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
91
17624
7b30bef00830 allow autodetection of pictures type when using mf://@file.list syntax
iive
parents: 17569
diff changeset
92
7b30bef00830 allow autodetection of pictures type when using mf://@file.list syntax
iive
parents: 17569
diff changeset
93 mf=open_mf(demuxer->stream->url + 5);
7b30bef00830 allow autodetection of pictures type when using mf://@file.list syntax
iive
parents: 17569
diff changeset
94 if(!mf) return NULL;
7b30bef00830 allow autodetection of pictures type when using mf://@file.list syntax
iive
parents: 17569
diff changeset
95
9148
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
96 if(!mf_type){
17624
7b30bef00830 allow autodetection of pictures type when using mf://@file.list syntax
iive
parents: 17569
diff changeset
97 char* p=strrchr(mf->names[0],'.');
9148
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
98 if(!p){
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
99 mp_msg(MSGT_DEMUX, MSGL_INFO, "[demux_mf] file type was not set! (try -mf type=xxx)\n" );
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
100 free( mf ); return NULL;
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
101 }
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
102 mf_type=strdup(p+1);
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
103 mp_msg(MSGT_DEMUX, MSGL_INFO, "[demux_mf] file type was not set! trying 'type=%s'...\n", mf_type);
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
104 }
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
105
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
106 mf->curr_frame=0;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
107
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
108 demuxer->movi_start = 0;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
109 demuxer->movi_end = mf->nr_of_files - 1;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
110
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
111 // create a new video stream header
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
112 sh_video = new_sh_video(demuxer, 0);
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
113 // make sure the demuxer knows about the new video stream header
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
114 // (even though new_sh_video() ought to take care of it)
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
115 demuxer->video->sh = sh_video;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
116
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
117 // make sure that the video demuxer stream header knows about its
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
118 // parent video demuxer stream (this is getting wacky), or else
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
119 // video_read_properties() will choke
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
120 sh_video->ds = demuxer->video;
9148
946b14a9e743 type autodetection (from filemask/filelist extension)
arpi
parents: 7407
diff changeset
121
25033
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
122 for (i = 0; type2format[i].type; i++)
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
123 if (strcasecmp(mf_type, type2format[i].type) == 0)
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
124 break;
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
125 if (!type2format[i].type) {
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
126 mp_msg(MSGT_DEMUX, MSGL_INFO, "[demux_mf] unknown input file type.\n" );
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
127 free(mf);
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
128 return NULL;
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
129 }
3dceb6c96307 Replace if-else constructs for type -> fourcc mapping by a table in demux_mf
reimar
parents: 25020
diff changeset
130 sh_video->format = type2format[i].format;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
131
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
132 sh_video->disp_w = mf_w;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
133 sh_video->disp_h = mf_h;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
134 sh_video->fps = mf_fps;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
135 sh_video->frametime = 1 / sh_video->fps;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
136
4556
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
137 // emulate BITMAPINFOHEADER:
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
138 sh_video->bih=malloc(sizeof(BITMAPINFOHEADER));
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
139 memset(sh_video->bih,0,sizeof(BITMAPINFOHEADER));
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
140 sh_video->bih->biSize=40;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
141 sh_video->bih->biWidth = mf_w;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
142 sh_video->bih->biHeight = mf_h;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
143 sh_video->bih->biPlanes=1;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
144 sh_video->bih->biBitCount=24;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
145 sh_video->bih->biCompression=sh_video->format;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
146 sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;
90a535d87e7b emulating BITMAPINFOHDR (for win32 codecs)
arpi
parents: 4550
diff changeset
147
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
148 /* disable seeking */
4565
be1562b2c2d0 finalize mfi support.
pontscho
parents: 4556
diff changeset
149 // demuxer->seekable = 0;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
150
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
151 demuxer->priv=(void*)mf;
4550
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
152
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
153 return demuxer;
ff9f62e4bdd8 add mfi demuxer
pontscho
parents:
diff changeset
154 }
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5029
diff changeset
155
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
156 static void demux_close_mf(demuxer_t* demuxer) {
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
157 mf_t *mf = demuxer->priv;
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5029
diff changeset
158
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
159 if(!mf)
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5029
diff changeset
160 return;
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7362
diff changeset
161 free(mf);
5810
8a357300d0ec Added demuxer uninit
albeu
parents: 5029
diff changeset
162 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
163
19220
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
164 static int demux_control_mf(demuxer_t *demuxer, int cmd, void *arg) {
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
165 mf_t *mf = (mf_t *)demuxer->priv;
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
166 sh_video_t *sh_video = demuxer->video->sh;
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
167
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
168 switch(cmd) {
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
169 case DEMUXER_CTRL_GET_TIME_LENGTH:
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
170 *((double *)arg) = (double)mf->nr_of_files / sh_video->fps;
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
171 return DEMUXER_CTRL_OK;
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
172
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
173 case DEMUXER_CTRL_GET_PERCENT_POS:
19794
0951c3e8864b Avoid division by zero DEMUXER_CTRL_GET_PERCENT_POS with only one frame by just
reimar
parents: 19220
diff changeset
174 if (mf->nr_of_files <= 1)
0951c3e8864b Avoid division by zero DEMUXER_CTRL_GET_PERCENT_POS with only one frame by just
reimar
parents: 19220
diff changeset
175 return DEMUXER_CTRL_DONTKNOW;
19220
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
176 *((int *)arg) = 100 * mf->curr_frame / (mf->nr_of_files - 1);
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
177 return DEMUXER_CTRL_OK;
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
178
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
179 default:
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
180 return DEMUXER_CTRL_NOTIMPL;
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
181 }
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
182 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
183
25707
d4fe6e23283e Make all demuxer_desc_t const, thus moving them to .rodata
reimar
parents: 25062
diff changeset
184 const demuxer_desc_t demuxer_desc_mf = {
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
185 "mf demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
186 "mf",
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
187 "MF",
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
188 "?",
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
189 "multiframe?, pictures demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
190 DEMUXER_TYPE_MF,
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
191 0, // no autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
192 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
193 demux_mf_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
194 demux_open_mf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
195 demux_close_mf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
196 demux_seek_mf,
19220
fbd2391fcbb8 Implement DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS,
reimar
parents: 19180
diff changeset
197 demux_control_mf
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 9992
diff changeset
198 };