annotate dec_audio.c @ 5206:2ca5a9bfaa98

allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
author atmos4
date Tue, 19 Mar 2002 21:48:55 +0000
parents 59df6b778d78
children 6175c9cfab11
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
1
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
2 #define USE_G72X
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
3 //#define USE_LIBAC3
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
4
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
5 #include <stdio.h>
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
6 #include <stdlib.h>
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1410
diff changeset
7 #include <unistd.h>
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
8
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
9 #include "config.h"
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1529
diff changeset
10 #include "mp_msg.h"
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
11 #include "help_mp.h"
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1529
diff changeset
12
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
13 extern int verbose; // defined in mplayer.c
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
14
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
15 #include "stream.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
16 #include "demuxer.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
17
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
18 #include "codec-cfg.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
19 #include "stheader.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
20
2563
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
21 #include "dec_audio.h"
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
22
4486
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
23 #include "roqav.h"
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
24
2563
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
25 //==========================================================================
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
26
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
27 #include "libao2/afmt.h"
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
28
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
29 #include "dll_init.h"
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
30
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
31 #include "mp3lib/mp3.h"
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
32
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
33 #ifdef USE_LIBAC3
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
34 #include "libac3/ac3.h"
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
35 #endif
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
36
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
37 #include "liba52/a52.h"
3907
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
38 #include "liba52/mm_accel.h"
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
39 static sample_t * a52_samples;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
40 static a52_state_t a52_state;
3907
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
41 static uint32_t a52_accel=0;
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
42 static uint32_t a52_flags=0;
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
43
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
44 #ifdef USE_G72X
3426
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
45 #include "g72x/g72x.h"
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
46 static G72x_DATA g72x_data;
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
47 #endif
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
48
883
ef5d1ab14218 using alaw.h instead of alaw.c
arpi_esp
parents: 758
diff changeset
49 #include "alaw.h"
ef5d1ab14218 using alaw.h instead of alaw.c
arpi_esp
parents: 758
diff changeset
50
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
51 #include "xa/xa_gsm.h"
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
52
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
53 #include "ac3-iec958.h"
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
54
3756
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
55 #include "adpcm.h"
2420
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
56
3145
78e11396f431 runtime cpu detection
michael
parents: 2563
diff changeset
57 #include "cpudetect.h"
78e11396f431 runtime cpu detection
michael
parents: 2563
diff changeset
58
3182
95bbd21e8e1f moved num_audio_channels out of LIBMAD ifdef, where it didn't belong!
steve
parents: 3181
diff changeset
59 /* used for ac3surround decoder - set using -channels option */
95bbd21e8e1f moved num_audio_channels out of LIBMAD ifdef, where it didn't belong!
steve
parents: 3181
diff changeset
60 int audio_output_channels = 2;
95bbd21e8e1f moved num_audio_channels out of LIBMAD ifdef, where it didn't belong!
steve
parents: 3181
diff changeset
61
2563
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
62 #ifdef USE_FAKE_MONO
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
63 int fakemono=0;
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
64 #endif
fc124f9db88e more cleanup, warnings fixed
arpi
parents: 2547
diff changeset
65
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
66 #ifdef USE_DIRECTSHOW
3947
2eb8c8aacca7 using dshow headers from dshow/ instead of c++ version
arpi
parents: 3933
diff changeset
67 #include "loader/dshow/DS_AudioDecoder.h"
2eb8c8aacca7 using dshow headers from dshow/ instead of c++ version
arpi
parents: 3933
diff changeset
68 static DS_AudioDecoder* ds_adec=NULL;
1291
36ed1692c0b8 video codec stuff moved to dec_video.c
arpi
parents: 1289
diff changeset
69 #endif
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 1020
diff changeset
70
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
71 #ifdef HAVE_OGGVORBIS
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
72 /* XXX is math.h really needed? - atmos */
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
73 #include <math.h>
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
74 #include <vorbis/codec.h>
2341
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
75
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
76 // This struct is also defined in demux_ogg.c => common header ?
2341
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
77 typedef struct ov_struct_st {
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
78 vorbis_info vi; /* struct that stores all the static vorbis bitstream
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
79 settings */
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
80 vorbis_comment vc; /* struct that stores all the bitstream user comments */
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
81 vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
82 vorbis_block vb; /* local working space for packet->PCM decode */
62be13447906 oggvorbis stuff moved out from stheader.h
arpi
parents: 2049
diff changeset
83 } ov_struct_t;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
84 #endif
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
85
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
86 #ifdef HAVE_FAAD
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
87 #include <faad.h>
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
88 static faacDecHandle faac_hdec;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
89 static faacDecFrameInfo faac_finfo;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
90 static int faac_bytesconsumed = 0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
91 static unsigned char *faac_buffer;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
92 /* configure maximum supported channels, *
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
93 * this is theoretically max. 64 chans */
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
94 #define FAAD_MAX_CHANNELS 6
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
95 #define FAAD_BUFFLEN (FAAD_MIN_STREAMSIZE*FAAD_MAX_CHANNELS)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
96 #endif
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
97
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
98 #ifdef USE_LIBAVCODEC
2496
b2ce5d6d7d4f libffmpeg.so support
nick
parents: 2434
diff changeset
99 #ifdef USE_LIBAVCODEC_SO
b2ce5d6d7d4f libffmpeg.so support
nick
parents: 2434
diff changeset
100 #include <libffmpeg/avcodec.h>
b2ce5d6d7d4f libffmpeg.so support
nick
parents: 2434
diff changeset
101 #else
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
102 #include "libavcodec/avcodec.h"
2496
b2ce5d6d7d4f libffmpeg.so support
nick
parents: 2434
diff changeset
103 #endif
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
104 static AVCodec *lavc_codec=NULL;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
105 static AVCodecContext lavc_context;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
106 extern int avcodec_inited;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
107 #endif
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
108
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
109
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
110
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
111 #ifdef USE_LIBMAD
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
112 #include <mad.h>
4208
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
113
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
114 #define MAD_SINGLE_BUFFER_SIZE 8192
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
115 #define MAD_TOTAL_BUFFER_SIZE ((MAD_SINGLE_BUFFER_SIZE)*3)
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
116
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
117 static struct mad_stream mad_stream;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
118 static struct mad_frame mad_frame;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
119 static struct mad_synth mad_synth;
4208
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
120 static char* mad_in_buffer = 0; /* base pointer of buffer */
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
121
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
122 // ensure buffer is filled with some data
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
123 static void mad_prepare_buffer(sh_audio_t* sh_audio, struct mad_stream* ms, int length)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
124 {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
125 if(sh_audio->a_in_buffer_len < length) {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
126 int len = demux_read_data(sh_audio->ds, sh_audio->a_in_buffer+sh_audio->a_in_buffer_len, length-sh_audio->a_in_buffer_len);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
127 sh_audio->a_in_buffer_len += len;
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
128 // printf("mad_prepare_buffer: read %d bytes\n", len);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
129 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
130 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
131
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
132 static void mad_postprocess_buffer(sh_audio_t* sh_audio, struct mad_stream* ms)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
133 {
4208
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
134 /* rotate buffer while possible, in order to reduce the overhead of endless memcpy */
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
135 int delta = (unsigned char*)ms->next_frame - (unsigned char *)sh_audio->a_in_buffer;
4208
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
136 if((unsigned long)(sh_audio->a_in_buffer) - (unsigned long)mad_in_buffer <
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
137 (MAD_TOTAL_BUFFER_SIZE - MAD_SINGLE_BUFFER_SIZE - delta)) {
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
138 sh_audio->a_in_buffer += delta;
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
139 sh_audio->a_in_buffer_len -= delta;
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
140 } else {
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
141 sh_audio->a_in_buffer = mad_in_buffer;
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
142 sh_audio->a_in_buffer_len -= delta;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
143 memcpy(sh_audio->a_in_buffer, ms->next_frame, sh_audio->a_in_buffer_len);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
144 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
145 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
146
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
147 static inline
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
148 signed short mad_scale(mad_fixed_t sample)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
149 {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
150 /* round */
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
151 sample += (1L << (MAD_F_FRACBITS - 16));
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
152
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
153 /* clip */
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
154 if (sample >= MAD_F_ONE)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
155 sample = MAD_F_ONE - 1;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
156 else if (sample < -MAD_F_ONE)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
157 sample = -MAD_F_ONE;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
158
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
159 /* quantize */
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
160 return sample >> (MAD_F_FRACBITS + 1 - 16);
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
161
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
162 }
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
163
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
164 static void mad_sync(sh_audio_t* sh_audio, struct mad_stream* ms)
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
165 {
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
166 int len;
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
167 #if 1
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
168 int skipped = 0;
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
169
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
170 // printf("buffer len: %d\n", sh_audio->a_in_buffer_len);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
171 while(sh_audio->a_in_buffer_len - skipped)
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
172 {
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
173 len = mp_decode_mp3_header(sh_audio->a_in_buffer+skipped);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
174 if (len != -1)
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
175 {
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
176 // printf("Frame len=%d\n", len);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
177 break;
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
178 }
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
179 else
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
180 skipped++;
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
181 }
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
182 if (skipped)
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
183 {
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
184 mp_msg(MSGT_DECAUDIO, MSGL_INFO, "mad: audio synced, skipped bytes: %d\n", skipped);
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
185 // ms->skiplen += skipped;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
186 // printf("skiplen: %d (skipped: %d)\n", ms->skiplen, skipped);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
187
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
188 // if (sh_audio->a_in_buffer_len - skipped < MAD_BUFFER_GUARD)
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
189 // printf("Mad reports: too small buffer\n");
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
190
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
191 // mad_stream_buffer(ms, sh_audio->a_in_buffer+skipped, sh_audio->a_in_buffer_len-skipped);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
192 // mad_prepare_buffer(sh_audio, ms, sh_audio->a_in_buffer_len-skipped);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
193
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
194 /* move frame to the beginning of the buffer and fill up to a_in_buffer_size */
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
195 sh_audio->a_in_buffer_len -= skipped;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
196 memcpy(sh_audio->a_in_buffer, sh_audio->a_in_buffer+skipped, sh_audio->a_in_buffer_len);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
197 mad_prepare_buffer(sh_audio, ms, sh_audio->a_in_buffer_size);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
198 mad_stream_buffer(ms, sh_audio->a_in_buffer, sh_audio->a_in_buffer_len);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
199 // printf("bufflen: %d\n", sh_audio->a_in_buffer_len);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
200
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
201 // len = mp_decode_mp3_header(sh_audio->a_in_buffer);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
202 // printf("len: %d\n", len);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
203 ms->md_len = len;
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
204 }
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
205 #else
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
206 len = mad_stream_sync(&ms);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
207 if (len == -1)
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
208 {
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
209 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Mad sync failed\n");
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
210 }
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
211 #endif
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
212 }
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
213
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
214 static void mad_print_error(struct mad_stream *mad_stream)
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
215 {
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
216 printf("error (0x%x): ", mad_stream->error);
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
217 switch(mad_stream->error)
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
218 {
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
219 case MAD_ERROR_BUFLEN: printf("buffer too small"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
220 case MAD_ERROR_BUFPTR: printf("invalid buffer pointer"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
221 case MAD_ERROR_NOMEM: printf("not enought memory"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
222 case MAD_ERROR_LOSTSYNC: printf("lost sync"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
223 case MAD_ERROR_BADLAYER: printf("bad layer"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
224 case MAD_ERROR_BADBITRATE: printf("bad bitrate"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
225 case MAD_ERROR_BADSAMPLERATE: printf("bad samplerate"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
226 case MAD_ERROR_BADEMPHASIS: printf("bad emphasis"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
227 case MAD_ERROR_BADCRC: printf("bad crc"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
228 case MAD_ERROR_BADBITALLOC: printf("forbidden bit alloc val"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
229 case MAD_ERROR_BADSCALEFACTOR: printf("bad scalefactor index"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
230 case MAD_ERROR_BADFRAMELEN: printf("bad frame length"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
231 case MAD_ERROR_BADBIGVALUES: printf("bad bigvalues count"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
232 case MAD_ERROR_BADBLOCKTYPE: printf("reserved blocktype"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
233 case MAD_ERROR_BADSCFSI: printf("bad scalefactor selinfo"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
234 case MAD_ERROR_BADDATAPTR: printf("bad maindatabegin ptr"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
235 case MAD_ERROR_BADPART3LEN: printf("bad audio data len"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
236 case MAD_ERROR_BADHUFFTABLE: printf("bad huffman table sel"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
237 case MAD_ERROR_BADHUFFDATA: printf("huffman data overrun"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
238 case MAD_ERROR_BADSTEREO: printf("incomp. blocktype for JS"); break;
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
239 default:
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
240 printf("unknown error");
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
241 }
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
242 printf("\n");
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
243 }
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
244 #endif
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
245
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
246
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
247 static int a52_fillbuff(sh_audio_t *sh_audio){
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
248 int length=0;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
249 int flags=0;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
250 int sample_rate=0;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
251 int bit_rate=0;
3834
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
252
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
253 sh_audio->a_in_buffer_len=0;
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
254 // sync frame:
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
255 while(1){
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
256 while(sh_audio->a_in_buffer_len<7){
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
257 int c=demux_getc(sh_audio->ds);
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
258 if(c<0) return -1; // EOF
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
259 sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
260 }
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
261 length = a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate);
3834
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
262 if(length>=7 && length<=3840) break; // we're done.
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
263 // bad file => resync
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
264 memcpy(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,6);
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
265 --sh_audio->a_in_buffer_len;
bc85116eaf5e a52 sync fixed
arpi
parents: 3829
diff changeset
266 }
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
267 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"a52: len=%d flags=0x%X %d Hz %d bit/s\n",length,flags,sample_rate,bit_rate);
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
268 sh_audio->samplerate=sample_rate;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
269 sh_audio->i_bps=bit_rate/8;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
270 demux_read_data(sh_audio->ds,sh_audio->a_in_buffer+7,length-7);
3891
e87f69a44813 a52: CRC check for AC3 frames
arpi
parents: 3887
diff changeset
271
e87f69a44813 a52: CRC check for AC3 frames
arpi
parents: 3887
diff changeset
272 if(crc16_block(sh_audio->a_in_buffer+2,length-2)!=0)
e87f69a44813 a52: CRC check for AC3 frames
arpi
parents: 3887
diff changeset
273 mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed! \n");
e87f69a44813 a52: CRC check for AC3 frames
arpi
parents: 3887
diff changeset
274
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
275 return length;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
276 }
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
277
3887
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
278 // returns: number of available channels
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
279 static int a52_printinfo(sh_audio_t *sh_audio){
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
280 int flags, sample_rate, bit_rate;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
281 char* mode="unknown";
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
282 int channels=0;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
283 a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate);
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
284 switch(flags&A52_CHANNEL_MASK){
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
285 case A52_CHANNEL: mode="channel"; channels=2; break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
286 case A52_MONO: mode="mono"; channels=1; break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
287 case A52_STEREO: mode="stereo"; channels=2; break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
288 case A52_3F: mode="3f";channels=3;break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
289 case A52_2F1R: mode="2f+1r";channels=3;break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
290 case A52_3F1R: mode="3f+1r";channels=4;break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
291 case A52_2F2R: mode="2f+2r";channels=4;break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
292 case A52_3F2R: mode="3f+2r";channels=5;break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
293 case A52_CHANNEL1: mode="channel1"; channels=2; break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
294 case A52_CHANNEL2: mode="channel2"; channels=2; break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
295 case A52_DOLBY: mode="dolby"; channels=2; break;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
296 }
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
297 mp_msg(MSGT_DECAUDIO,MSGL_INFO,"AC3: %d.%d (%s%s) %d Hz %3.1f kbit/s\n",
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
298 channels, (flags&A52_LFE)?1:0,
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
299 mode, (flags&A52_LFE)?"+lfe":"",
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
300 sample_rate, bit_rate*0.001f);
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
301 return (flags&A52_LFE) ? (channels+1) : channels;
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
302 }
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
303
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
304 int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen);
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
305
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
306
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
307 static sh_audio_t* dec_audio_sh=NULL;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
308
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
309 #ifdef USE_LIBAC3
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
310 // AC3 decoder buffer callback:
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
311 static void ac3_fill_buffer(uint8_t **start,uint8_t **end){
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
312 int len=ds_get_packet(dec_audio_sh->ds,start);
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
313 //printf("<ac3:%d>\n",len);
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
314 if(len<0)
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
315 *start = *end = NULL;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
316 else
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
317 *end = *start + len;
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
318 }
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
319 #endif
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
320
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
321 // MP3 decoder buffer callback:
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
322 int mplayer_audio_read(char *buf,int size){
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
323 int len;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
324 len=demux_read_data(dec_audio_sh->ds,buf,size);
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
325 return len;
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
326 }
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
327
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
328 int init_audio(sh_audio_t *sh_audio){
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
329 int driver=sh_audio->codec->driver;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
330
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
331 if(!sh_audio->samplesize)
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
332 sh_audio->samplesize=2;
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
333 if(!sh_audio->sample_format)
4423
ed500b952d2d possible AC3 fix, by Marcus Blomenkamp <Marcus.Blomenkamp@epost.de>
arpi
parents: 4208
diff changeset
334 #ifdef WORDS_BIGENDIAN
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
335 sh_audio->sample_format=AFMT_S16_BE;
1320
18374d49befa On big-endian architectures, all audio decoders default to big-endian 16-bit
jkeil
parents: 1313
diff changeset
336 #else
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
337 sh_audio->sample_format=AFMT_S16_LE;
1320
18374d49befa On big-endian architectures, all audio decoders default to big-endian 16-bit
jkeil
parents: 1313
diff changeset
338 #endif
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
339 //sh_audio->samplerate=0;
401
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
340 //sh_audio->pcm_bswap=0;
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
341 //sh_audio->o_bps=0;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
342
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
343 sh_audio->a_buffer_size=0;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
344 sh_audio->a_buffer=NULL;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
345
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
346 sh_audio->a_in_buffer_len=0;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
347
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
348 // setup required min. in/out buffer size:
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
349 sh_audio->audio_out_minsize=8192;// default size, maybe not enough for Win32/ACM
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
350
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
351 switch(driver){
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
352 case AFM_ACM:
1517
0e9c29538a86 Use USE_WIN32DLL define instead of ARCH_X86 to decide whether or not to compile
jkeil
parents: 1485
diff changeset
353 #ifndef USE_WIN32DLL
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
354 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_NoACMSupport);
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 1291
diff changeset
355 driver=0;
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 1291
diff changeset
356 #else
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
357 // Win32 ACM audio codec:
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
358 if(init_acm_audio_codec(sh_audio)){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
359 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
360 sh_audio->channels=sh_audio->o_wf.nChannels;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
361 sh_audio->samplerate=sh_audio->o_wf.nSamplesPerSec;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
362 // if(sh_audio->audio_out_minsize>16384) sh_audio->audio_out_minsize=16384;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
363 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
364 // if(sh_audio->a_buffer_size<sh_audio->audio_out_minsize+MAX_OUTBURST)
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
365 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
366 } else {
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
367 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_ACMiniterror);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
368 driver=0;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
369 }
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 1291
diff changeset
370 #endif
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
371 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
372 case AFM_DSHOW:
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
373 #ifndef USE_DIRECTSHOW
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
374 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_NoDShowAudio);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
375 driver=0;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
376 #else
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
377 // Win32 DShow audio codec:
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 303
diff changeset
378 // printf("DShow_audio: channs=%d rate=%d\n",sh_audio->channels,sh_audio->samplerate);
3442
62b452b7ddf9 changed for updated DShow wrapper api
arpi
parents: 3426
diff changeset
379 if(!(ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll,&sh_audio->codec->guid,sh_audio->wf))){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
380 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_MissingDLLcodec,sh_audio->codec->dll);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
381 driver=0;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
382 } else {
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
383 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec;
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
384 sh_audio->channels=sh_audio->wf->nChannels;
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
385 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
386 sh_audio->audio_in_minsize=2*sh_audio->wf->nBlockAlign;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
387 if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
388 sh_audio->a_in_buffer_size=sh_audio->audio_in_minsize;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
389 sh_audio->a_in_buffer=malloc(sh_audio->a_in_buffer_size);
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
390 sh_audio->a_in_buffer_len=0;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
391 sh_audio->audio_out_minsize=16384;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
392 }
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
393 #endif
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
394 break;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
395 case AFM_VORBIS:
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
396 #ifndef HAVE_OGGVORBIS
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
397 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_NoOggVorbis);
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
398 driver=0;
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
399 #else
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
400 /* OggVorbis audio via libvorbis, compatible with files created by nandub and zorannt codec */
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
401 // Is there always 1024 samples/frame ? ***** Albeu
1837
9fd8b5e0b864 ogg/vorbis stuff cleanup, buffering fixes, printf->mp_msg
arpi
parents: 1834
diff changeset
402 sh_audio->audio_out_minsize=1024*4; // 1024 samples/frame
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
403 #endif
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
404 break;
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
405 case AFM_AAC:
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
406 // AAC (MPEG2 Audio, MPEG4 Audio)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
407 #ifndef HAVE_FAAD
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
408 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"Error: Cannot decode AAC data, because MPlayer was compiled without FAAD support\n"/*MSGTR_NoFAAD*/);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
409 driver=0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
410 #else
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
411 mp_msg(MSGT_DECAUDIO,MSGL_V,"Using FAAD to decode AAC content!\n"/*MSGTR_UseFAAD*/);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
412 // Samples per frame * channels per frame, this might not work with >2 chan AAC, need test samples! ::atmos
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
413 sh_audio->audio_out_minsize=2048*2;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
414 #endif
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
415 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
416 case AFM_PCM:
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
417 case AFM_DVDPCM:
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
418 case AFM_ALAW:
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
419 // PCM, aLaw
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
420 sh_audio->audio_out_minsize=2048;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
421 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
422 case AFM_AC3:
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
423 case AFM_A52:
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
424 // Dolby AC3 audio:
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3145
diff changeset
425 // however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3145
diff changeset
426 sh_audio->audio_out_minsize=audio_output_channels*2*256*6;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
427 break;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
428 case AFM_HWAC3:
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
429 // Dolby AC3 audio:
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
430 sh_audio->audio_out_minsize=4*256*6;
4423
ed500b952d2d possible AC3 fix, by Marcus Blomenkamp <Marcus.Blomenkamp@epost.de>
arpi
parents: 4208
diff changeset
431 // sh_audio->sample_format = AFMT_AC3;
ed500b952d2d possible AC3 fix, by Marcus Blomenkamp <Marcus.Blomenkamp@epost.de>
arpi
parents: 4208
diff changeset
432 // sh_audio->sample_format = AFMT_S16_LE;
ed500b952d2d possible AC3 fix, by Marcus Blomenkamp <Marcus.Blomenkamp@epost.de>
arpi
parents: 4208
diff changeset
433 sh_audio->channels=2;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
434 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
435 case AFM_GSM:
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
436 // MS-GSM audio codec:
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
437 sh_audio->audio_out_minsize=4*320;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
438 break;
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
439 case AFM_IMAADPCM:
3756
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
440 sh_audio->audio_out_minsize=4096;
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
441 sh_audio->ds->ss_div=IMA_ADPCM_SAMPLES_PER_BLOCK;
5049
e080a8d5019f fixed long-standing issue with stereo IMA4 decoder
melanson
parents: 4854
diff changeset
442 sh_audio->ds->ss_mul=IMA_ADPCM_BLOCK_SIZE * sh_audio->wf->nChannels;
2420
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
443 break;
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
444 case AFM_MSADPCM:
3875
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
445 sh_audio->audio_out_minsize=sh_audio->wf->nBlockAlign * 8;
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
446 sh_audio->ds->ss_div = MS_ADPCM_SAMPLES_PER_BLOCK;
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
447 sh_audio->ds->ss_mul = sh_audio->wf->nBlockAlign;
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
448 break;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
449 case AFM_DK4ADPCM:
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
450 sh_audio->audio_out_minsize=DK4_ADPCM_SAMPLES_PER_BLOCK * 4;
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
451 sh_audio->ds->ss_div=DK4_ADPCM_SAMPLES_PER_BLOCK;
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
452 sh_audio->ds->ss_mul=sh_audio->wf->nBlockAlign;
3933
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
453 break;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
454 case AFM_DK3ADPCM:
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
455 sh_audio->audio_out_minsize=DK3_ADPCM_SAMPLES_PER_BLOCK * 4;
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
456 sh_audio->ds->ss_div=DK3_ADPCM_SAMPLES_PER_BLOCK;
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
457 sh_audio->ds->ss_mul=DK3_ADPCM_BLOCK_SIZE;
3826
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
458 break;
4486
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
459 case AFM_ROQAUDIO:
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
460 // minsize was stored in wf->nBlockAlign by the RoQ demuxer
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
461 sh_audio->audio_out_minsize=sh_audio->wf->nBlockAlign;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
462 sh_audio->ds->ss_div=DK3_ADPCM_SAMPLES_PER_BLOCK;
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
463 sh_audio->ds->ss_mul=DK3_ADPCM_BLOCK_SIZE;
4486
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
464 sh_audio->context = roq_decode_audio_init();
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
465 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
466 case AFM_MPEG:
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
467 // MPEG Audio:
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
468 sh_audio->audio_out_minsize=4608;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
469 break;
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
470 #ifdef USE_G72X
3426
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
471 case AFM_G72X:
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
472 // g72x_reader_init(&g72x_data,G723_16_BITS_PER_SAMPLE);
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
473 g72x_reader_init(&g72x_data,G723_24_BITS_PER_SAMPLE);
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
474 // g72x_reader_init(&g72x_data,G721_32_BITS_PER_SAMPLE);
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
475 // g72x_reader_init(&g72x_data,G721_40_BITS_PER_SAMPLE);
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
476 sh_audio->audio_out_minsize=g72x_data.samplesperblock*4;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
477 break;
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
478 #endif
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
479 case AFM_FFMPEG:
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
480 #ifndef USE_LIBAVCODEC
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
481 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_NoLAVCsupport);
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
482 return 0;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
483 #else
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
484 // FFmpeg Audio:
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
485 sh_audio->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
486 break;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
487 #endif
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
488
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
489 #ifdef USE_LIBMAD
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
490 case AFM_MAD:
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
491 mp_msg(MSGT_DECVIDEO, MSGL_V, "mad: setting minimum outputsize\n");
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
492 sh_audio->audio_out_minsize=4608;
4208
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
493 if(sh_audio->audio_in_minsize<MAD_SINGLE_BUFFER_SIZE) sh_audio->audio_in_minsize=MAD_SINGLE_BUFFER_SIZE;
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
494 sh_audio->a_in_buffer_size=sh_audio->audio_in_minsize;
4208
c92c23a42e91 libmad memcpy optimization by Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
arpi
parents: 4151
diff changeset
495 mad_in_buffer = sh_audio->a_in_buffer = malloc(MAD_TOTAL_BUFFER_SIZE);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
496 sh_audio->a_in_buffer_len=0;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
497 break;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
498 #endif
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
499 }
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
500
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
501 if(!driver) return 0;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
502
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
503 // allocate audio out buffer:
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
504 sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST; // worst case calc.
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
505
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1529
diff changeset
506 mp_msg(MSGT_DECAUDIO,MSGL_V,"dec_audio: Allocating %d + %d = %d bytes for output buffer\n",
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
507 sh_audio->audio_out_minsize,MAX_OUTBURST,sh_audio->a_buffer_size);
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
508
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
509 sh_audio->a_buffer=malloc(sh_audio->a_buffer_size);
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
510 if(!sh_audio->a_buffer){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
511 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_CantAllocAudioBuf);
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
512 return 0;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
513 }
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
514 memset(sh_audio->a_buffer,0,sh_audio->a_buffer_size);
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
515 sh_audio->a_buffer_len=0;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
516
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
517 switch(driver){
1517
0e9c29538a86 Use USE_WIN32DLL define instead of ARCH_X86 to decide whether or not to compile
jkeil
parents: 1485
diff changeset
518 #ifdef USE_WIN32DLL
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
519 case AFM_ACM: {
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
520 int ret=acm_decode_audio(sh_audio,sh_audio->a_buffer,4096,sh_audio->a_buffer_size);
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
521 if(ret<0){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
522 mp_msg(MSGT_DECAUDIO,MSGL_INFO,"ACM decoding error: %d\n",ret);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
523 driver=0;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
524 }
640
ef7249823af2 clicks/noise at start fixed
arpi_esp
parents: 604
diff changeset
525 sh_audio->a_buffer_len=ret;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
526 break;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
527 }
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 1291
diff changeset
528 #endif
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
529 case AFM_PCM: {
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
530 // AVI PCM Audio:
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
531 WAVEFORMATEX *h=sh_audio->wf;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
532 sh_audio->i_bps=h->nAvgBytesPerSec;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
533 sh_audio->channels=h->nChannels;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
534 sh_audio->samplerate=h->nSamplesPerSec;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
535 sh_audio->samplesize=(h->wBitsPerSample+7)/8;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
536 switch(sh_audio->format){ // hardware formats:
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
537 case 0x6: sh_audio->sample_format=AFMT_A_LAW;break;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
538 case 0x7: sh_audio->sample_format=AFMT_MU_LAW;break;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
539 case 0x11: sh_audio->sample_format=AFMT_IMA_ADPCM;break;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
540 case 0x50: sh_audio->sample_format=AFMT_MPEG;break;
2547
77a3f73c04d5 support for twos
arpi
parents: 2496
diff changeset
541 case 0x736F7774: sh_audio->sample_format=AFMT_S16_LE;sh_audio->codec->driver=AFM_DVDPCM;break;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
542 // case 0x2000: sh_audio->sample_format=AFMT_AC3;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
543 default: sh_audio->sample_format=(sh_audio->samplesize==2)?AFMT_S16_LE:AFMT_U8;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
544 }
401
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
545 break;
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
546 }
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
547 case AFM_DVDPCM: {
401
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
548 // DVD PCM Audio:
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
549 sh_audio->channels=2;
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
550 sh_audio->samplerate=48000;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
551 sh_audio->i_bps=2*2*48000;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
552 // sh_audio->pcm_bswap=1;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
553 break;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
554 }
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
555 case AFM_AC3: {
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
556 #ifndef USE_LIBAC3
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
557 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"WARNING: libac3 support is disabled. (hint: upgrade codecs.conf)\n");
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
558 driver=0;
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
559 #else
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
560 // Dolby AC3 audio:
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
561 dec_audio_sh=sh_audio; // save sh_audio for the callback:
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
562 ac3_config.fill_buffer_callback = ac3_fill_buffer;
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3145
diff changeset
563 ac3_config.num_output_ch = audio_output_channels;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
564 ac3_config.flags = 0;
3145
78e11396f431 runtime cpu detection
michael
parents: 2563
diff changeset
565 if(gCpuCaps.hasMMX){
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
566 ac3_config.flags |= AC3_MMX_ENABLE;
3145
78e11396f431 runtime cpu detection
michael
parents: 2563
diff changeset
567 }
78e11396f431 runtime cpu detection
michael
parents: 2563
diff changeset
568 if(gCpuCaps.has3DNow){
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
569 ac3_config.flags |= AC3_3DNOW_ENABLE;
3145
78e11396f431 runtime cpu detection
michael
parents: 2563
diff changeset
570 }
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
571 ac3_init();
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
572 sh_audio->ac3_frame = ac3_decode_frame();
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
573 if(sh_audio->ac3_frame){
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
574 ac3_frame_t* fr=(ac3_frame_t*)sh_audio->ac3_frame;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
575 sh_audio->samplerate=fr->sampling_rate;
3181
c8edb0691f09 Extended oss output driver and libac3 to support 4 and 6 channel output mixes. added -channels command line option
steve
parents: 3145
diff changeset
576 sh_audio->channels=ac3_config.num_output_ch;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
577 // 1 frame: 6*256 samples 1 sec: sh_audio->samplerate samples
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
578 //sh_audio->i_bps=fr->frame_size*fr->sampling_rate/(6*256);
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
579 sh_audio->i_bps=fr->bit_rate*(1000/8);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
580 } else {
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
581 driver=0; // bad frame -> disable audio
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
582 }
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
583 #endif
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
584 break;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
585 }
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
586 case AFM_A52: {
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
587 sample_t level=1, bias=384;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
588 int flags=0;
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
589 // Dolby AC3 audio:
3907
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
590 if(gCpuCaps.hasSSE) a52_accel|=MM_ACCEL_X86_SSE;
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
591 if(gCpuCaps.hasMMX) a52_accel|=MM_ACCEL_X86_MMX;
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
592 if(gCpuCaps.hasMMX2) a52_accel|=MM_ACCEL_X86_MMXEXT;
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
593 if(gCpuCaps.has3DNow) a52_accel|=MM_ACCEL_X86_3DNOW;
4497
d3aedd7db02c Restore K7 support
nick
parents: 4486
diff changeset
594 if(gCpuCaps.has3DNowExt) a52_accel|=MM_ACCEL_X86_3DNOWEXT;
3907
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
595 a52_samples=a52_init (a52_accel);
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
596 if (a52_samples == NULL) {
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
597 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n");
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
598 driver=0;break;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
599 }
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
600 sh_audio->a_in_buffer_size=3840;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
601 sh_audio->a_in_buffer=malloc(sh_audio->a_in_buffer_size);
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
602 sh_audio->a_in_buffer_len=0;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
603 if(a52_fillbuff(sh_audio)<0){
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
604 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n");
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
605 driver=0;break;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
606 }
3887
2bafb3aaae46 print AC3 info + hotfix for channels upmix
arpi
parents: 3886
diff changeset
607 // 'a52 cannot upmix' hotfix:
3968
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
608 a52_printinfo(sh_audio);
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
609 // if(audio_output_channels<sh_audio->channels)
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
610 // sh_audio->channels=audio_output_channels;
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
611 // channels setup:
3968
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
612 sh_audio->channels=audio_output_channels;
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
613 while(sh_audio->channels>0){
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
614 switch(sh_audio->channels){
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
615 case 1: a52_flags=A52_MONO; break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
616 // case 2: a52_flags=A52_STEREO; break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
617 case 2: a52_flags=A52_DOLBY; break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
618 // case 3: a52_flags=A52_3F; break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
619 case 3: a52_flags=A52_2F1R; break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
620 case 4: a52_flags=A52_2F2R; break; // 2+2
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
621 case 5: a52_flags=A52_3F2R; break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
622 case 6: a52_flags=A52_3F2R|A52_LFE; break; // 5.1
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
623 }
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
624 // test:
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
625 flags=a52_flags|A52_ADJUST_LEVEL;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
626 mp_msg(MSGT_DECAUDIO,MSGL_V,"A52 flags before a52_frame: 0x%X\n",flags);
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
627 if (a52_frame (&a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
628 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: error decoding frame -> nosound\n");
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
629 driver=0;break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
630 }
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
631 mp_msg(MSGT_DECAUDIO,MSGL_V,"A52 flags after a52_frame: 0x%X\n",flags);
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
632 // frame decoded, let's init resampler:
3968
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
633 if(a52_resample_init(a52_accel,flags,sh_audio->channels)) break;
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
634 --sh_audio->channels; // try to decrease no. of channels
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
635 }
3bbaeba57939 iterated a52 channel setup
arpi
parents: 3947
diff changeset
636 if(sh_audio->channels<=0){
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
637 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n");
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
638 driver=0;break;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
639 }
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
640 break;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
641 }
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
642 case AFM_HWAC3: {
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
643 // Dolby AC3 passthrough:
3907
6312aa265429 pass accel flags to a52_resample_init
arpi
parents: 3906
diff changeset
644 a52_samples=a52_init (a52_accel);
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
645 if (a52_samples == NULL) {
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
646 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n");
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
647 driver=0;break;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
648 }
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
649 sh_audio->a_in_buffer_size=3840;
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
650 sh_audio->a_in_buffer=malloc(sh_audio->a_in_buffer_size);
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
651 sh_audio->a_in_buffer_len=0;
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
652 if(a52_fillbuff(sh_audio)<0) {
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
653 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n");
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
654 driver=0;break;
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
655 }
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
656
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
657 //sh_audio->samplerate=ai.samplerate; // SET by a52_fillbuff()
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
658 //sh_audio->samplesize=ai.framesize;
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
659 //sh_audio->i_bps=ai.bitrate*(1000/8); // SET by a52_fillbuff()
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
660 //sh_audio->ac3_frame=malloc(6144);
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
661 //sh_audio->o_bps=sh_audio->i_bps; // XXX FIXME!!! XXX
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
662
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
663 // o_bps is calculated from samplesize*channels*samplerate
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
664 // a single ac3 frame is always translated to 6144 byte packet. (zero padding)
4423
ed500b952d2d possible AC3 fix, by Marcus Blomenkamp <Marcus.Blomenkamp@epost.de>
arpi
parents: 4208
diff changeset
665 sh_audio->channels=2;
ed500b952d2d possible AC3 fix, by Marcus Blomenkamp <Marcus.Blomenkamp@epost.de>
arpi
parents: 4208
diff changeset
666 sh_audio->samplesize=2; // 2*2*(6*256) = 6144 (very TRICKY!)
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
667
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
668 break;
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
669 }
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
670 case AFM_ALAW: {
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
671 // aLaw audio codec:
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
672 sh_audio->channels=sh_audio->wf->nChannels;
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
673 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
674 sh_audio->i_bps=sh_audio->channels*sh_audio->samplerate;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
675 break;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
676 }
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
677 #ifdef USE_G72X
3426
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
678 case AFM_G72X: {
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
679 // GSM 723 audio codec:
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
680 sh_audio->channels=sh_audio->wf->nChannels;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
681 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
682 sh_audio->i_bps=(sh_audio->samplerate/g72x_data.samplesperblock)*g72x_data.blocksize;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
683 break;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
684 }
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
685 #endif
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
686 #ifdef USE_LIBAVCODEC
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
687 case AFM_FFMPEG: {
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
688 int x;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
689 mp_msg(MSGT_DECAUDIO,MSGL_V,"FFmpeg's libavcodec audio codec\n");
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
690 if(!avcodec_inited){
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
691 avcodec_init();
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
692 avcodec_register_all();
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
693 avcodec_inited=1;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
694 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
695 lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh_audio->codec->dll);
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
696 if(!lavc_codec){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
697 mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_MissingLAVCcodec,sh_audio->codec->dll);
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
698 return 0;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
699 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
700 memset(&lavc_context, 0, sizeof(lavc_context));
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
701 /* open it */
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
702 if (avcodec_open(&lavc_context, lavc_codec) < 0) {
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
703 mp_msg(MSGT_DECAUDIO,MSGL_ERR, MSGTR_CantOpenCodec);
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
704 return 0;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
705 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
706 mp_msg(MSGT_DECAUDIO,MSGL_V,"INFO: libavcodec init OK!\n");
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
707
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
708 // Decode at least 1 byte: (to get header filled)
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
709 x=decode_audio(sh_audio,sh_audio->a_buffer,1,sh_audio->a_buffer_size);
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
710 if(x>0) sh_audio->a_buffer_len=x;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
711
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
712 #if 1
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
713 sh_audio->channels=lavc_context.channels;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
714 sh_audio->samplerate=lavc_context.sample_rate;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
715 sh_audio->i_bps=lavc_context.bit_rate/8;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
716 #else
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
717 sh_audio->channels=sh_audio->wf->nChannels;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
718 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
719 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
720 #endif
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
721 break;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
722 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
723 #endif
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
724 case AFM_GSM: {
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
725 // MS-GSM audio codec:
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
726 GSM_Init();
432
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
727 sh_audio->channels=sh_audio->wf->nChannels;
5251b0c57e39 sh_audio->wf and sh_video->bih changed to dynamic (thanx to Jens Hoffmann)
arpi_esp
parents: 401
diff changeset
728 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
729 // decodes 65 byte -> 320 short
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
730 // 1 sec: sh_audio->channels*sh_audio->samplerate samples
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
731 // 1 frame: 320 samples
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
732 sh_audio->i_bps=65*(sh_audio->channels*sh_audio->samplerate)/320; // 1:10
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
733 break;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
734 }
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
735 case AFM_IMAADPCM:
2420
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
736 // IMA-ADPCM 4:1 audio codec:
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
737 sh_audio->channels=sh_audio->wf->nChannels;
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
738 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
739 // decodes 34 byte -> 64 short
3756
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
740 sh_audio->i_bps=IMA_ADPCM_BLOCK_SIZE*(sh_audio->channels*sh_audio->samplerate)/IMA_ADPCM_SAMPLES_PER_BLOCK; // 1:4
2420
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
741 break;
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
742 case AFM_MSADPCM:
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
743 sh_audio->channels=sh_audio->wf->nChannels;
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
744 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
3875
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
745 sh_audio->i_bps = sh_audio->wf->nBlockAlign *
3826
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
746 (sh_audio->channels*sh_audio->samplerate) / MS_ADPCM_SAMPLES_PER_BLOCK;
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
747 break;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
748 case AFM_DK4ADPCM:
3933
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
749 sh_audio->channels=sh_audio->wf->nChannels;
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
750 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
751 sh_audio->i_bps = sh_audio->wf->nBlockAlign *
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
752 (sh_audio->channels*sh_audio->samplerate) / DK4_ADPCM_SAMPLES_PER_BLOCK;
3933
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
753 break;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
754 case AFM_DK3ADPCM:
3826
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
755 sh_audio->channels=sh_audio->wf->nChannels;
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
756 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
757 sh_audio->i_bps=DK3_ADPCM_BLOCK_SIZE*
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
758 (sh_audio->channels*sh_audio->samplerate) / DK3_ADPCM_SAMPLES_PER_BLOCK;
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
759 break;
4486
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
760 case AFM_ROQAUDIO:
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
761 sh_audio->channels=sh_audio->wf->nChannels;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
762 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
763 sh_audio->i_bps = (sh_audio->channels * 22050) / 2;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
764 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
765 case AFM_MPEG: {
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
766 // MPEG Audio:
1289
3f490fad9bdf some code clanup (first step to libdemuxer)
arpi
parents: 1058
diff changeset
767 dec_audio_sh=sh_audio; // save sh_audio for the callback:
732
e14114170e01 applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents: 640
diff changeset
768 #ifdef USE_FAKE_MONO
e14114170e01 applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents: 640
diff changeset
769 MP3_Init(fakemono);
e14114170e01 applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents: 640
diff changeset
770 #else
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
771 MP3_Init();
732
e14114170e01 applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents: 640
diff changeset
772 #endif
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
773 MP3_samplerate=MP3_channels=0;
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
774 sh_audio->a_buffer_len=MP3_DecodeFrame(sh_audio->a_buffer,-1);
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
775 sh_audio->channels=2; // hack
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
776 sh_audio->samplerate=MP3_samplerate;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
777 sh_audio->i_bps=MP3_bitrate*(1000/8);
4151
6ad5da34c463 added mp3_printheader for mp3lib init\n
alex
parents: 4001
diff changeset
778 MP3_PrintHeader();
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
779 break;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
780 }
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
781 #ifdef HAVE_OGGVORBIS
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
782 case AFM_VORBIS: {
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
783 ogg_packet op;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
784 vorbis_comment vc;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
785 struct ov_struct_st *ov;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
786
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
787 /// Init the decoder with the 3 header packets
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
788 ov = (struct ov_struct_st*)malloc(sizeof(struct ov_struct_st));
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
789 vorbis_info_init(&ov->vi);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
790 vorbis_comment_init(&vc);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
791 op.bytes = ds_get_packet(sh_audio->ds,&op.packet);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
792 op.b_o_s = 1;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
793 /// Header
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
794 if(vorbis_synthesis_headerin(&ov->vi,&vc,&op) <0) {
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
795 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"OggVorbis: initial (identification) header broken!\n");
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
796 driver = 0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
797 free(ov);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
798 break;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
799 }
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
800 op.bytes = ds_get_packet(sh_audio->ds,&op.packet);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
801 op.b_o_s = 0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
802 /// Comments
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
803 if(vorbis_synthesis_headerin(&ov->vi,&vc,&op) <0) {
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
804 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"OggVorbis: comment header broken!\n");
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
805 driver = 0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
806 free(ov);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
807 break;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
808 }
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
809 op.bytes = ds_get_packet(sh_audio->ds,&op.packet);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
810 //// Codebook
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
811 if(vorbis_synthesis_headerin(&ov->vi,&vc,&op)<0) {
1837
9fd8b5e0b864 ogg/vorbis stuff cleanup, buffering fixes, printf->mp_msg
arpi
parents: 1834
diff changeset
812 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"OggVorbis: codebook header broken!\n");
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
813 driver = 0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
814 free(ov);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
815 break;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
816 } else { /// Print the infos
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
817 char **ptr=vc.user_comments;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
818 while(*ptr){
1837
9fd8b5e0b864 ogg/vorbis stuff cleanup, buffering fixes, printf->mp_msg
arpi
parents: 1834
diff changeset
819 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbisComment: %s\n",*ptr);
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
820 ++ptr;
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
821 }
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
822 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Bitstream is %d channel, %ldHz, %ldkbit/s %cBR\n",ov->vi.channels,ov->vi.rate,ov->vi.bitrate_nominal/1000, (ov->vi.bitrate_lower!=ov->vi.bitrate_nominal)||(ov->vi.bitrate_upper!=ov->vi.bitrate_nominal)?'V':'C');
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
823 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Encoded by: %s\n",vc.vendor);
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
824 }
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
825
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
826 // Setup the decoder
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
827 sh_audio->channels=ov->vi.channels;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
828 sh_audio->samplerate=ov->vi.rate;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
829 sh_audio->i_bps=ov->vi.bitrate_nominal/8;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
830 sh_audio->context = ov;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
831
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
832 /// Finish the decoder init
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
833 vorbis_synthesis_init(&ov->vd,&ov->vi);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
834 vorbis_block_init(&ov->vd,&ov->vb);
1837
9fd8b5e0b864 ogg/vorbis stuff cleanup, buffering fixes, printf->mp_msg
arpi
parents: 1834
diff changeset
835 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Init OK!\n");
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
836 } break;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
837 #endif
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
838
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
839 #ifdef HAVE_FAAD
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
840 case AFM_AAC: {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
841 unsigned long faac_samplerate, faac_channels;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
842 faacDecConfigurationPtr faac_conf;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
843 faac_hdec = faacDecOpen();
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
844
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
845 #if 1
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
846 /* Set the default object type and samplerate */
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
847 /* This is useful for RAW AAC files */
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
848 faac_conf = faacDecGetCurrentConfiguration(faac_hdec);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
849 if(sh_audio->samplerate)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
850 faac_conf->defSampleRate = sh_audio->samplerate;
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
851 /* XXX: FAAD support FLOAT output, how do we handle
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
852 * that (FAAD_FMT_FLOAT)? ::atmos
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
853 */
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
854 if(sh_audio->samplesize)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
855 switch(sh_audio->samplesize){
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
856 case 1: // 8Bit
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
857 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: 8Bit samplesize not supported by FAAD, assuming 16Bit!\n");
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
858 default:
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
859 case 2: // 16Bit
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
860 faac_conf->outputFormat = FAAD_FMT_16BIT;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
861 break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
862 case 3: // 24Bit
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
863 faac_conf->outputFormat = FAAD_FMT_24BIT;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
864 break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
865 case 4: // 32Bit
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
866 faac_conf->outputFormat = FAAD_FMT_32BIT;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
867 break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
868 }
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
869 //faac_conf->defObjectType = LTP; // => MAIN, LC, SSR, LTP available.
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
870
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
871 faacDecSetConfiguration(faac_hdec, faac_conf);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
872 #endif
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
873
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
874 if(faac_buffer == NULL)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
875 faac_buffer = (unsigned char*)malloc(FAAD_BUFFLEN);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
876 memset(faac_buffer, 0, FAAD_BUFFLEN);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
877 demux_read_data(sh_audio->ds, faac_buffer, FAAD_BUFFLEN);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
878
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
879 /* init the codec */
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
880 if((faac_bytesconsumed = faacDecInit(faac_hdec, faac_buffer, &faac_samplerate, &faac_channels)) < 0) {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
881 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: Failed to initialize the decoder!\n"); // XXX: deal with cleanup!
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
882 faacDecClose(faac_hdec);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
883 free(faac_buffer);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
884 faac_buffer = NULL;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
885 driver = 0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
886 } else {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
887 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Decoder init done (%dBytes)!\n", faac_bytesconsumed); // XXX: remove or move to debug!
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
888 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: Negotiated samplerate: %dHz channels: %d\n", faac_samplerate, faac_channels);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
889 sh_audio->channels = faac_channels;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
890 sh_audio->samplerate = faac_samplerate;
5206
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
891 if(!sh_audio->i_bps) {
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
892 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: compressed input bitrate missing, assuming 128kbit/s!\n");
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
893 sh_audio->i_bps = 128*1000/8; // XXX: HACK!!! There's currently no way to get bitrate from libfaad2! ::atmos
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
894 } else
2ca5a9bfaa98 allow sh_audio struct to be initialized by demuxer, add parsing of mp4 esds header to mov demuxer, init faad from info from mov header
atmos4
parents: 5190
diff changeset
895 mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: got %dkbit/s rate from MP4 header!\n",sh_audio->i_bps*8/1000);
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
896 }
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
897
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
898 } break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
899 #endif
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
900
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
901 #ifdef USE_LIBMAD
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
902 case AFM_MAD:
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
903 {
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
904 printf("%s %s %s (%s)\n", mad_version, mad_copyright, mad_author, mad_build);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
905
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
906 mp_msg(MSGT_DECVIDEO, MSGL_V, "mad: initialising\n");
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
907 mad_frame_init(&mad_frame);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
908 mad_stream_init(&mad_stream);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
909
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
910 mp_msg(MSGT_DECVIDEO, MSGL_V, "mad: preparing buffer\n");
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
911 mad_prepare_buffer(sh_audio, &mad_stream, sh_audio->a_in_buffer_size);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
912 mad_stream_buffer(&mad_stream, (unsigned char*)(sh_audio->a_in_buffer), sh_audio->a_in_buffer_len);
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
913 // mad_stream_sync(&mad_stream);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
914 mad_sync(sh_audio, &mad_stream);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
915 mad_synth_init(&mad_synth);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
916
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
917 if(mad_frame_decode(&mad_frame, &mad_stream) == 0)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
918 {
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
919 mp_msg(MSGT_DECVIDEO, MSGL_V, "mad: post processing buffer\n");
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
920 mad_postprocess_buffer(sh_audio, &mad_stream);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
921 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
922 else
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
923 {
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
924 mp_msg(MSGT_DECVIDEO, MSGL_V, "mad: frame decoding failed\n");
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
925 mad_print_error(&mad_stream);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
926 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
927
2434
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
928 switch (mad_frame.header.mode)
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
929 {
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
930 case MAD_MODE_SINGLE_CHANNEL:
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
931 sh_audio->channels=1;
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
932 break;
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
933 case MAD_MODE_DUAL_CHANNEL:
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
934 case MAD_MODE_JOINT_STEREO:
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
935 case MAD_MODE_STEREO:
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
936 sh_audio->channels=2;
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
937 break;
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
938 default:
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
939 mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "mad: unknown number of channels\n");
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
940 }
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
941 mp_msg(MSGT_DECAUDIO, MSGL_HINT, "mad: channels: %d (mad channel mode: %d)\n",
571538d73e08 audio channels nr is identified from libmad's channel mode
alex
parents: 2432
diff changeset
942 sh_audio->channels, mad_frame.header.mode);
2432
b02c2679e5a9 libmad fix (see comment)
alex
parents: 2424
diff changeset
943 /* var. name changed in 0.13.0 (beta) (libmad/CHANGES) -- alex */
b02c2679e5a9 libmad fix (see comment)
alex
parents: 2424
diff changeset
944 #if (MAD_VERSION_MAJOR >= 0) && (MAD_VERSION_MINOR >= 13)
b02c2679e5a9 libmad fix (see comment)
alex
parents: 2424
diff changeset
945 sh_audio->samplerate=mad_frame.header.samplerate;
b02c2679e5a9 libmad fix (see comment)
alex
parents: 2424
diff changeset
946 #else
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
947 sh_audio->samplerate=mad_frame.header.sfreq;
2432
b02c2679e5a9 libmad fix (see comment)
alex
parents: 2424
diff changeset
948 #endif
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
949 sh_audio->i_bps=mad_frame.header.bitrate;
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
950 mp_msg(MSGT_DECVIDEO, MSGL_V, "mad: continuing\n");
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
951 break;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
952 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
953 #endif
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
954 }
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
955
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
956 if(!sh_audio->channels || !sh_audio->samplerate){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
957 mp_msg(MSGT_DECAUDIO,MSGL_WARN,MSGTR_UnknownAudio);
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
958 driver=0;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
959 }
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
960
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
961 if(!driver){
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
962 if(sh_audio->a_buffer) free(sh_audio->a_buffer);
1313
d797ecb9778f sh_audio->a_buffer is freed twice (here and in mplayer.c), can result to
jkeil
parents: 1309
diff changeset
963 sh_audio->a_buffer=NULL;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
964 return 0;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
965 }
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
966
1529
81aa2d701ae0 o_bps changes for hwac3 driver
arpi
parents: 1528
diff changeset
967 if(!sh_audio->o_bps)
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
968 sh_audio->o_bps=sh_audio->channels*sh_audio->samplerate*sh_audio->samplesize;
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
969 return driver;
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
970 }
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
971
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
972 // Audio decoding:
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
973
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
974 // Decode a single frame (mp3,acm etc) or 'minlen' bytes (pcm/alaw etc)
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
975 // buffer length is 'maxlen' bytes, it shouldn't be exceeded...
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
976
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
977 int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
978 int len=-1;
303
828ec81e0d64 codecs.conf support
arpi_esp
parents: 296
diff changeset
979 switch(sh_audio->codec->driver){
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
980 #ifdef USE_LIBAVCODEC
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
981 case AFM_FFMPEG: {
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
982 unsigned char *start=NULL;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
983 int y;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
984 while(len<minlen){
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
985 int len2=0;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
986 int x=ds_get_packet(sh_audio->ds,&start);
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
987 if(x<=0) break; // error
2049
df41903fd7d7 VfW stuff moved to dll_init, warnings fixed, using dll_init.h
arpi
parents: 1973
diff changeset
988 y=avcodec_decode_audio(&lavc_context,(INT16*)buf,&len2,start,x);
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1927
diff changeset
989 if(y<0){ mp_msg(MSGT_DECAUDIO,MSGL_V,"lavc_audio: error\n");break; }
1927
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
990 if(y<x) sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!)
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
991 if(len2>0){
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
992 //len=len2;break;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
993 if(len<0) len=len2; else len+=len2;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
994 buf+=len2;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
995 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
996 mp_dbg(MSGT_DECAUDIO,MSGL_DBG2,"Decoded %d -> %d \n",y,len2);
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
997 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
998 }
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
999 break;
296208b47fd4 FFmpeg audio codecs support
arpi
parents: 1849
diff changeset
1000 #endif
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1001 case AFM_MPEG: // MPEG layer 2 or 3
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1002 len=MP3_DecodeFrame(buf,-1);
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1456
diff changeset
1003 // len=MP3_DecodeFrame(buf,3);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1004 break;
1830
46347c4075da OOOPS, miaaing ifdef.
atmos4
parents: 1828
diff changeset
1005 #ifdef HAVE_OGGVORBIS
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1006 case AFM_VORBIS: { // Vorbis
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1007 int samples;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1008 float **pcm;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1009 ogg_packet op;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1010 char* np;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1011 struct ov_struct_st *ov = sh_audio->context;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1012 len = 0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1013 op.b_o_s = op.e_o_s = 0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1014 while(len < minlen) {
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1015 op.bytes = ds_get_packet(sh_audio->ds,&op.packet);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1016 if(!op.packet)
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1017 break;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1018 if(vorbis_synthesis(&ov->vb,&op)==0) /* test for success! */
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1019 vorbis_synthesis_blockin(&ov->vd,&ov->vb);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1020 while((samples=vorbis_synthesis_pcmout(&ov->vd,&pcm))>0){
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1021 int i,j;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1022 int clipflag=0;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1023 int convsize=(maxlen-len)/(2*ov->vi.channels); // max size!
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1024 int bout=(samples<convsize?samples:convsize);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1025
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1026 if(bout<=0) break;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1027
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1028 /* convert floats to 16 bit signed ints (host order) and
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1029 interleave */
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1030 for(i=0;i<ov->vi.channels;i++){
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1031 ogg_int16_t *convbuffer=(ogg_int16_t *)(&buf[len]);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1032 ogg_int16_t *ptr=convbuffer+i;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1033 float *mono=pcm[i];
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1034 for(j=0;j<bout;j++){
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1035 #if 1
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1036 int val=mono[j]*32767.f;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1037 #else /* optional dither */
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1038 int val=mono[j]*32767.f+drand48()-0.5f;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1039 #endif
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1040 /* might as well guard against clipping */
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1041 if(val>32767){
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1042 val=32767;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1043 clipflag=1;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1044 }
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1045 if(val<-32768){
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1046 val=-32768;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1047 clipflag=1;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1048 }
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1049 *ptr=val;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1050 ptr+=ov->vi.channels;
1828
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1051 }
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1052 }
60afe3421c04 OggVorbis support, ALPHA state!
atmos4
parents: 1567
diff changeset
1053
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1054 if(clipflag)
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1055 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"Clipping in frame %ld\n",(long)(ov->vd.sequence));
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1056 len+=2*ov->vi.channels*bout;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1057 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"\n[decoded: %d / %d ]\n",bout,samples);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1058 vorbis_synthesis_read(&ov->vd,bout); /* tell libvorbis how
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1059 many samples we
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1060 actually consumed */
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1061 }
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1062 }
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 5118
diff changeset
1063 } break;
1830
46347c4075da OOOPS, miaaing ifdef.
atmos4
parents: 1828
diff changeset
1064 #endif
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1065
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1066 #ifdef HAVE_FAAD
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1067 case AFM_AAC: {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1068 int /*i,*/ k, j = 0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1069 void *faac_sample_buffer;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1070
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1071 len = 0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1072 while(len < minlen) {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1073 /* update buffer */
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1074 if (faac_bytesconsumed > 0) {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1075 for (k = 0; k < (FAAD_BUFFLEN - faac_bytesconsumed); k++)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1076 faac_buffer[k] = faac_buffer[k + faac_bytesconsumed];
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1077 demux_read_data(sh_audio->ds, faac_buffer + (FAAD_BUFFLEN) - faac_bytesconsumed, faac_bytesconsumed);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1078 faac_bytesconsumed = 0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1079 }
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1080 /*for (i = 0; i < 16; i++)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1081 printf ("%02X ", faac_buffer[i]);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1082 printf ("\n");*/
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1083 do {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1084 faac_sample_buffer = faacDecDecode(faac_hdec, &faac_finfo, faac_buffer+j);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1085 /* update buffer index after faacDecDecode */
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1086 faac_bytesconsumed += faac_finfo.bytesconsumed;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1087 if(faac_finfo.error > 0) {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1088 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: Trying to resync!\n");
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1089 j++;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1090 } else
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1091 break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1092 } while(j < FAAD_BUFFLEN);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1093
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1094
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1095 if(faac_finfo.error > 0) {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1096 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: Failed to decode frame: %s \n",
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1097 faacDecGetErrorMessage(faac_finfo.error));
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1098 } else if (faac_finfo.samples == 0)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1099 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: Decoded zero samples!\n");
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1100 else {
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1101 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: Successfully decoded frame (%dBytes)!\n", faac_finfo.samples*faac_finfo.channels);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1102 memcpy(buf+len,faac_sample_buffer, faac_finfo.samples*faac_finfo.channels);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1103 len += faac_finfo.samples*faac_finfo.channels;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1104 }
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1105 }
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1106
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1107 } break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1108 #endif
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1109 case AFM_PCM: // AVI PCM
1058
cab5ba9ffc6c fixed AFMT_ stuff (inclue afmt.h)
arpi_esp
parents: 1038
diff changeset
1110 len=demux_read_data(sh_audio->ds,buf,minlen);
401
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
1111 break;
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1112 case AFM_DVDPCM: // DVD PCM
401
835fac6382be DVD PCM audio support
arpi_esp
parents: 340
diff changeset
1113 { int j;
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
1114 len=demux_read_data(sh_audio->ds,buf,minlen);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1115 //if(i&1){ printf("Warning! pcm_audio_size&1 !=0 (%d)\n",i);i&=~1; }
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
1116 // swap endian:
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1117 for(j=0;j<len;j+=2){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1118 char x=buf[j];
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1119 buf[j]=buf[j+1];
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1120 buf[j+1]=x;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1121 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1122 break;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1123 }
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1124 case AFM_ALAW: // aLaw decoder
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
1125 { int l=demux_read_data(sh_audio->ds,buf,minlen/2);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1126 unsigned short *d=(unsigned short *) buf;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1127 unsigned char *s=buf;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1128 len=2*l;
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1129 if(sh_audio->format==6){
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1130 // aLaw
883
ef5d1ab14218 using alaw.h instead of alaw.c
arpi_esp
parents: 758
diff changeset
1131 while(l>0){ --l; d[l]=alaw2short[s[l]]; }
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1132 } else {
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1133 // uLaw
883
ef5d1ab14218 using alaw.h instead of alaw.c
arpi_esp
parents: 758
diff changeset
1134 while(l>0){ --l; d[l]=ulaw2short[s[l]]; }
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1135 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1136 break;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1137 }
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1138 case AFM_GSM: // MS-GSM decoder
2420
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
1139 { unsigned char ibuf[65]; // 65 bytes / frame
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
1140 if(demux_read_data(sh_audio->ds,ibuf,65)!=65) break; // EOF
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
1141 XA_MSGSM_Decoder(ibuf,(unsigned short *) buf); // decodes 65 byte -> 320 short
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
1142 // XA_GSM_Decoder(buf,(unsigned short *) &sh_audio->a_buffer[sh_audio->a_buffer_len]); // decodes 33 byte -> 160 short
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
1143 len=2*320;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1144 break;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1145 }
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
1146 #ifdef USE_G72X
3426
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1147 case AFM_G72X: // GSM 723 decoder
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1148 { if(demux_read_data(sh_audio->ds,g72x_data.block, g72x_data.blocksize)!=g72x_data.blocksize) break; // EOF
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1149 g72x_decode_block(&g72x_data);
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1150 len=2*g72x_data.samplesperblock;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1151 memcpy(buf,g72x_data.samples,len);
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1152 break;
ca4beb5dd3f7 g72x support
arpi
parents: 3417
diff changeset
1153 }
3866
50d7eec1d4b9 g72x is optional (caused problems wiht opendivx)
arpi
parents: 3834
diff changeset
1154 #endif
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1155 case AFM_IMAADPCM:
3756
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
1156 { unsigned char ibuf[IMA_ADPCM_BLOCK_SIZE * 2]; // bytes / stereo frame
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
1157 if (demux_read_data(sh_audio->ds, ibuf,
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1158 IMA_ADPCM_BLOCK_SIZE * sh_audio->wf->nChannels) !=
3756
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
1159 IMA_ADPCM_BLOCK_SIZE * sh_audio->wf->nChannels)
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
1160 break; // EOF
734d0c0a8ab0 Initial support for unified ADPCM decoder
melanson
parents: 3442
diff changeset
1161 len=2*ima_adpcm_decode_block((unsigned short*)buf,ibuf, sh_audio->wf->nChannels);
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1162 break;
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1163 }
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1164 case AFM_MSADPCM:
3875
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1165 { static unsigned char *ibuf = NULL;
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1166 if (!ibuf)
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1167 ibuf = (unsigned char *)malloc
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1168 (sh_audio->wf->nBlockAlign * sh_audio->wf->nChannels);
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1169 if (demux_read_data(sh_audio->ds, ibuf,
3875
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1170 sh_audio->wf->nBlockAlign) !=
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1171 sh_audio->wf->nBlockAlign)
3787
55603340d1b2 implemented open source MS ADPCM decoder
melanson
parents: 3756
diff changeset
1172 break; // EOF
3875
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1173 len= 2 * ms_adpcm_decode_block(
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1174 (unsigned short*)buf,ibuf, sh_audio->wf->nChannels,
e3caff2daa98 fixed stereo MS ADPCM decoder and reinstated opensource decoder as the
melanson
parents: 3874
diff changeset
1175 sh_audio->wf->nBlockAlign);
2420
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
1176 break;
311676805f20 ima4 mov audio support
arpi
parents: 2418
diff changeset
1177 }
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1178 case AFM_DK4ADPCM:
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1179 { static unsigned char *ibuf = NULL;
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1180 if (!ibuf)
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1181 ibuf = (unsigned char *)malloc(sh_audio->wf->nBlockAlign);
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1182 if (demux_read_data(sh_audio->ds, ibuf, sh_audio->wf->nBlockAlign) !=
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1183 sh_audio->wf->nBlockAlign)
3933
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
1184 break; // EOF
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1185 len=2*dk4_adpcm_decode_block((unsigned short*)buf,ibuf,
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1186 sh_audio->wf->nChannels, sh_audio->wf->nBlockAlign);
3933
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
1187 break;
60db4273246d added initial support for format 0x61 ADPCM (sounds good, but still pops)
melanson
parents: 3911
diff changeset
1188 }
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1189 case AFM_DK3ADPCM:
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1190 { unsigned char ibuf[DK3_ADPCM_BLOCK_SIZE * 2]; // bytes / stereo frame
3826
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
1191 if (demux_read_data(sh_audio->ds, ibuf,
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1192 DK3_ADPCM_BLOCK_SIZE * sh_audio->wf->nChannels) !=
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1193 DK3_ADPCM_BLOCK_SIZE * sh_audio->wf->nChannels)
3826
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
1194 break; // EOF
4854
4a6dde59834c fixed, strengthened, rewrote, and renamed a variety of the ADPCM decoders
melanson
parents: 4497
diff changeset
1195 len = 2 * dk3_adpcm_decode_block(
4001
ae6f97724b84 fixed format 0x62 ADPCM audio
melanson
parents: 3968
diff changeset
1196 (unsigned short*)buf,ibuf);
3826
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
1197 break;
8a88ed2473aa added initial, not-yet-functional, support for fox62 audio
melanson
parents: 3787
diff changeset
1198 }
4486
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1199 case AFM_ROQAUDIO:
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1200 {
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1201 static unsigned char *ibuf = NULL;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1202 unsigned char header_data[6];
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1203 int read_len;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1204
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1205 if (!ibuf)
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1206 ibuf = (unsigned char *)malloc(sh_audio->audio_out_minsize / 2);
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1207
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1208 // figure out how much data to read
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1209 if (demux_read_data(sh_audio->ds, header_data, 6) != 6)
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1210 break; // EOF
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1211 read_len = (header_data[5] << 24) | (header_data[4] << 16) |
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1212 (header_data[3] << 8) | header_data[2];
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1213 read_len += 2; // 16-bit arguments
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1214 if (demux_read_data(sh_audio->ds, ibuf, read_len) != read_len)
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1215 break;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1216 len = 2 * roq_decode_audio((unsigned short *)buf, ibuf,
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1217 read_len, sh_audio->channels, sh_audio->context);
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1218 break;
e69bed07cb27 further work on the RoQ audio decoder
melanson
parents: 4423
diff changeset
1219 }
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
1220 #ifdef USE_LIBAC3
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1221 case AFM_AC3: // AC3 decoder
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1222 //printf("{1:%d}",avi_header.idx_pos);fflush(stdout);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1223 if(!sh_audio->ac3_frame) sh_audio->ac3_frame=ac3_decode_frame();
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1224 //printf("{2:%d}",avi_header.idx_pos);fflush(stdout);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1225 if(sh_audio->ac3_frame){
296
c3d7a28a0d1a audio init moved to dec_audio.c
arpi_esp
parents: 291
diff changeset
1226 len = 256 * 6 *sh_audio->channels*sh_audio->samplesize;
587
8511095c5283 stage#1 completed: c files no more included from mplayer.c
arpi_esp
parents: 432
diff changeset
1227 memcpy(buf,((ac3_frame_t*)sh_audio->ac3_frame)->audio_data,len);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1228 sh_audio->ac3_frame=NULL;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1229 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1230 //printf("{3:%d}",avi_header.idx_pos);fflush(stdout);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1231 break;
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
1232 #endif
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1233 case AFM_A52: { // AC3 decoder
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
1234 sample_t level=1, bias=384;
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
1235 int flags=a52_flags|A52_ADJUST_LEVEL;
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1236 int i;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1237 if(!sh_audio->a_in_buffer_len)
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1238 if(a52_fillbuff(sh_audio)<0) break; // EOF
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1239 sh_audio->a_in_buffer_len=0;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1240 if (a52_frame (&a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1241 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"a52: error decoding frame\n");
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1242 break;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1243 }
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1244 // a52_dynrng (&state, NULL, NULL); // disable dynamic range compensation
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1245
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1246 // frame decoded, let's resample:
3911
0c1e7b47d35c a52 resampler init moved to init
arpi
parents: 3907
diff changeset
1247 //a52_resample_init(a52_accel,flags,sh_audio->channels);
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1248 len=0;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1249 for (i = 0; i < 6; i++) {
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1250 if (a52_block (&a52_state, a52_samples)){
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1251 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"a52: error at resampling\n");
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1252 break;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1253 }
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1254 len+=2*a52_resample(a52_samples,&buf[len]);
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1255 }
3417
2066402f300d Remove annoying debug printf.
atmos4
parents: 3413
diff changeset
1256 // printf("len = %d \n",len); // 6144 on all vobs I tried so far... (5.1 and 2.0) ::atmos
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1257 break;
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1258 }
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
1259 case AFM_HWAC3: // AC3 through SPDIF
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
1260 if(!sh_audio->a_in_buffer_len)
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
1261 if((len=a52_fillbuff(sh_audio))<0) break; //EOF
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
1262 sh_audio->a_in_buffer_len=0;
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
1263 len = ac3_iec958_build_burst(len, 0x01, 1, sh_audio->a_in_buffer, buf);
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
1264 // len = 6144 = 4*(6*256)
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
1265 break;
1517
0e9c29538a86 Use USE_WIN32DLL define instead of ARCH_X86 to decide whether or not to compile
jkeil
parents: 1485
diff changeset
1266 #ifdef USE_WIN32DLL
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1267 case AFM_ACM:
758
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1268 // len=sh_audio->audio_out_minsize; // optimal decoded fragment size
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1269 // if(len<minlen) len=minlen; else
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1270 // if(len>maxlen) len=maxlen;
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1271 // len=acm_decode_audio(sh_audio,buf,len);
5a92a5601666 better audio out buffering & sample_format added
arpi_esp
parents: 754
diff changeset
1272 len=acm_decode_audio(sh_audio,buf,minlen,maxlen);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1273 break;
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 1291
diff changeset
1274 #endif
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 732
diff changeset
1275
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1276 #ifdef USE_DIRECTSHOW
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1277 case AFM_DSHOW: // DirectShow
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1278 { int size_in=0;
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1279 int size_out=0;
3442
62b452b7ddf9 changed for updated DShow wrapper api
arpi
parents: 3426
diff changeset
1280 int srcsize=DS_AudioDecoder_GetSrcSize(ds_adec, maxlen);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1529
diff changeset
1281 mp_msg(MSGT_DECAUDIO,MSGL_DBG3,"DShow says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen);
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1282 if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!!
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1283 if(sh_audio->a_in_buffer_len<srcsize){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1284 sh_audio->a_in_buffer_len+=
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1285 demux_read_data(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len],
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1286 srcsize-sh_audio->a_in_buffer_len);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1287 }
3442
62b452b7ddf9 changed for updated DShow wrapper api
arpi
parents: 3426
diff changeset
1288 DS_AudioDecoder_Convert(ds_adec, sh_audio->a_in_buffer,sh_audio->a_in_buffer_len,
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1289 buf,maxlen, &size_in,&size_out);
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1529
diff changeset
1290 mp_dbg(MSGT_DECAUDIO,MSGL_DBG2,"DShow: audio %d -> %d converted (in_buf_len=%d of %d) %d\n",size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,ds_tell_pts(sh_audio->ds));
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1291 if(size_in>=sh_audio->a_in_buffer_len){
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1292 sh_audio->a_in_buffer_len=0;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1293 } else {
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1294 sh_audio->a_in_buffer_len-=size_in;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1295 memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len);
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1296 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1297 len=size_out;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1298 break;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1299 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1300 #endif
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1301
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1302 #ifdef USE_LIBMAD
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1303 case AFM_MAD:
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1304 {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1305 mad_prepare_buffer(sh_audio, &mad_stream, sh_audio->a_in_buffer_size);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1306 mad_stream_buffer(&mad_stream, sh_audio->a_in_buffer, sh_audio->a_in_buffer_len);
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1307 // mad_stream_sync(&mad_stream);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1308 mad_sync(sh_audio, &mad_stream);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1309 if(mad_frame_decode(&mad_frame, &mad_stream) == 0)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1310 {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1311 mad_synth_frame(&mad_synth, &mad_frame);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1312 mad_postprocess_buffer(sh_audio, &mad_stream);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1313
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1314 /* and fill buffer */
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1315
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1316 {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1317 int i;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1318 int end_size = mad_synth.pcm.length;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1319 signed short* samples = (signed short*)buf;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1320 if(end_size > maxlen/4)
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1321 end_size=maxlen/4;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1322
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1323 for(i=0; i<mad_synth.pcm.length; ++i) {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1324 *samples++ = mad_scale(mad_synth.pcm.samples[0][i]);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1325 *samples++ = mad_scale(mad_synth.pcm.samples[0][i]);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1326 // *buf++ = mad_scale(mad_synth.pcm.sampAles[1][i]);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1327 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1328 len = end_size*4;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1329 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1330 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1331 else
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1332 {
5118
378d60504938 printf to mp_msg by Anders Rune Jensen
alex
parents: 5049
diff changeset
1333 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "mad: frame decoding failed (error: %d)\n",
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1334 mad_stream.error);
3874
8b76388de734 more mad fix
alex
parents: 3871
diff changeset
1335 mad_print_error(&mad_stream);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1336 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1337
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1338 break;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1339 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1340 #endif
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1341 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1342 return len;
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1343 }
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1344
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1345 void resync_audio_stream(sh_audio_t *sh_audio){
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1346 switch(sh_audio->codec->driver){
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1347 case AFM_MPEG:
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1348 MP3_DecodeFrame(NULL,-2); // resync
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1349 MP3_DecodeFrame(NULL,-2); // resync
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1350 MP3_DecodeFrame(NULL,-2); // resync
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1351 break;
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
1352 #ifdef USE_LIBAC3
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1353 case AFM_AC3:
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1354 ac3_bitstream_reset(); // reset AC3 bitstream buffer
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1355 // if(verbose){ printf("Resyncing AC3 audio...");fflush(stdout);}
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1356 sh_audio->ac3_frame=ac3_decode_frame(); // resync
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1357 // if(verbose) printf(" OK!\n");
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1358 break;
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
1359 #endif
5190
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1360 #ifdef HAVE_FAAD
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1361 case AFM_AAC:
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1362 //if(faac_buffer != NULL)
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1363 faac_bytesconsumed = 0;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1364 memset(faac_buffer, 0, FAAD_BUFFLEN);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1365 //demux_read_data(sh_audio->ds, faac_buffer, FAAD_BUFFLEN);
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1366 break;
59df6b778d78 Beta AAC decoding support, seeking totally broken yet, add philipps mpeg4 video in qt to ffmpeg4 although it's still buggy in decoding
atmos4
parents: 5133
diff changeset
1367 #endif
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1368 case AFM_A52:
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1369 case AFM_ACM:
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1370 case AFM_DSHOW:
1528
a444bd456fcc ac3/spdif patch by German Gomez Garcia <german@piraos.com>
arpi
parents: 1517
diff changeset
1371 case AFM_HWAC3:
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1372 sh_audio->a_in_buffer_len=0; // reset ACM/DShow audio buffer
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1373 break;
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1374
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1375 #ifdef USE_LIBMAD
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1376 case AFM_MAD:
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1377 mad_prepare_buffer(sh_audio, &mad_stream, sh_audio->a_in_buffer_size);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1378 mad_stream_buffer(&mad_stream, sh_audio->a_in_buffer, sh_audio->a_in_buffer_len);
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1379 // mad_stream_sync(&mad_stream);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1380 mad_sync(sh_audio, &mad_stream);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1381 mad_postprocess_buffer(sh_audio, &mad_stream);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1382 break;
2418
eab58e827cf7 did not compile (bad place for } )
pl
parents: 2415
diff changeset
1383 #endif
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1384 }
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1385 }
291
da98e96499bb sh_audio/sh_video added, general codec cleanup
arpi_esp
parents:
diff changeset
1386
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1387 void skip_audio_frame(sh_audio_t *sh_audio){
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1388 switch(sh_audio->codec->driver){
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1389 case AFM_MPEG: MP3_DecodeFrame(NULL,-2);break; // skip MPEG frame
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
1390 #ifdef USE_LIBAC3
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1391 case AFM_AC3: sh_audio->ac3_frame=ac3_decode_frame();break; // skip AC3 frame
3886
779b58bf6d42 libac3 disabled
arpi
parents: 3875
diff changeset
1392 #endif
3829
30b4f0c45b6e hwac3 fixes by Steven Brookes <stevenjb@mda.co.uk>
arpi
parents: 3826
diff changeset
1393 case AFM_HWAC3:
3413
6236baa23bde -ac a52 implemented
arpi
parents: 3182
diff changeset
1394 case AFM_A52: a52_fillbuff(sh_audio);break; // skip AC3 frame
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1395 case AFM_ACM:
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1396 case AFM_DSHOW: {
1408
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1397 int skip=sh_audio->wf->nBlockAlign;
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1398 if(skip<16){
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1399 skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7);
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1400 if(skip<16) skip=16;
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1401 }
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1402 demux_read_data(sh_audio->ds,NULL,skip);
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1403 break;
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1404 }
1410
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1405 case AFM_PCM:
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1406 case AFM_DVDPCM:
eda16e490ae7 using AFM_/VFM_ macros instead of hardcoded constants (idea by al3x)
arpi
parents: 1408
diff changeset
1407 case AFM_ALAW: {
1408
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1408 int skip=sh_audio->i_bps/16;
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1409 skip=skip&(~3);
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1410 demux_read_data(sh_audio->ds,NULL,skip);
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1411 break;
71ad3e1ba014 some cleanup, asf/mpg seek precision improved
arpi
parents: 1327
diff changeset
1412 }
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1413 #ifdef USE_LIBMAD
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1414 case AFM_MAD:
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1415 {
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1416 mad_prepare_buffer(sh_audio, &mad_stream, sh_audio->a_in_buffer_size);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1417 mad_stream_buffer(&mad_stream, sh_audio->a_in_buffer, sh_audio->a_in_buffer_len);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1418 mad_stream_skip(&mad_stream, 2);
3871
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1419 // mad_stream_sync(&mad_stream);
8d08da7d9d5e mad sync fix
alex
parents: 3866
diff changeset
1420 mad_sync(sh_audio, &mad_stream);
2415
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1421 mad_postprocess_buffer(sh_audio, &mad_stream);
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1422 break;
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1423 }
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1424 #endif
58ea110b4036 libmad (ARM) patch by jeroen.dobbelaere@acunia.com
arpi
parents: 2341
diff changeset
1425
1327
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1426 default: ds_fill_buffer(sh_audio->ds); // skip PCM frame
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1427 }
b12e1817bcc2 some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
arpi
parents: 1320
diff changeset
1428 }