annotate libmpcodecs/ad_vorbis.c @ 5574:bdfd4b72244a

fixing vertical scaling on non mobility cards, this might have overflowed into the horizontal stuff, so perhaps it fixes the horizontal stuff too
author michael
date Fri, 12 Apr 2002 12:29:12 +0000
parents 0b5462a620fc
children e4c2a5541a6a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5427
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
1
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
2 #include <stdio.h>
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
3 #include <stdlib.h>
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
4 #include <unistd.h>
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
5
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
6 #include "config.h"
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
7 #include "ad_internal.h"
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
8
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
9 #ifdef HAVE_OGGVORBIS
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
10
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
11 static ad_info_t info =
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
12 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
13 "Ogg/Vorbis audio decoder",
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
14 "libvorbis",
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
15 AFM_VORBIS,
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
16 "Felix Buenemann, A'rpi",
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
17 "libvorbis",
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
18 "buggy"
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
19 };
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
20
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
21 LIBAD_EXTERN(vorbis)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
22
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
23 #include <math.h>
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
24 #include <vorbis/codec.h>
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
25
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
26 // This struct is also defined in demux_ogg.c => common header ?
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
27 typedef struct ov_struct_st {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
28 vorbis_info vi; /* struct that stores all the static vorbis bitstream
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
29 settings */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
30 vorbis_comment vc; /* struct that stores all the bitstream user comments */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
31 vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
32 vorbis_block vb; /* local working space for packet->PCM decode */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
33 } ov_struct_t;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
34
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
35 static int preinit(sh_audio_t *sh)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
36 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
37 sh->audio_out_minsize=1024*4; // 1024 samples/frame
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
38 return 1;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
39 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
40
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
41 static int init(sh_audio_t *sh)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
42 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
43 ogg_packet op;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
44 vorbis_comment vc;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
45 struct ov_struct_st *ov;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
46
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
47 /// Init the decoder with the 3 header packets
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
48 ov = (struct ov_struct_st*)malloc(sizeof(struct ov_struct_st));
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
49 vorbis_info_init(&ov->vi);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
50 vorbis_comment_init(&vc);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
51 op.bytes = ds_get_packet(sh->ds,&op.packet);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
52 op.b_o_s = 1;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
53 /// Header
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
54 if(vorbis_synthesis_headerin(&ov->vi,&vc,&op) <0) {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
55 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"OggVorbis: initial (identification) header broken!\n");
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
56 free(ov);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
57 return 0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
58 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
59 op.bytes = ds_get_packet(sh->ds,&op.packet);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
60 op.b_o_s = 0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
61 /// Comments
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
62 if(vorbis_synthesis_headerin(&ov->vi,&vc,&op) <0) {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
63 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"OggVorbis: comment header broken!\n");
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
64 free(ov);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
65 return 0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
66 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
67 op.bytes = ds_get_packet(sh->ds,&op.packet);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
68 //// Codebook
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
69 if(vorbis_synthesis_headerin(&ov->vi,&vc,&op)<0) {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
70 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"OggVorbis: codebook header broken!\n");
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
71 free(ov);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
72 return 0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
73 } else { /// Print the infos
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
74 char **ptr=vc.user_comments;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
75 while(*ptr){
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
76 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbisComment: %s\n",*ptr);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
77 ++ptr;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
78 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
79 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Bitstream is %d channel, %dHz, %dbit/s %cBR\n",(int)ov->vi.channels,(int)ov->vi.rate,(int)ov->vi.bitrate_nominal,
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
80 (ov->vi.bitrate_lower!=ov->vi.bitrate_nominal)||(ov->vi.bitrate_upper!=ov->vi.bitrate_nominal)?'V':'C');
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
81 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Encoded by: %s\n",vc.vendor);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
82 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
83
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
84 // printf("lower=%d upper=%d \n",(int)ov->vi.bitrate_lower,(int)ov->vi.bitrate_upper);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
85
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
86 // Setup the decoder
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
87 sh->channels=ov->vi.channels;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
88 sh->samplerate=ov->vi.rate;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
89 // assume 128kbit if bitrate not specified in the header
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
90 sh->i_bps=((ov->vi.bitrate_nominal>0) ? ov->vi.bitrate_nominal : 128000)/8;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
91 sh->context = ov;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
92
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
93 /// Finish the decoder init
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
94 vorbis_synthesis_init(&ov->vd,&ov->vi);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
95 vorbis_block_init(&ov->vd,&ov->vb);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
96 mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Init OK!\n");
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
97
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
98 return 1;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
99 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
100
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
101 static void uninit(sh_audio_t *sh)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
102 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
103 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
104
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
105 static int control(sh_audio_t *sh,int cmd,void* arg, ...)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
106 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
107 switch(cmd)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
108 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
109 #if 0
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
110 case ADCTRL_RESYNC_STREAM:
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
111 return CONTROL_TRUE;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
112 case ADCTRL_SKIP_FRAME:
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
113 return CONTROL_TRUE;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
114 #endif
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
115 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
116 return CONTROL_UNKNOWN;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
117 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
118
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
119 static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
120 {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
121 int len = 0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
122 int samples;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
123 float **pcm;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
124 ogg_packet op;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
125 char* np;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
126 struct ov_struct_st *ov = sh->context;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
127 op.b_o_s = op.e_o_s = 0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
128 while(len < minlen) {
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
129 op.bytes = ds_get_packet(sh->ds,&op.packet);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
130 if(!op.packet)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
131 break;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
132 if(vorbis_synthesis(&ov->vb,&op)==0) /* test for success! */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
133 vorbis_synthesis_blockin(&ov->vd,&ov->vb);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
134 while((samples=vorbis_synthesis_pcmout(&ov->vd,&pcm))>0){
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
135 int i,j;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
136 int clipflag=0;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
137 int convsize=(maxlen-len)/(2*ov->vi.channels); // max size!
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
138 int bout=(samples<convsize?samples:convsize);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
139
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
140 if(bout<=0) break;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
141
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
142 /* convert floats to 16 bit signed ints (host order) and
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
143 interleave */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
144 for(i=0;i<ov->vi.channels;i++){
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
145 ogg_int16_t *convbuffer=(ogg_int16_t *)(&buf[len]);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
146 ogg_int16_t *ptr=convbuffer+i;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
147 float *mono=pcm[i];
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
148 for(j=0;j<bout;j++){
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
149 #if 1
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
150 int val=mono[j]*32767.f;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
151 #else /* optional dither */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
152 int val=mono[j]*32767.f+drand48()-0.5f;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
153 #endif
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
154 /* might as well guard against clipping */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
155 if(val>32767){
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
156 val=32767;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
157 clipflag=1;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
158 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
159 if(val<-32768){
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
160 val=-32768;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
161 clipflag=1;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
162 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
163 *ptr=val;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
164 ptr+=ov->vi.channels;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
165 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
166 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
167
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
168 if(clipflag)
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
169 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"Clipping in frame %ld\n",(long)(ov->vd.sequence));
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
170 len+=2*ov->vi.channels*bout;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
171 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"\n[decoded: %d / %d ]\n",bout,samples);
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
172 vorbis_synthesis_read(&ov->vd,bout); /* tell libvorbis how
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
173 many samples we
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
174 actually consumed */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
175 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
176 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
177
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
178
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
179
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
180 return len;
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
181 }
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
182
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
183 #endif /* !HAVE_OGGVORBIS */
0b5462a620fc vorbis driver ported, and also fixed a bug, as nominal_bitrate can be -1
arpi
parents:
diff changeset
184