Mercurial > mplayer.hg
annotate libmpcodecs/ad_liba52.c @ 33259:04dc3e55cd90
Increase the maximum value of the DVB timeout to 240 seconds.
Some devices may need more time for the initial tune (e.g. firmware loading).
Let the user specify higher timeout value if there is need to.
The default remains 30 seconds.
author | iive |
---|---|
date | Sun, 01 May 2011 18:07:59 +0000 |
parents | 4c49c83f2af7 |
children | 630f03c82df3 |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
18 |
28445
c6cef3c6768f
Give _XOPEN_SOURCE #define an explicit 600 value. Fixes build on Open Solaris.
diego
parents:
28420
diff
changeset
|
19 #define _XOPEN_SOURCE 600 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
20 #include <stdio.h> |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
21 #include <stdlib.h> |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
22 #include <unistd.h> |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
23 #include <math.h> |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
24 #include <assert.h> |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
25 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
26 #include "config.h" |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7191
diff
changeset
|
27 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
28 #include "mp_msg.h" |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
29 #include "help_mp.h" |
23638
a81e246e3b38
Make sure we always have a swab() prototype when we use it,
reimar
parents:
21507
diff
changeset
|
30 #include "mpbswap.h" |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
31 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
32 #include "ad_internal.h" |
31986
9986a61354e6
Remove duplicated audio_output_channels extern variable declaration.
diego
parents:
31220
diff
changeset
|
33 #include "dec_audio.h" |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
34 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
35 #include "cpudetect.h" |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
36 |
17012 | 37 #include "libaf/af_format.h" |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
38 |
27588 | 39 #include <a52dec/a52.h> |
40 #include <a52dec/mm_accel.h> | |
41 int (* a52_resample) (float * _f, int16_t * s16); | |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
42 |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
43 static a52_state_t *a52_state; |
5341 | 44 static uint32_t a52_flags=0; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
45 /** Used by a52_resample_float, it defines the mapping between liba52 |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
46 * channels and output channels. The ith nibble from the right in the |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
47 * hex representation of channel_map is the index of the source |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
48 * channel corresponding to the ith output channel. Source channels are |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
49 * indexed 1-6. Silent output channels are marked by 0xf. */ |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
50 static uint32_t channel_map; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
51 |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
52 #define DRC_NO_ACTION 0 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
53 #define DRC_NO_COMPRESSION 1 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
54 #define DRC_CALLBACK 2 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
55 |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
56 /** The output is multiplied by this var. Used for volume control */ |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
57 static sample_t a52_level = 1; |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
58 static int a52_drc_action = DRC_NO_ACTION; |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
59 |
30504
cc27da5d7286
Mark all ad_info_t/vd_info_t structure declarations as const.
diego
parents:
30421
diff
changeset
|
60 static const ad_info_t info = |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
61 { |
7191
1eadce15446c
-afm/-vfm help implemenetd, some cosmetics of ad/vd codec names/comments
arpi
parents:
7180
diff
changeset
|
62 "AC3 decoding with liba52", |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
63 "liba52", |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
64 "Nick Kurshev", |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
65 "Michel LESPINASSE", |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
66 "" |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
67 }; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
68 |
5343 | 69 LIBAD_EXTERN(liba52) |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
70 |
30555
ad6740b58b0d
libmpcodecs: Mark functions not used outside of their files as static.
diego
parents:
30504
diff
changeset
|
71 static int a52_fillbuff(sh_audio_t *sh_audio) |
ad6740b58b0d
libmpcodecs: Mark functions not used outside of their files as static.
diego
parents:
30504
diff
changeset
|
72 { |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
73 int length=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
74 int flags=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
75 int sample_rate=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
76 int bit_rate=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
77 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
78 sh_audio->a_in_buffer_len=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
79 /* sync frame:*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
80 while(1){ |
10119 | 81 while(sh_audio->a_in_buffer_len<8){ |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
82 int c=demux_getc(sh_audio->ds); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
83 if(c<0) return -1; /* EOF*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
84 sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
85 } |
32941
4c49c83f2af7
Fix -ac a52 to work with codecs with tags other than 0x2000 or dnet
reimar
parents:
32352
diff
changeset
|
86 if(sh_audio->format==MKTAG('d','n','e','t')) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8); |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
87 length = a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
88 if(length>=7 && length<=3840) break; /* we're done.*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
89 /* bad file => resync*/ |
32941
4c49c83f2af7
Fix -ac a52 to work with codecs with tags other than 0x2000 or dnet
reimar
parents:
32352
diff
changeset
|
90 if(sh_audio->format==MKTAG('d','n','e','t')) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8); |
15560 | 91 memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,7); |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
92 --sh_audio->a_in_buffer_len; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
93 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
94 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"a52: len=%d flags=0x%X %d Hz %d bit/s\n",length,flags,sample_rate,bit_rate); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
95 sh_audio->samplerate=sample_rate; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
96 sh_audio->i_bps=bit_rate/8; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
97 sh_audio->samplesize=sh_audio->sample_format==AF_FORMAT_FLOAT_NE ? 4 : 2; |
10119 | 98 demux_read_data(sh_audio->ds,sh_audio->a_in_buffer+8,length-8); |
32941
4c49c83f2af7
Fix -ac a52 to work with codecs with tags other than 0x2000 or dnet
reimar
parents:
32352
diff
changeset
|
99 if(sh_audio->format==MKTAG('d','n','e','t')) |
10119 | 100 swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-8); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28445
diff
changeset
|
101 |
27588 | 102 #ifdef CONFIG_LIBA52_INTERNAL |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
103 if(crc16_block(sh_audio->a_in_buffer+2,length-2)!=0) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
104 mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed! \n"); |
27588 | 105 #endif |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28445
diff
changeset
|
106 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
107 return length; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
108 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
109 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
110 /* returns: number of available channels*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
111 static int a52_printinfo(sh_audio_t *sh_audio){ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
112 int flags, sample_rate, bit_rate; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
113 char* mode="unknown"; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
114 int channels=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
115 a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
116 switch(flags&A52_CHANNEL_MASK){ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
117 case A52_CHANNEL: mode="channel"; channels=2; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
118 case A52_MONO: mode="mono"; channels=1; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
119 case A52_STEREO: mode="stereo"; channels=2; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
120 case A52_3F: mode="3f";channels=3;break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
121 case A52_2F1R: mode="2f+1r";channels=3;break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
122 case A52_3F1R: mode="3f+1r";channels=4;break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
123 case A52_2F2R: mode="2f+2r";channels=4;break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
124 case A52_3F2R: mode="3f+2r";channels=5;break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
125 case A52_CHANNEL1: mode="channel1"; channels=2; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
126 case A52_CHANNEL2: mode="channel2"; channels=2; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
127 case A52_DOLBY: mode="dolby"; channels=2; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
128 } |
19944 | 129 mp_msg(MSGT_DECAUDIO,MSGL_V,"AC3: %d.%d (%s%s) %d Hz %3.1f kbit/s\n", |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
130 channels, (flags&A52_LFE)?1:0, |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
131 mode, (flags&A52_LFE)?"+lfe":"", |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
132 sample_rate, bit_rate*0.001f); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
133 return (flags&A52_LFE) ? (channels+1) : channels; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
134 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
135 |
30555
ad6740b58b0d
libmpcodecs: Mark functions not used outside of their files as static.
diego
parents:
30504
diff
changeset
|
136 static sample_t dynrng_call (sample_t c, void *data) |
ad6740b58b0d
libmpcodecs: Mark functions not used outside of their files as static.
diego
parents:
30504
diff
changeset
|
137 { |
32352
76f94c00a69f
1000l, %lf is not valid format string for printf (only for scanf) and actually
reimar
parents:
31986
diff
changeset
|
138 // fprintf(stderr, "(%f, %f): %f\n", (double)c, (double)drc_level, (double)pow((double)c, drc_level)); |
31220
002cdc635c03
Use the -a52drc option also for the libavcodec decoder.
reimar
parents:
31090
diff
changeset
|
139 return pow((double)c, drc_level); |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
140 } |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
141 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
142 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
143 static int preinit(sh_audio_t *sh) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
144 { |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
145 /* Dolby AC3 audio: */ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
146 /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ |
27588 | 147 if (sh->samplesize < 4) sh->samplesize = 4; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
148 sh->audio_out_minsize=audio_output_channels*sh->samplesize*256*6; |
5458 | 149 sh->audio_in_minsize=3840; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
150 a52_level = 1.0; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
151 return 1; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
152 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
153 |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
154 /** |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
155 * \brief Function to convert the "planar" float format used by liba52 |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
156 * into the interleaved float format used by libaf/libao2. |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
157 * \param in the input buffer containing the planar samples. |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
158 * \param out the output buffer where the interleaved result is stored. |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
159 */ |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
160 static int a52_resample_float(float *in, int16_t *out) |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
161 { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
162 unsigned long i; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
163 float *p = (float*) out; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
164 for (i = 0; i != 256; i++) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
165 unsigned long map = channel_map; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
166 do { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
167 unsigned long ch = map & 15; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
168 if (ch == 15) |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
169 *p = 0; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
170 else |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
171 *p = in[i + ((ch-1)<<8)]; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
172 p++; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
173 } while ((map >>= 4)); |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
174 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
175 return (int16_t*) p - out; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
176 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
177 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
178 static int init(sh_audio_t *sh_audio) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
179 { |
5341 | 180 uint32_t a52_accel=0; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
181 sample_t level=a52_level, bias=384; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
182 int flags=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
183 /* Dolby AC3 audio:*/ |
27587 | 184 #ifdef MM_ACCEL_X86_SSE |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
185 if(gCpuCaps.hasSSE) a52_accel|=MM_ACCEL_X86_SSE; |
27587 | 186 #endif |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
187 if(gCpuCaps.hasMMX) a52_accel|=MM_ACCEL_X86_MMX; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
188 if(gCpuCaps.hasMMX2) a52_accel|=MM_ACCEL_X86_MMXEXT; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
189 if(gCpuCaps.has3DNow) a52_accel|=MM_ACCEL_X86_3DNOW; |
27587 | 190 #ifdef MM_ACCEL_X86_3DNOWEXT |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
191 if(gCpuCaps.has3DNowExt) a52_accel|=MM_ACCEL_X86_3DNOWEXT; |
27587 | 192 #endif |
193 #ifdef MM_ACCEL_PPC_ALTIVEC | |
9003 | 194 if(gCpuCaps.hasAltiVec) a52_accel|=MM_ACCEL_PPC_ALTIVEC; |
27587 | 195 #endif |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
196 a52_state=a52_init (a52_accel); |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
197 if (a52_state == NULL) { |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
198 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n"); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
199 return 0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
200 } |
27588 | 201 sh_audio->sample_format = AF_FORMAT_FLOAT_NE; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
202 if(a52_fillbuff(sh_audio)<0){ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
203 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n"); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
204 return 0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
205 } |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
206 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
207 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
208 /* Init a52 dynrng */ |
31220
002cdc635c03
Use the -a52drc option also for the libavcodec decoder.
reimar
parents:
31090
diff
changeset
|
209 if (drc_level < 0.001) { |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
210 /* level == 0 --> no compression, init library without callback */ |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
211 a52_drc_action = DRC_NO_COMPRESSION; |
31220
002cdc635c03
Use the -a52drc option also for the libavcodec decoder.
reimar
parents:
31090
diff
changeset
|
212 } else if (drc_level > 0.999) { |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
213 /* level == 1 --> full compression, do nothing at all (library default = full compression) */ |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
214 a52_drc_action = DRC_NO_ACTION; |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
215 } else { |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
216 a52_drc_action = DRC_CALLBACK; |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
217 } |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
218 /* Library init for dynrng has to be done for each frame, see decode_audio() */ |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
219 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
220 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
221 /* 'a52 cannot upmix' hotfix:*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
222 a52_printinfo(sh_audio); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
223 sh_audio->channels=audio_output_channels; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
224 while(sh_audio->channels>0){ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
225 switch(sh_audio->channels){ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
226 case 1: a52_flags=A52_MONO; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
227 /* case 2: a52_flags=A52_STEREO; break;*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
228 case 2: a52_flags=A52_DOLBY; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
229 /* case 3: a52_flags=A52_3F; break;*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
230 case 3: a52_flags=A52_2F1R; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
231 case 4: a52_flags=A52_2F2R; break; /* 2+2*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
232 case 5: a52_flags=A52_3F2R; break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
233 case 6: a52_flags=A52_3F2R|A52_LFE; break; /* 5.1*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
234 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
235 /* test:*/ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
236 flags=a52_flags|A52_ADJUST_LEVEL; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
237 mp_msg(MSGT_DECAUDIO,MSGL_V,"A52 flags before a52_frame: 0x%X\n",flags); |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
238 if (a52_frame (a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){ |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
239 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: error decoding frame -> nosound\n"); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
240 return 0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
241 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
242 mp_msg(MSGT_DECAUDIO,MSGL_V,"A52 flags after a52_frame: 0x%X\n",flags); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
243 /* frame decoded, let's init resampler:*/ |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
244 channel_map = 0; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
245 if (sh_audio->sample_format == AF_FORMAT_FLOAT_NE) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
246 if (!(flags & A52_LFE)) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
247 switch ((flags<<3) | sh_audio->channels) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
248 case (A52_MONO << 3) | 1: channel_map = 0x1; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
249 case (A52_CHANNEL << 3) | 2: |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
250 case (A52_STEREO << 3) | 2: |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
251 case (A52_DOLBY << 3) | 2: channel_map = 0x21; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
252 case (A52_2F1R << 3) | 3: channel_map = 0x321; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
253 case (A52_2F2R << 3) | 4: channel_map = 0x4321; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
254 case (A52_3F << 3) | 5: channel_map = 0x2ff31; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
255 case (A52_3F2R << 3) | 5: channel_map = 0x25431; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
256 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
257 } else if (sh_audio->channels == 6) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
258 switch (flags & ~A52_LFE) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
259 case A52_MONO : channel_map = 0x12ffff; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
260 case A52_CHANNEL: |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
261 case A52_STEREO : |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
262 case A52_DOLBY : channel_map = 0x1fff32; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
263 case A52_3F : channel_map = 0x13ff42; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
264 case A52_2F1R : channel_map = 0x1f4432; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
265 case A52_2F2R : channel_map = 0x1f5432; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
266 case A52_3F2R : channel_map = 0x136542; break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
267 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
268 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
269 if (channel_map) { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
270 a52_resample = a52_resample_float; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
271 break; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
272 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
273 } else |
27588 | 274 break; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
275 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
276 if(sh_audio->channels<=0){ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
277 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n"); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
278 return 0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
279 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
280 return 1; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
281 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
282 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
283 static void uninit(sh_audio_t *sh) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
284 { |
26923 | 285 a52_free(a52_state); |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
286 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
287 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
288 static int control(sh_audio_t *sh,int cmd,void* arg, ...) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
289 { |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
290 switch(cmd) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
291 { |
15558 | 292 case ADCTRL_RESYNC_STREAM: |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
293 case ADCTRL_SKIP_FRAME: |
15558 | 294 a52_fillbuff(sh); |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
295 return CONTROL_TRUE; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
296 case ADCTRL_SET_VOLUME: { |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
297 float vol = *(float*)arg; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
298 if (vol > 60.0) vol = 60.0; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
299 a52_level = vol <= -200.0 ? 0 : pow(10.0,vol/20.0); |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
300 return CONTROL_TRUE; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
301 } |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
302 case ADCTRL_QUERY_FORMAT: |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
303 if (*(int*)arg == AF_FORMAT_S16_NE || |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
304 *(int*)arg == AF_FORMAT_FLOAT_NE) |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
305 return CONTROL_TRUE; |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
306 return CONTROL_FALSE; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
307 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
308 return CONTROL_UNKNOWN; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
309 } |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
310 |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
311 static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen) |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
312 { |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
313 sample_t level=a52_level, bias=384; |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
314 int flags=a52_flags|A52_ADJUST_LEVEL; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
315 int i,len=-1; |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
316 if (sh_audio->sample_format == AF_FORMAT_FLOAT_NE) |
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
317 bias = 0; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28445
diff
changeset
|
318 if(!sh_audio->a_in_buffer_len) |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
319 if(a52_fillbuff(sh_audio)<0) return len; /* EOF */ |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
320 sh_audio->a_in_buffer_len=0; |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
321 if (a52_frame (a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){ |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
322 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"a52: error decoding frame\n"); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
323 return len; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
324 } |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
325 |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
326 /* handle dynrng */ |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
327 if (a52_drc_action != DRC_NO_ACTION) { |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
328 if (a52_drc_action == DRC_NO_COMPRESSION) |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
329 a52_dynrng(a52_state, NULL, NULL); |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
330 else |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
331 a52_dynrng(a52_state, dynrng_call, NULL); |
12285
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
332 } |
67b8d64af8c7
a52 dynamic range compression support by Peter Gansterer
alex
parents:
10978
diff
changeset
|
333 |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
334 len=0; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
335 for (i = 0; i < 6; i++) { |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
336 if (a52_block (a52_state)){ |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
337 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"a52: error at resampling\n"); |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
338 break; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
339 } |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
17581
diff
changeset
|
340 len+=2*a52_resample(a52_samples(a52_state),(int16_t *)&buf[len]); |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
341 } |
14817
878745349274
Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents:
13427
diff
changeset
|
342 assert(len <= maxlen); |
5340
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
343 return len; |
0f12fb7c1c5d
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff
changeset
|
344 } |