Mercurial > mplayer.hg
annotate libmpcodecs/ad_qtaudio.c @ 36341:63f19afc5a6f
avidemux: try reading ODML index if the default one is
uselessly small.
Fixes Bugzilla #2150.
author | reimar |
---|---|
date | Sat, 31 Aug 2013 06:49:56 +0000 |
parents | 06dc4b66a0f1 |
children |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
18 |
8008 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <unistd.h> | |
22 #include <inttypes.h> | |
23 | |
21260
cc732ceece60
Shouldn't move "#ifdef MACOSX" before #include config.h of course...
uau
parents:
21258
diff
changeset
|
24 #include "config.h" |
28197
45ca1763a540
Reorder #includes and #ifdefs to avoid excessive #ifdeffery.
diego
parents:
27388
diff
changeset
|
25 #include "mp_msg.h" |
45ca1763a540
Reorder #includes and #ifdefs to avoid excessive #ifdeffery.
diego
parents:
27388
diff
changeset
|
26 #include "mpbswap.h" |
45ca1763a540
Reorder #includes and #ifdefs to avoid excessive #ifdeffery.
diego
parents:
27388
diff
changeset
|
27 #include "ad_internal.h" |
21260
cc732ceece60
Shouldn't move "#ifdef MACOSX" before #include config.h of course...
uau
parents:
21258
diff
changeset
|
28 |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26542
diff
changeset
|
29 #ifdef CONFIG_QUICKTIME |
21258
ed01090d1192
Move #include <QuickTime/QuickTimeComponents.h> before internal headers.
uau
parents:
18771
diff
changeset
|
30 #include <QuickTime/QuickTimeComponents.h> |
28197
45ca1763a540
Reorder #includes and #ifdefs to avoid excessive #ifdeffery.
diego
parents:
27388
diff
changeset
|
31 #else |
45ca1763a540
Reorder #includes and #ifdefs to avoid excessive #ifdeffery.
diego
parents:
27388
diff
changeset
|
32 #include "loader/ldt_keeper.h" |
31348
8df8a7c20f46
Replace forward declarations by proper loader/wine/winbase.h #include.
diego
parents:
31160
diff
changeset
|
33 #include "loader/wine/winbase.h" |
22577
a033e5519802
Include loader/ prefix in #include path everywhere.
diego
parents:
21260
diff
changeset
|
34 #include "loader/wine/windef.h" |
8451 | 35 #endif |
36 | |
31160 | 37 static const ad_info_t info = { |
8008 | 38 "QuickTime Audio Decoder", |
39 "qtaudio", | |
40 "A'rpi", | |
41 "Sascha Sommer", | |
42 "uses win32 quicktime DLLs" | |
43 }; | |
44 | |
45 LIBAD_EXTERN(qtaudio) | |
46 | |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26542
diff
changeset
|
47 #ifndef CONFIG_QUICKTIME |
8008 | 48 typedef struct OpaqueSoundConverter* SoundConverter; |
49 typedef unsigned long OSType; | |
50 typedef unsigned long UnsignedFixed; | |
51 typedef uint8_t Byte; | |
52 typedef struct SoundComponentData { | |
53 long flags; | |
54 OSType format; | |
55 short numChannels; | |
56 short sampleSize; | |
57 UnsignedFixed sampleRate; | |
58 long sampleCount; | |
59 Byte * buffer; | |
60 long reserved; | |
61 }SoundComponentData; | |
62 | |
63 typedef int (__cdecl* LPFUNC1)(long flag); | |
64 typedef int (__cdecl* LPFUNC2)(const SoundComponentData *, const SoundComponentData *,SoundConverter *); | |
65 typedef int (__cdecl* LPFUNC3)(SoundConverter sc); | |
66 typedef int (__cdecl* LPFUNC4)(void); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
67 typedef int (__cdecl* LPFUNC5)(SoundConverter sc, OSType selector,void * infoPtr); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
68 typedef int (__cdecl* LPFUNC6)(SoundConverter sc, |
8008 | 69 unsigned long inputBytesTarget, |
70 unsigned long *inputFrames, | |
71 unsigned long *inputBytes, | |
72 unsigned long *outputBytes ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
73 typedef int (__cdecl* LPFUNC7)(SoundConverter sc, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
74 const void *inputPtr, |
8008 | 75 unsigned long inputFrames, |
76 void *outputPtr, | |
77 unsigned long *outputFrames, | |
78 unsigned long *outputBytes ); | |
79 typedef int (__cdecl* LPFUNC8)(SoundConverter sc, | |
80 void *outputPtr, | |
81 unsigned long *outputFrames, | |
82 unsigned long *outputBytes); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
83 typedef int (__cdecl* LPFUNC9)(SoundConverter sc) ; |
8008 | 84 |
14528
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
85 static HINSTANCE qtime_qts; // handle to the preloaded quicktime.qts |
8008 | 86 static HINSTANCE qtml_dll; |
87 static LPFUNC1 InitializeQTML; | |
88 static LPFUNC2 SoundConverterOpen; | |
89 static LPFUNC3 SoundConverterClose; | |
90 static LPFUNC4 TerminateQTML; | |
91 static LPFUNC5 SoundConverterSetInfo; | |
92 static LPFUNC6 SoundConverterGetBufferSizes; | |
93 static LPFUNC7 SoundConverterConvertBuffer; | |
94 static LPFUNC8 SoundConverterEndConversion; | |
95 static LPFUNC9 SoundConverterBeginConversion; | |
96 | |
97 #define siDecompressionParams 2002876005 // siDecompressionParams = FOUR_CHAR_CODE('wave') | |
98 | |
29212
eda346733b8c
Add missing 'void' to parameterless function declarations.
diego
parents:
28197
diff
changeset
|
99 static int loader_init(void) |
8008 | 100 { |
101 | |
9405
a4444e7ee56a
real cygwin support by Sascha Sommer <saschasommer@freenet.de>
alex
parents:
8632
diff
changeset
|
102 #ifdef WIN32_LOADER |
8270 | 103 Setup_LDT_Keeper(); |
104 #endif | |
14528
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
105 //preload quicktime.qts to avoid the problems caused by the hardcoded path inside the dll |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
106 qtime_qts = LoadLibraryA("QuickTime.qts"); |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
107 if( qtime_qts == (HMODULE)NULL ) |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
108 { |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
109 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed loading QuickTime.qts\n" ); |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
110 return 1; |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
111 } |
8008 | 112 qtml_dll = LoadLibraryA("qtmlClient.dll"); |
13188 | 113 if( qtml_dll == (HMODULE)NULL ) |
8008 | 114 { |
14528
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
115 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed loading qtmlClient.dll\n" ); |
8008 | 116 return 1; |
117 } | |
118 InitializeQTML = (LPFUNC1)GetProcAddress(qtml_dll,"InitializeQTML"); | |
119 if ( InitializeQTML == NULL ) | |
120 { | |
12193 | 121 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed geting proc address InitializeQTML\n"); |
8008 | 122 return 1; |
123 } | |
124 SoundConverterOpen = (LPFUNC2)GetProcAddress(qtml_dll,"SoundConverterOpen"); | |
125 if ( SoundConverterOpen == NULL ) | |
126 { | |
12193 | 127 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterOpen\n"); |
8008 | 128 return 1; |
129 } | |
130 SoundConverterClose = (LPFUNC3)GetProcAddress(qtml_dll,"SoundConverterClose"); | |
131 if ( SoundConverterClose == NULL ) | |
132 { | |
12193 | 133 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterClose\n"); |
8008 | 134 return 1; |
135 } | |
136 TerminateQTML = (LPFUNC4)GetProcAddress(qtml_dll,"TerminateQTML"); | |
137 if ( TerminateQTML == NULL ) | |
138 { | |
12193 | 139 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address TerminateQTML\n"); |
8008 | 140 return 1; |
141 } | |
142 SoundConverterSetInfo = (LPFUNC5)GetProcAddress(qtml_dll,"SoundConverterSetInfo"); | |
143 if ( SoundConverterSetInfo == NULL ) | |
144 { | |
12193 | 145 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterSetInfo\n"); |
8008 | 146 return 1; |
147 } | |
148 SoundConverterGetBufferSizes = (LPFUNC6)GetProcAddress(qtml_dll,"SoundConverterGetBufferSizes"); | |
149 if ( SoundConverterGetBufferSizes == NULL ) | |
150 { | |
12193 | 151 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterGetBufferSizes\n"); |
8008 | 152 return 1; |
153 } | |
154 SoundConverterConvertBuffer = (LPFUNC7)GetProcAddress(qtml_dll,"SoundConverterConvertBuffer"); | |
155 if ( SoundConverterConvertBuffer == NULL ) | |
156 { | |
12193 | 157 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterConvertBuffer1\n"); |
8008 | 158 return 1; |
159 } | |
160 SoundConverterEndConversion = (LPFUNC8)GetProcAddress(qtml_dll,"SoundConverterEndConversion"); | |
161 if ( SoundConverterEndConversion == NULL ) | |
162 { | |
12193 | 163 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterEndConversion\n"); |
8008 | 164 return 1; |
165 } | |
166 SoundConverterBeginConversion = (LPFUNC9)GetProcAddress(qtml_dll,"SoundConverterBeginConversion"); | |
167 if ( SoundConverterBeginConversion == NULL ) | |
168 { | |
12193 | 169 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"failed getting proc address SoundConverterBeginConversion\n"); |
8008 | 170 return 1; |
171 } | |
12193 | 172 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"loader_init DONE???\n"); |
8008 | 173 return 0; |
174 } | |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26542
diff
changeset
|
175 #endif /* #ifndef CONFIG_QUICKTIME */ |
8008 | 176 |
177 static SoundConverter myConverter = NULL; | |
178 static SoundComponentData InputFormatInfo,OutputFormatInfo; | |
179 | |
180 static int InFrameSize; | |
181 static int OutFrameSize; | |
182 | |
183 static int preinit(sh_audio_t *sh){ | |
184 int error; | |
185 unsigned long FramesToGet=0; //how many frames the demuxer has to get | |
186 unsigned long InputBufferSize=0; //size of the input buffer | |
187 unsigned long OutputBufferSize=0; //size of the output buffer | |
188 unsigned long WantedBufferSize=0; //the size you want your buffers to be | |
32776
15060bd7df4c
fix ad_qtaudio for the case when the libavformat mov demuxer is used
faust3
parents:
31348
diff
changeset
|
189 void* codecdata = sh->codecdata; |
8008 | 190 |
32776
15060bd7df4c
fix ad_qtaudio for the case when the libavformat mov demuxer is used
faust3
parents:
31348
diff
changeset
|
191 if (!sh->codecdata_len && sh->wf && sh->wf->cbSize){ |
15060bd7df4c
fix ad_qtaudio for the case when the libavformat mov demuxer is used
faust3
parents:
31348
diff
changeset
|
192 codecdata = sh->wf + 1; |
15060bd7df4c
fix ad_qtaudio for the case when the libavformat mov demuxer is used
faust3
parents:
31348
diff
changeset
|
193 } |
8008 | 194 |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26542
diff
changeset
|
195 #ifdef CONFIG_QUICKTIME |
9502
241bba8f60e8
MACOSX support patch, based on Dan Christiansens work
alex
parents:
9405
diff
changeset
|
196 EnterMovies(); |
241bba8f60e8
MACOSX support patch, based on Dan Christiansens work
alex
parents:
9405
diff
changeset
|
197 #else |
8008 | 198 if(loader_init()) return 0; // failed to load DLL |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
199 |
12193 | 200 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"loader_init DONE!\n"); |
8008 | 201 |
8159 | 202 error = InitializeQTML(6+16); |
13008 | 203 if(error){ |
204 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"InitializeQTML:%i\n",error); | |
205 return 0; | |
206 } | |
9694 | 207 #endif |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
208 |
8008 | 209 OutputFormatInfo.flags = InputFormatInfo.flags = 0; |
210 OutputFormatInfo.sampleCount = InputFormatInfo.sampleCount = 0; | |
211 OutputFormatInfo.buffer = InputFormatInfo.buffer = NULL; | |
212 OutputFormatInfo.reserved = InputFormatInfo.reserved = 0; | |
213 OutputFormatInfo.numChannels = InputFormatInfo.numChannels = sh->wf->nChannels; | |
8159 | 214 InputFormatInfo.sampleSize = sh->wf->wBitsPerSample; |
215 OutputFormatInfo.sampleSize = 16; | |
8008 | 216 OutputFormatInfo.sampleRate = InputFormatInfo.sampleRate = sh->wf->nSamplesPerSec; |
217 InputFormatInfo.format = bswap_32(sh->format); //1363430706;///*1768775988;//*/1902406962;//qdm2//1768775988;//FOUR_CHAR_CODE('ima4'); | |
218 OutputFormatInfo.format = 1313820229;// FOUR_CHAR_CODE('NONE'); | |
219 | |
220 error = SoundConverterOpen(&InputFormatInfo, &OutputFormatInfo, &myConverter); | |
12193 | 221 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"SoundConverterOpen:%i\n",error); |
8008 | 222 if(error) return 0; |
223 | |
32776
15060bd7df4c
fix ad_qtaudio for the case when the libavformat mov demuxer is used
faust3
parents:
31348
diff
changeset
|
224 if(codecdata){ |
15060bd7df4c
fix ad_qtaudio for the case when the libavformat mov demuxer is used
faust3
parents:
31348
diff
changeset
|
225 error = SoundConverterSetInfo(myConverter,siDecompressionParams,codecdata); |
12193 | 226 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"SoundConverterSetInfo:%i\n",error); |
8632
9cecfb883d85
don't abort if setparams failed - fixes some Qclp files
arpi
parents:
8451
diff
changeset
|
227 // if(error) return 0; |
8008 | 228 } |
229 | |
230 WantedBufferSize=OutputFormatInfo.numChannels*OutputFormatInfo.sampleRate*2; | |
231 error = SoundConverterGetBufferSizes(myConverter, | |
232 WantedBufferSize,&FramesToGet,&InputBufferSize,&OutputBufferSize); | |
12193 | 233 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"SoundConverterGetBufferSizes:%i\n",error); |
234 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"WantedBufferSize = %li\n",WantedBufferSize); | |
235 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"InputBufferSize = %li\n",InputBufferSize); | |
236 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"OutputBufferSize = %li\n",OutputBufferSize); | |
237 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FramesToGet = %li\n",FramesToGet); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
238 |
8389
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
239 InFrameSize=(InputBufferSize+FramesToGet-1)/FramesToGet; |
8008 | 240 OutFrameSize=OutputBufferSize/FramesToGet; |
241 | |
12193 | 242 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FrameSize: %i -> %i\n",InFrameSize,OutFrameSize); |
8008 | 243 |
244 error = SoundConverterBeginConversion(myConverter); | |
12193 | 245 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"SoundConverterBeginConversion:%i\n",error); |
8008 | 246 if(error) return 0; |
247 | |
248 sh->audio_out_minsize=OutputBufferSize; | |
249 sh->audio_in_minsize=InputBufferSize; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
250 |
8008 | 251 sh->channels=sh->wf->nChannels; |
252 sh->samplerate=sh->wf->nSamplesPerSec; | |
8159 | 253 sh->samplesize=2; //(sh->wf->wBitsPerSample+7)/8; |
8008 | 254 |
255 sh->i_bps=sh->wf->nAvgBytesPerSec; | |
256 //InputBufferSize*WantedBufferSize/OutputBufferSize; | |
257 | |
8159 | 258 if(sh->format==0x3343414D){ |
259 // MACE 3:1 | |
260 sh->ds->ss_div = 2*3; // 1 samples/packet | |
261 sh->ds->ss_mul = sh->channels*2*1; // 1 bytes/packet | |
262 } else | |
263 if(sh->format==0x3643414D){ | |
264 // MACE 6:1 | |
265 sh->ds->ss_div = 2*6; // 1 samples/packet | |
266 sh->ds->ss_mul = sh->channels*2*1; // 1 bytes/packet | |
267 } | |
268 | |
8008 | 269 return 1; // return values: 1=OK 0=ERROR |
270 } | |
271 | |
272 static int init(sh_audio_t *sh_audio){ | |
273 | |
274 return 1; // return values: 1=OK 0=ERROR | |
275 } | |
276 | |
277 static void uninit(sh_audio_t *sh){ | |
278 int error; | |
279 unsigned long ConvertedFrames=0; | |
280 unsigned long ConvertedBytes=0; | |
30614
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
281 |
33172
06dc4b66a0f1
Do not try to set up the FS segment when using quicktime to decode,
reimar
parents:
32776
diff
changeset
|
282 #if defined(WIN32_LOADER) && !defined(CONFIG_QUICKTIME) |
30614
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
283 Setup_FS_Segment(); |
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
284 #endif |
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
285 |
8008 | 286 error=SoundConverterEndConversion(myConverter,NULL,&ConvertedFrames,&ConvertedBytes); |
12193 | 287 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"SoundConverterEndConversion:%i\n",error); |
8008 | 288 error = SoundConverterClose(myConverter); |
12193 | 289 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"SoundConverterClose:%i\n",error); |
8389
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
290 // error = TerminateQTML(); |
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
291 // printf("TerminateQTML:%i\n",error); |
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
292 // FreeLibrary( qtml_dll ); |
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
293 // qtml_dll = NULL; |
14528
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
294 // FreeLibrary( qtime_qts ); |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
295 // qtime_qts = NULL; |
8389
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
296 // printf("qt dll loader uninit done\n"); |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26542
diff
changeset
|
297 #ifdef CONFIG_QUICKTIME |
9502
241bba8f60e8
MACOSX support patch, based on Dan Christiansens work
alex
parents:
9405
diff
changeset
|
298 ExitMovies(); |
241bba8f60e8
MACOSX support patch, based on Dan Christiansens work
alex
parents:
9405
diff
changeset
|
299 #endif |
8008 | 300 } |
301 | |
302 static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen){ | |
303 int error; | |
304 unsigned long FramesToGet=0; //how many frames the demuxer has to get | |
305 unsigned long InputBufferSize=0; //size of the input buffer | |
306 unsigned long ConvertedFrames=0; | |
307 unsigned long ConvertedBytes=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
308 |
33172
06dc4b66a0f1
Do not try to set up the FS segment when using quicktime to decode,
reimar
parents:
32776
diff
changeset
|
309 #if defined(WIN32_LOADER) && !defined(CONFIG_QUICKTIME) |
30614
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
310 Setup_FS_Segment(); |
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
311 #endif |
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30566
diff
changeset
|
312 |
8008 | 313 FramesToGet=minlen/OutFrameSize; |
314 if(FramesToGet*OutFrameSize<minlen && | |
315 (FramesToGet+1)*OutFrameSize<=maxlen) ++FramesToGet; | |
316 if(FramesToGet*InFrameSize>sh->a_in_buffer_size) | |
317 FramesToGet=sh->a_in_buffer_size/InFrameSize; | |
318 | |
319 InputBufferSize=FramesToGet*InFrameSize; | |
320 | |
8159 | 321 // printf("FramesToGet = %li (%li -> %li bytes)\n",FramesToGet, |
322 // InputBufferSize, FramesToGet*OutFrameSize); | |
8008 | 323 |
324 if(InputBufferSize>sh->a_in_buffer_len){ | |
325 int x=demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len], | |
326 InputBufferSize-sh->a_in_buffer_len); | |
327 if(x>0) sh->a_in_buffer_len+=x; | |
328 if(InputBufferSize>sh->a_in_buffer_len) | |
329 FramesToGet=sh->a_in_buffer_len/InFrameSize; // not enough data! | |
330 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
331 |
8159 | 332 // printf("\nSoundConverterConvertBuffer(myConv=%p,inbuf=%p,frames=%d,outbuf=%p,&convframes=%p,&convbytes=%p)\n", |
333 // myConverter,sh->a_in_buffer,FramesToGet,buf,&ConvertedFrames,&ConvertedBytes); | |
8008 | 334 error = SoundConverterConvertBuffer(myConverter,sh->a_in_buffer, |
335 FramesToGet,buf,&ConvertedFrames,&ConvertedBytes); | |
8159 | 336 // printf("SoundConverterConvertBuffer:%i\n",error); |
337 // printf("ConvertedFrames = %li\n",ConvertedFrames); | |
338 // printf("ConvertedBytes = %li\n",ConvertedBytes); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29212
diff
changeset
|
339 |
8389
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
340 // InputBufferSize=(ConvertedBytes/OutFrameSize)*InFrameSize; // FIXME!! |
e8c51ec86340
fixed in/out framesize rounding bug (causing low-rate QCLP hangup/looping)
arpi
parents:
8270
diff
changeset
|
341 InputBufferSize=FramesToGet*InFrameSize; |
8008 | 342 sh->a_in_buffer_len-=InputBufferSize; |
343 if(sh->a_in_buffer_len<0) sh->a_in_buffer_len=0; // should not happen... | |
344 else if(sh->a_in_buffer_len>0){ | |
345 memcpy(sh->a_in_buffer,&sh->a_in_buffer[InputBufferSize],sh->a_in_buffer_len); | |
346 } | |
347 | |
348 return ConvertedBytes; | |
349 } | |
350 | |
351 static int control(sh_audio_t *sh,int cmd,void* arg, ...){ | |
352 // various optional functions you MAY implement: | |
353 return CONTROL_UNKNOWN; | |
354 } |