comparison flac.c @ 6726:08bdfd7f3ab4 libavcodec

change function parameters for metadata_streaminfo()
author jbr
date Fri, 02 May 2008 21:29:49 +0000
parents 273dd370ccbd
children 706dd1afb389
comparison
equal deleted inserted replaced
6725:dc6bc48b0e17 6726:08bdfd7f3ab4
92 int64_t val; 92 int64_t val;
93 GET_UTF8(val, get_bits(gb, 8), return -1;) 93 GET_UTF8(val, get_bits(gb, 8), return -1;)
94 return val; 94 return val;
95 } 95 }
96 96
97 static void metadata_streaminfo(FLACContext *s); 97 static void metadata_streaminfo(AVCodecContext *avctx, FLACContext *s, const uint8_t *buffer);
98 static void allocate_buffers(FLACContext *s); 98 static void allocate_buffers(FLACContext *s);
99 static int metadata_parse(FLACContext *s); 99 static int metadata_parse(FLACContext *s);
100 100
101 static av_cold int flac_decode_init(AVCodecContext * avctx) 101 static av_cold int flac_decode_init(AVCodecContext * avctx)
102 { 102 {
105 105
106 if (avctx->extradata_size > 4) { 106 if (avctx->extradata_size > 4) {
107 /* initialize based on the demuxer-supplied streamdata header */ 107 /* initialize based on the demuxer-supplied streamdata header */
108 init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8); 108 init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
109 if (avctx->extradata_size == FLAC_STREAMINFO_SIZE) { 109 if (avctx->extradata_size == FLAC_STREAMINFO_SIZE) {
110 metadata_streaminfo(s); 110 metadata_streaminfo(avctx, s, avctx->extradata);
111 allocate_buffers(s); 111 allocate_buffers(s);
112 } else { 112 } else {
113 metadata_parse(s); 113 metadata_parse(s);
114 } 114 }
115 } 115 }
141 } 141 }
142 142
143 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize); 143 s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
144 } 144 }
145 145
146 static void metadata_streaminfo(FLACContext *s) 146 static void metadata_streaminfo(AVCodecContext *avctx, FLACContext *s,
147 { 147 const uint8_t *buffer)
148 {
149 GetBitContext gb;
150 init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8);
151
148 /* mandatory streaminfo */ 152 /* mandatory streaminfo */
149 s->min_blocksize = get_bits(&s->gb, 16); 153 s->min_blocksize = get_bits(&gb, 16);
150 s->max_blocksize = get_bits(&s->gb, 16); 154 s->max_blocksize = get_bits(&gb, 16);
151 155
152 skip_bits(&s->gb, 24); /* skip min frame size */ 156 skip_bits(&gb, 24); /* skip min frame size */
153 s->max_framesize = get_bits_long(&s->gb, 24); 157 s->max_framesize = get_bits_long(&gb, 24);
154 158
155 s->samplerate = get_bits_long(&s->gb, 20); 159 s->samplerate = get_bits_long(&gb, 20);
156 s->channels = get_bits(&s->gb, 3) + 1; 160 s->channels = get_bits(&gb, 3) + 1;
157 s->bps = get_bits(&s->gb, 5) + 1; 161 s->bps = get_bits(&gb, 5) + 1;
158 162
159 s->avctx->channels = s->channels; 163 avctx->channels = s->channels;
160 s->avctx->sample_rate = s->samplerate; 164 avctx->sample_rate = s->samplerate;
161 165
162 skip_bits(&s->gb, 36); /* total num of samples */ 166 skip_bits(&gb, 36); /* total num of samples */
163 167
164 skip_bits(&s->gb, 64); /* md5 sum */ 168 skip_bits(&gb, 64); /* md5 sum */
165 skip_bits(&s->gb, 64); /* md5 sum */ 169 skip_bits(&gb, 64); /* md5 sum */
166 170
167 dump_headers(s); 171 dump_headers(s);
168 } 172 }
169 173
170 /** 174 /**
191 " metadata block: flag = %d, type = %d, size = %d\n", 195 " metadata block: flag = %d, type = %d, size = %d\n",
192 metadata_last, metadata_type, metadata_size); 196 metadata_last, metadata_type, metadata_size);
193 if (metadata_size) { 197 if (metadata_size) {
194 switch (metadata_type) { 198 switch (metadata_type) {
195 case METADATA_TYPE_STREAMINFO: 199 case METADATA_TYPE_STREAMINFO:
196 metadata_streaminfo(s); 200 metadata_streaminfo(s->avctx, s, s->gb.buffer+get_bits_count(&s->gb)/8);
197 streaminfo_updated = 1; 201 streaminfo_updated = 1;
198 break;
199 202
200 default: 203 default:
201 for (i=0; i<metadata_size; i++) 204 for (i=0; i<metadata_size; i++)
202 skip_bits(&s->gb, 8); 205 skip_bits(&s->gb, 8);
203 } 206 }