annotate libmpdemux/demux_vqf.c @ 24674:f6cf2c01315d

Format 0x01 cannot be used with "AMV IMA ADPCM", because it belongs to normal PCM. Make lavf demuxer set codec tag to AMVA in this case. No need to use -ac +ffadpcmimaamva anymore.
author voroshil
date Wed, 03 Oct 2007 15:27:02 +0000
parents 4d81dbdf46b9
children d4fe6e23283e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
1 #include "config.h"
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
2
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
3 #include <stdlib.h>
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
4 #include <stdio.h>
21372
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 19062
diff changeset
5 #include "libavutil/common.h"
21507
fa99b3d31d13 Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents: 21372
diff changeset
6 #include "mpbswap.h"
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
7
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 21531
diff changeset
8 #include "stream/stream.h"
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
9 #include "demuxer.h"
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
10 #include "stheader.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16877
diff changeset
11 #include "libmpcodecs/vqf.h"
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
12
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
13 static int demux_probe_vqf(demuxer_t* demuxer)
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
14 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
15 char buf[KEYWORD_BYTES];
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
16 stream_t *s;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
17 s = demuxer->stream;
15818
faust3
parents: 14276
diff changeset
18 if(stream_read(s,buf,KEYWORD_BYTES)!=KEYWORD_BYTES)
faust3
parents: 14276
diff changeset
19 return 0;
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
20 if(memcmp(buf,"TWIN",KEYWORD_BYTES)==0) return DEMUXER_TYPE_VQF; /*version: 97012000*/
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
21 return 0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
22 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
23
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
24 static demuxer_t* demux_open_vqf(demuxer_t* demuxer) {
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
25 sh_audio_t* sh_audio;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
26 WAVEFORMATEX* w;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
27 stream_t *s;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
28 headerInfo *hi;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
29
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
30 s = demuxer->stream;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
31
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
32 sh_audio = new_sh_audio(demuxer,0);
19062
83c3afeab35d drops casts from void * on malloc/calloc from libmpdemux code
reynaldo
parents: 17636
diff changeset
33 sh_audio->wf = w = malloc(sizeof(WAVEFORMATEX)+sizeof(headerInfo));
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
34 hi = (headerInfo *)&w[1];
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
35 memset(hi,0,sizeof(headerInfo));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
36 w->wFormatTag = 0x1;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
37 sh_audio->format = mmioFOURCC('T','W','I','N'); /* TWinVQ */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
38 w->nChannels = sh_audio->channels = 2;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
39 w->nSamplesPerSec = sh_audio->samplerate = 44100;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
40 w->nAvgBytesPerSec = w->nSamplesPerSec*sh_audio->channels*2;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
41 w->nBlockAlign = 0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
42 sh_audio->samplesize = 2;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
43 w->wBitsPerSample = 8*sh_audio->samplesize;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
44 w->cbSize = 0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
45 strcpy(hi->ID,"TWIN");
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
46 stream_read(s,hi->ID+KEYWORD_BYTES,VERSION_BYTES); /* fourcc+version_id */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
47 while(1)
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
48 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
49 char chunk_id[4];
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
50 unsigned chunk_size;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
51 hi->size=chunk_size=stream_read_dword(s); /* include itself */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
52 stream_read(s,chunk_id,4);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
53 if(*((uint32_t *)&chunk_id[0])==mmioFOURCC('C','O','M','M'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
54 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
55 char buf[chunk_size-8];
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
56 unsigned i,subchunk_size;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
57 if(stream_read(s,buf,chunk_size-8)!=chunk_size-8) return NULL;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
58 i=0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
59 subchunk_size=be2me_32(*((uint32_t *)&buf[0]));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
60 hi->channelMode=be2me_32(*((uint32_t *)&buf[4]));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
61 w->nChannels=sh_audio->channels=hi->channelMode+1; /*0-mono;1-stereo*/
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
62 hi->bitRate=be2me_32(*((uint32_t *)&buf[8]));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
63 sh_audio->i_bps=hi->bitRate*1000/8; /* bitrate kbit/s */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
64 w->nAvgBytesPerSec = sh_audio->i_bps;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
65 hi->samplingRate=be2me_32(*((uint32_t *)&buf[12]));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
66 switch(hi->samplingRate){
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
67 case 44:
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
68 w->nSamplesPerSec=44100;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
69 break;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
70 case 22:
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
71 w->nSamplesPerSec=22050;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
72 break;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
73 case 11:
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
74 w->nSamplesPerSec=11025;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
75 break;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
76 default:
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
77 w->nSamplesPerSec=hi->samplingRate*1000;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
78 break;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
79 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
80 sh_audio->samplerate=w->nSamplesPerSec;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
81 hi->securityLevel=be2me_32(*((uint32_t *)&buf[16]));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
82 w->nBlockAlign = 0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
83 sh_audio->samplesize = 4;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
84 w->wBitsPerSample = 8*sh_audio->samplesize;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
85 w->cbSize = 0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
86 i+=subchunk_size+4;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
87 while(i<chunk_size-8)
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
88 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
89 unsigned slen,sid;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
90 char sdata[chunk_size];
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
91 sid=*((uint32_t *)&buf[i]); i+=4;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
92 slen=be2me_32(*((uint32_t *)&buf[i])); i+=4;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
93 if(sid==mmioFOURCC('D','S','I','Z'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
94 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
95 hi->Dsiz=be2me_32(*((uint32_t *)&buf[i]));
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
96 continue; /* describes the same info as size of DATA chunk */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
97 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
98 memcpy(sdata,&buf[i],slen); sdata[slen]=0; i+=slen;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
99 if(sid==mmioFOURCC('N','A','M','E'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
100 {
21531
a90aa203186c Get rid of min/max macros from aviheader.h, they do not belong here.
reimar
parents: 21507
diff changeset
101 memcpy(hi->Name,sdata,FFMIN(BUFSIZ,slen));
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
102 demux_info_add(demuxer,"Title",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
103 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
104 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
105 if(sid==mmioFOURCC('A','U','T','H'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
106 {
21531
a90aa203186c Get rid of min/max macros from aviheader.h, they do not belong here.
reimar
parents: 21507
diff changeset
107 memcpy(hi->Auth,sdata,FFMIN(BUFSIZ,slen));
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
108 demux_info_add(demuxer,"Author",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
109 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
110 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
111 if(sid==mmioFOURCC('C','O','M','T'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
112 {
21531
a90aa203186c Get rid of min/max macros from aviheader.h, they do not belong here.
reimar
parents: 21507
diff changeset
113 memcpy(hi->Comt,sdata,FFMIN(BUFSIZ,slen));
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
114 demux_info_add(demuxer,"Comment",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
115 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
116 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
117 if(sid==mmioFOURCC('(','c',')',' '))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
118 {
21531
a90aa203186c Get rid of min/max macros from aviheader.h, they do not belong here.
reimar
parents: 21507
diff changeset
119 memcpy(hi->Cpyr,sdata,FFMIN(BUFSIZ,slen));
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
120 demux_info_add(demuxer,"Copyright",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
121 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
122 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
123 if(sid==mmioFOURCC('F','I','L','E'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
124 {
21531
a90aa203186c Get rid of min/max macros from aviheader.h, they do not belong here.
reimar
parents: 21507
diff changeset
125 memcpy(hi->File,sdata,FFMIN(BUFSIZ,slen));
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
126 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
127 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
128 if(sid==mmioFOURCC('A','L','B','M')) demux_info_add(demuxer,"Album",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
129 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
130 if(sid==mmioFOURCC('Y','E','A','R')) demux_info_add(demuxer,"Date",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
131 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
132 if(sid==mmioFOURCC('T','R','A','C')) demux_info_add(demuxer,"Track",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
133 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
134 if(sid==mmioFOURCC('E','N','C','D')) demux_info_add(demuxer,"Encoder",sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
135 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
136 mp_msg(MSGT_DEMUX, MSGL_V, "Unhandled subchunk '%c%c%c%c'='%s'\n",((char *)&sid)[0],((char *)&sid)[1],((char *)&sid)[2],((char *)&sid)[3],sdata);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
137 /* other stuff is unrecognized due untranslatable japan's idiomatics */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
138 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
139 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
140 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
141 if(*((uint32_t *)&chunk_id[0])==mmioFOURCC('D','A','T','A'))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
142 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
143 demuxer->movi_start=stream_tell(s);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
144 demuxer->movi_end=demuxer->movi_start+chunk_size-8;
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16175
diff changeset
145 mp_msg(MSGT_DEMUX, MSGL_V, "Found data at %"PRIX64" size %"PRIu64"\n",demuxer->movi_start,demuxer->movi_end);
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
146 /* Done! play it */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
147 break;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
148 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
149 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
150 {
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
151 mp_msg(MSGT_DEMUX, MSGL_V, "Unhandled chunk '%c%c%c%c' %u bytes\n",((char *)&chunk_id)[0],((char *)&chunk_id)[1],((char *)&chunk_id)[2],((char *)&chunk_id)[3],chunk_size);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
152 stream_skip(s,chunk_size-8); /*unknown chunk type */
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
153 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
154 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
155
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
156 demuxer->audio->sh = sh_audio;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
157 sh_audio->ds = demuxer->audio;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
158 stream_seek(s,demuxer->movi_start);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
159 demuxer->seekable=0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
160 return demuxer;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
161 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
162
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
163 static int demux_vqf_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds) {
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
164 sh_audio_t* sh_audio = demuxer->audio->sh;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
165 int l = sh_audio->wf->nAvgBytesPerSec;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
166 off_t spos = stream_tell(demuxer->stream);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
167 demux_packet_t* dp;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
168
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
169 if(stream_eof(demuxer->stream))
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
170 return 0;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
171
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
172 dp = new_demux_packet(l);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
173 ds->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
174 ds->pos = spos;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
175
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
176 l=stream_read(demuxer->stream,dp->buffer,l);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
177 resize_demux_packet(dp,l);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
178 ds_add_packet(ds,dp);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
179
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
180 return 1;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
181 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
182
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17569
diff changeset
183 static void demux_seek_vqf(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
14276
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
184 #if 0
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
185 stream_t* s = demuxer->stream;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
186 sh_audio_t* sh_audio = demuxer->audio->sh;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
187 off_t base,pos;
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
188
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
189 base = (flags & 1) ? demuxer->movi_start : stream_tell(s);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
190 if(flags & 2)
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
191 pos = base + ((demuxer->movi_end - demuxer->movi_start)*rel_seek_secs);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
192 else
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
193 pos = base + (rel_seek_secs*sh_audio->i_bps);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
194
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
195 pos -= (pos % (sh_audio->channels * sh_audio->samplesize) );
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
196 stream_seek(s,pos);
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
197 #endif
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
198 }
fa80ed52127b TwinVQ decoder and demuxer
rtognimp
parents:
diff changeset
199
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
200 static void demux_close_vqf(demuxer_t* demuxer) {}
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
201
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
202
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
203 demuxer_desc_t demuxer_desc_vqf = {
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
204 "TwinVQ demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
205 "vqf",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
206 "VQF",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
207 "Nick Kurshev",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
208 "ported frm MPlayerXP",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
209 DEMUXER_TYPE_VQF,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
210 1, // safe autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
211 demux_probe_vqf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
212 demux_vqf_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
213 demux_open_vqf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
214 demux_close_vqf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
215 demux_seek_vqf,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
216 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 15818
diff changeset
217 };