annotate libmpcodecs/ad_liba52.c @ 21548:bf65ffcf0cdb

Set AVFMT_FLAG_GENPTS if -correct-pts is used. This should allow using -correct-pts (and thus filters which adjust pts or add frames) with dvd or other mpeg container files by specifying "-correct-pts -demuxer lavf -vc ffmpeg12". Might work with libmpeg2 decoder too but certainly not with internal demuxer. Using this flag isn't quite optimal as it can cause extra buffering of demuxed frames, but at least it's better than just failing until a more complex solution is implemented.
author uau
date Sun, 10 Dec 2006 00:50:38 +0000
parents fa99b3d31d13
children a81e246e3b38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
1 #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
2 #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
3 #include <unistd.h>
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
4 #include <math.h>
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
5 #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
6
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
7 #include "config.h"
8026
b465ba5897a3 usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents: 7191
diff changeset
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
9 #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
10 #include "help_mp.h"
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
11
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
12 #include "ad_internal.h"
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
13
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
14 #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
15
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15560
diff changeset
16 #include "libaf/af_format.h"
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
17
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15560
diff changeset
18 #include "liba52/a52.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15560
diff changeset
19 #include "liba52/mm_accel.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
20
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17581
diff changeset
21 static a52_state_t *a52_state;
5341
6c1d264cc214 do not export the World
arpi
parents: 5340
diff changeset
22 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
23 /** 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
24 * 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
25 * 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
26 * 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
27 * 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
28 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
29
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
30 #define DRC_NO_ACTION 0
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
31 #define DRC_NO_COMPRESSION 1
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
32 #define DRC_CALLBACK 2
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
33
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
34 /** 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
35 static sample_t a52_level = 1;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
36 /** The value of the -a52drc switch. */
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
37 float a52_drc_level = 1.0;
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
38 static int a52_drc_action = DRC_NO_ACTION;
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
39
21507
fa99b3d31d13 Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents: 21372
diff changeset
40 #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
41
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
42 static ad_info_t info =
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
43 {
7191
1eadce15446c -afm/-vfm help implemenetd, some cosmetics of ad/vd codec names/comments
arpi
parents: 7180
diff changeset
44 "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
45 "liba52",
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
46 "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
47 "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
48 ""
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
49 };
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
50
5343
3dd532400d44 argh... Nick messed up driver names too
arpi
parents: 5341
diff changeset
51 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
52
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
53 extern int 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
54
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
55 int a52_fillbuff(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
56 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
57 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
58 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
59 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
60
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
61 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
62 /* 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
63 while(1){
10119
1a777e2b8228 ac3 byteswapping support (when format!=0x2000)
arpi
parents: 9003
diff changeset
64 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
65 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
66 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
67 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
68 }
10119
1a777e2b8228 ac3 byteswapping support (when format!=0x2000)
arpi
parents: 9003
diff changeset
69 if(sh_audio->format!=0x2000) 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
70 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
71 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
72 /* bad file => resync*/
10119
1a777e2b8228 ac3 byteswapping support (when format!=0x2000)
arpi
parents: 9003
diff changeset
73 if(sh_audio->format!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
15560
3d1f21672c3e No overlap allowed in memcpy, use memmove
hzoli
parents: 15559
diff changeset
74 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
75 --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
76 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
77 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
78 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
79 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
80 sh_audio->samplesize=sh_audio->sample_format==AF_FORMAT_FLOAT_NE ? 4 : 2;
10119
1a777e2b8228 ac3 byteswapping support (when format!=0x2000)
arpi
parents: 9003
diff changeset
81 demux_read_data(sh_audio->ds,sh_audio->a_in_buffer+8,length-8);
1a777e2b8228 ac3 byteswapping support (when format!=0x2000)
arpi
parents: 9003
diff changeset
82 if(sh_audio->format!=0x2000)
1a777e2b8228 ac3 byteswapping support (when format!=0x2000)
arpi
parents: 9003
diff changeset
83 swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-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
84
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
85 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
86 mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check 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
87
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
88 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
89 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
90
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
91 /* 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
92 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
93 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
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108 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
109 }
19944
44193c0a688f verbosity--;
diego
parents: 18771
diff changeset
110 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
111 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
112 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
113 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
114 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
115 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
116
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
117 sample_t dynrng_call (sample_t c, void *data) {
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
118 // fprintf(stderr, "(%lf, %lf): %lf\n", (double)c, (double)a52_drc_level, (double)pow((double)c, a52_drc_level));
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
119 return pow((double)c, a52_drc_level);
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
120 }
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
121
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
122
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
123 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
124 {
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
125 /* 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
126 /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */
15559
9f157ca7e3c2 Make sure that samplesize is at least 2, as some demuxers set it to 1
hzoli
parents: 15558
diff changeset
127 if (sh->samplesize < 2) sh->samplesize = 2;
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
128 sh->audio_out_minsize=audio_output_channels*sh->samplesize*256*6;
5458
b3d1348b251f audio input buffer allocation/free cleanup
arpi
parents: 5343
diff changeset
129 sh->audio_in_minsize=3840;
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
130 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
131 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
132 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
133
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
134 /**
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
135 * \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
136 * 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
137 * \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
138 * \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
139 */
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
140 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
141 {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
142 unsigned long i;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
143 float *p = (float*) out;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
144 for (i = 0; i != 256; i++) {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
145 unsigned long map = channel_map;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
146 do {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
147 unsigned long ch = map & 15;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
148 if (ch == 15)
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
149 *p = 0;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
150 else
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
151 *p = in[i + ((ch-1)<<8)];
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
152 p++;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
153 } while ((map >>= 4));
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 return (int16_t*) p - out;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
156 }
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
157
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
158 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
159 {
5341
6c1d264cc214 do not export the World
arpi
parents: 5340
diff changeset
160 uint32_t a52_accel=0;
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
161 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
162 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
163 /* 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
164 if(gCpuCaps.hasSSE) a52_accel|=MM_ACCEL_X86_SSE;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
165 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
166 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
167 if(gCpuCaps.has3DNow) a52_accel|=MM_ACCEL_X86_3DNOW;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
168 if(gCpuCaps.has3DNowExt) a52_accel|=MM_ACCEL_X86_3DNOWEXT;
9003
c428933c7e54 AltiVec detection code ("borrowed" from FFmpeg and
arpi
parents: 8026
diff changeset
169 if(gCpuCaps.hasAltiVec) a52_accel|=MM_ACCEL_PPC_ALTIVEC;
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17581
diff changeset
170 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
171 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
172 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
173 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
174 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
175 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
176 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
177 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
178 }
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
179
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
180
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
181 /* Init a52 dynrng */
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
182 if (a52_drc_level < 0.001) {
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
183 /* level == 0 --> no compression, init library without callback */
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
184 a52_drc_action = DRC_NO_COMPRESSION;
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
185 } else if (a52_drc_level > 0.999) {
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
186 /* 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
187 a52_drc_action = DRC_NO_ACTION;
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
188 } else {
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
189 a52_drc_action = DRC_CALLBACK;
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
190 }
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
191 /* 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
192
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
193
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
194 /* '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
195 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
196 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
197 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
198 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
199 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
200 /* 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
201 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
202 /* 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
203 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
204 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
205 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
206 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
207 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
208 /* test:*/
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
209 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
210 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
211 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
212 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
213 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
214 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
215 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
216 /* 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
217 channel_map = 0;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
218 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
219 if (!(flags & A52_LFE)) {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
220 switch ((flags<<3) | sh_audio->channels) {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
221 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
222 case (A52_CHANNEL << 3) | 2:
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
223 case (A52_STEREO << 3) | 2:
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
224 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
225 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
226 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
227 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
228 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
229 }
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
230 } else if (sh_audio->channels == 6) {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
231 switch (flags & ~A52_LFE) {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
232 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
233 case A52_CHANNEL:
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
234 case A52_STEREO :
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
235 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
236 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
237 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
238 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
239 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
240 }
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
241 }
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
242 if (channel_map) {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
243 a52_resample = a52_resample_float;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
244 break;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
245 }
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
246 } else
5340
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
247 if(a52_resample_init(a52_accel,flags,sh_audio->channels)) break;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
248 --sh_audio->channels; /* try to decrease no. of channels*/
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
249 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
250 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
251 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
252 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
253 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
254 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
255 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
256
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
257 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
258 {
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
259 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
260
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
261 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
262 {
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
263 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
264 {
15558
3aee7daaa8e5 Fix ADCTRL_SKIP_FRAME and add ADCTRL_RESYNC_STREAM
hzoli
parents: 14817
diff changeset
265 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
266 case ADCTRL_SKIP_FRAME:
15558
3aee7daaa8e5 Fix ADCTRL_SKIP_FRAME and add ADCTRL_RESYNC_STREAM
hzoli
parents: 14817
diff changeset
267 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
268 return CONTROL_TRUE;
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
269 case ADCTRL_SET_VOLUME: {
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
270 float vol = *(float*)arg;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
271 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
272 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
273 return CONTROL_TRUE;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
274 }
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
275 case ADCTRL_QUERY_FORMAT:
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
276 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
277 *(int*)arg == AF_FORMAT_FLOAT_NE)
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
278 return CONTROL_TRUE;
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
279 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
280 }
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
281 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
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
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
284 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
285 {
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
286 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
287 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
288 int i,len=-1;
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
289 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
290 bias = 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
291 if(!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
292 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
293 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
294 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
295 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
296 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
297 }
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
298
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
299 /* handle dynrng */
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
300 if (a52_drc_action != DRC_NO_ACTION) {
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
301 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
302 a52_dynrng(a52_state, NULL, NULL);
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
303 else
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17581
diff changeset
304 a52_dynrng(a52_state, dynrng_call, NULL);
12285
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
305 }
67b8d64af8c7 a52 dynamic range compression support by Peter Gansterer
alex
parents: 10978
diff changeset
306
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 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
308 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
309 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
310 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
311 break;
0f12fb7c1c5d imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
arpi
parents:
diff changeset
312 }
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17581
diff changeset
313 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
314 }
14817
878745349274 Add float output support. Add ADCTRL_QUERY_FORMAT control to report the
hzoli
parents: 13427
diff changeset
315 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
316 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
317 }