annotate libmpcodecs/ad_libmad.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents a1807995e2ab
children 0f1b5b68af32
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 #include "ad_internal.h"
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 static ad_info_t info = {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
12 "libmad mpeg audio decoder",
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
13 "libmad",
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
14 "A'rpi",
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 "based on Xine's libmad/xine_decoder.c"
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
17 };
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
18
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
19 LIBAD_EXTERN(libmad)
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 #include <mad.h>
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 typedef struct mad_decoder_s {
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 struct mad_synth synth;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
26 struct mad_stream stream;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
27 struct mad_frame frame;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
28
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
29 int have_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 output_sampling_rate;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
32 int output_open;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
33 int output_mode;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
34
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
35 } mad_decoder_t;
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 static int preinit(sh_audio_t *sh){
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 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
40 memset(this,0,sizeof(mad_decoder_t));
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
41 sh->context = this;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
42
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
43 mad_synth_init (&this->synth);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
44 mad_stream_init (&this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
45 mad_frame_init (&this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
46
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
47 sh->audio_out_minsize=2*4608;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
48 sh->audio_in_minsize=4096;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
49
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
50 return 1;
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
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
53 static int read_frame(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
54 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
55 int len;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
56
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
57 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
58 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
59 sh->a_in_buffer_len+=len;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
60 while(1){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
61 int ret;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
62 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
63 ret=mad_frame_decode (&this->frame, &this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
64 if (this->stream.next_frame) {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
65 int num_bytes =
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
66 (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
67 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
68 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
69 sh->a_in_buffer_len = num_bytes;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
70 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
71 if (ret == 0) return 1; // OK!!!
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
72 // error! try to resync!
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
73 if(this->stream.error==MAD_ERROR_BUFLEN) break;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
74 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
75 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
76 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
77 return 0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
78 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
79
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
80 static int init(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
81 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
82
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
83 this->have_frame=read_frame(sh);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
84 if(!this->have_frame) return 0; // failed to sync...
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
85
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
86 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
87 sh->samplerate=this->frame.header.samplerate;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
88 sh->i_bps=this->frame.header.bitrate/8;
13430
rfelker
parents: 13427
diff changeset
89 sh->samplesize=2;
5479
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
90
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
91 return 1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
92 }
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 static void uninit(sh_audio_t *sh){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
95 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
96 mad_synth_finish (&this->synth);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
97 mad_frame_finish (&this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
98 mad_stream_finish(&this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
99 free(sh->context);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
100 }
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 /* utility to scale and round samples to 16 bits */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
103 static inline signed int scale(mad_fixed_t sample) {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
104 /* round */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
105 sample += (1L << (MAD_F_FRACBITS - 16));
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
106
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
107 /* clip */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
108 if (sample >= MAD_F_ONE)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
109 sample = MAD_F_ONE - 1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
110 else if (sample < -MAD_F_ONE)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
111 sample = -MAD_F_ONE;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
112
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
113 /* quantize */
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
114 return sample >> (MAD_F_FRACBITS + 1 - 16);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
115 }
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 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
118 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
119 int len=0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
120
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
121 while(len<minlen && len+4608<=maxlen){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
122 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
123 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
124 this->have_frame=0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
125
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
126 mad_synth_frame (&this->synth, &this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
127
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
128 { unsigned int nchannels, nsamples;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
129 mad_fixed_t const *left_ch, *right_ch;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
130 struct mad_pcm *pcm = &this->synth.pcm;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
131 uint16_t *output = (uint16_t*) buf;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
132
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
133 nchannels = pcm->channels;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
134 nsamples = pcm->length;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
135 left_ch = pcm->samples[0];
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
136 right_ch = pcm->samples[1];
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
137
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
138 len+=2*nchannels*nsamples;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
139 buf+=2*nchannels*nsamples;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
140
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
141 while (nsamples--) {
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
142 /* 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
143
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
144 *output++ = scale(*left_ch++);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
145
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
146 if (nchannels == 2)
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
147 *output++ = scale(*right_ch++);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
148
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 return len?len:-1;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
154 }
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 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
157 mad_decoder_t *this = (mad_decoder_t *) sh->context;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
158 // various optional functions you MAY implement:
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
159 switch(cmd){
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
160 case ADCTRL_RESYNC_STREAM:
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
161 this->have_frame=0;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
162 mad_synth_init (&this->synth);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
163 mad_stream_init (&this->stream);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
164 mad_frame_init (&this->frame);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
165 return CONTROL_TRUE;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
166 case ADCTRL_SKIP_FRAME:
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
167 this->have_frame=read_frame(sh);
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
168 return CONTROL_TRUE;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
169 }
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
170 return CONTROL_UNKNOWN;
22b289d7f87f libmad support, rewritten from scratch using Xine decoder as sample
arpi
parents:
diff changeset
171 }