annotate libmpcodecs/ad_libmad.c @ 7180:28677d779205

-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
author arpi
date Fri, 30 Aug 2002 21:44:20 +0000
parents 4bae3caef7a9
children 9d0b052c4f74
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5479
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
1 // SAMPLE audio decoder - you can use this file as template when creating new codec!
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
2
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
3 #include <stdio.h>
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
4 #include <stdlib.h>
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
5 #include <unistd.h>
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
6
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
7 #include "config.h"
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
8
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
9 #ifdef USE_LIBMAD
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
10
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
11 #include "ad_internal.h"
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
12
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
13 static ad_info_t info = {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
14 "libmad mpeg audio decoder",
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
15 "libmad",
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
16 "A'rpi",
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
17 "libmad...",
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
18 "based on Xine's libmad/xine_decoder.c"
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
19 };
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
20
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
21 LIBAD_EXTERN(libmad)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
22
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
23 #include <mad.h>
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
24
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
25 typedef struct mad_decoder_s {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
26
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
27 struct mad_synth synth;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
28 struct mad_stream stream;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
29 struct mad_frame frame;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
30
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
31 int have_frame;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
32
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
33 int output_sampling_rate;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
34 int output_open;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
35 int output_mode;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
36
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
37 } mad_decoder_t;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
38
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
39 static int preinit(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
40
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
41 mad_decoder_t *this = (mad_decoder_t *) malloc(sizeof(mad_decoder_t));
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
42 memset(this,0,sizeof(mad_decoder_t));
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
43 sh->context = this;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
44
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
45 mad_synth_init (&this->synth);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
46 mad_stream_init (&this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
47 mad_frame_init (&this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
48
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
49 sh->audio_out_minsize=2*4608;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
50 sh->audio_in_minsize=4096;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
51
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
52 return 1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
53 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
54
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
55 static int read_frame(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
56 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
57 int len;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
58
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
59 while((len=demux_read_data(sh->ds,&sh->a_in_buffer[sh->a_in_buffer_len],
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
60 sh->a_in_buffer_size-sh->a_in_buffer_len))>0){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
61 sh->a_in_buffer_len+=len;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
62 while(1){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
63 int ret;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
64 mad_stream_buffer (&this->stream, sh->a_in_buffer, sh->a_in_buffer_len);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
65 ret=mad_frame_decode (&this->frame, &this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
66 if (this->stream.next_frame) {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
67 int num_bytes =
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
68 (char*)sh->a_in_buffer+sh->a_in_buffer_len - (char*)this->stream.next_frame;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
69 memmove(sh->a_in_buffer, this->stream.next_frame, num_bytes);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
70 mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"libmad: %d bytes processed\n",sh->a_in_buffer_len-num_bytes);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
71 sh->a_in_buffer_len = num_bytes;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
72 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
73 if (ret == 0) return 1; // OK!!!
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
74 // error! try to resync!
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
75 if(this->stream.error==MAD_ERROR_BUFLEN) break;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
76 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
77 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
78 mp_msg(MSGT_DECAUDIO,MSGL_INFO,"Cannot sync MAD frame\n");
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
79 return 0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
80 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
81
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
82 static int init(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
83 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
84
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
85 this->have_frame=read_frame(sh);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
86 if(!this->have_frame) return 0; // failed to sync...
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
87
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
88 sh->channels=(this->frame.header.mode == MAD_MODE_SINGLE_CHANNEL) ? 1 : 2;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
89 sh->samplerate=this->frame.header.samplerate;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
90 sh->i_bps=this->frame.header.bitrate/8;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
91
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
92 return 1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
93 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
94
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
95 static void uninit(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
96 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
97 mad_synth_finish (&this->synth);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
98 mad_frame_finish (&this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
99 mad_stream_finish(&this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
100 free(sh->context);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
101 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
102
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
103 /* utility to scale and round samples to 16 bits */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
104 static inline signed int scale(mad_fixed_t sample) {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
105 /* round */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
106 sample += (1L << (MAD_F_FRACBITS - 16));
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
107
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
108 /* clip */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
109 if (sample >= MAD_F_ONE)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
110 sample = MAD_F_ONE - 1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
111 else if (sample < -MAD_F_ONE)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
112 sample = -MAD_F_ONE;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
113
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
114 /* quantize */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
115 return sample >> (MAD_F_FRACBITS + 1 - 16);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
116 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
117
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
118 static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
119 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
120 int len=0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
121
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
122 while(len<minlen && len+4608<=maxlen){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
123 if(!this->have_frame) this->have_frame=read_frame(sh);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
124 if(!this->have_frame) break; // failed to sync... or EOF
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
125 this->have_frame=0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
126
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
127 mad_synth_frame (&this->synth, &this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
128
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
129 { unsigned int nchannels, nsamples;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
130 mad_fixed_t const *left_ch, *right_ch;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
131 struct mad_pcm *pcm = &this->synth.pcm;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
132 uint16_t *output = (uint16_t*) buf;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
133
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
134 nchannels = pcm->channels;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
135 nsamples = pcm->length;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
136 left_ch = pcm->samples[0];
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
137 right_ch = pcm->samples[1];
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
138
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
139 len+=2*nchannels*nsamples;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
140 buf+=2*nchannels*nsamples;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
141
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
142 while (nsamples--) {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
143 /* output sample(s) in 16-bit signed little-endian PCM */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
144
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
145 *output++ = scale(*left_ch++);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
146
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
147 if (nchannels == 2)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
148 *output++ = scale(*right_ch++);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
149
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
150 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
151 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
152 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
153
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
154 return len?len:-1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
155 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
156
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
157 static int control(sh_audio_t *sh,int cmd,void* arg, ...){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
158 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
159 // various optional functions you MAY implement:
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
160 switch(cmd){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
161 case ADCTRL_RESYNC_STREAM:
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
162 this->have_frame=0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
163 mad_synth_init (&this->synth);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
164 mad_stream_init (&this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
165 mad_frame_init (&this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
166 return CONTROL_TRUE;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
167 case ADCTRL_SKIP_FRAME:
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
168 this->have_frame=read_frame(sh);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
169 return CONTROL_TRUE;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
170 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
171 return CONTROL_UNKNOWN;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
172 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
173 #endif