Mercurial > libavcodec.hg
comparison cook.c @ 9174:4d8d8fe29d4d libavcodec
save avctx in cook decoder context and use it for av_log
author | banan |
---|---|
date | Sun, 15 Mar 2009 14:11:11 +0000 |
parents | fb675a9727f0 |
children | da3196ebcf99 |
comparison
equal
deleted
inserted
replaced
9173:fb675a9727f0 | 9174:4d8d8fe29d4d |
---|---|
89 void (* interpolate) (struct cook *q, float* buffer, | 89 void (* interpolate) (struct cook *q, float* buffer, |
90 int gain_index, int gain_index_next); | 90 int gain_index, int gain_index_next); |
91 | 91 |
92 void (* saturate_output) (struct cook *q, int chan, int16_t *out); | 92 void (* saturate_output) (struct cook *q, int chan, int16_t *out); |
93 | 93 |
94 AVCodecContext* avctx; | |
94 GetBitContext gb; | 95 GetBitContext gb; |
95 /* stream data */ | 96 /* stream data */ |
96 int nb_channels; | 97 int nb_channels; |
97 int joint_stereo; | 98 int joint_stereo; |
98 int bit_rate; | 99 int bit_rate; |
209 for (i=0 ; i<13 ; i++) { | 210 for (i=0 ; i<13 ; i++) { |
210 result |= init_vlc (&q->envelope_quant_index[i], 9, 24, | 211 result |= init_vlc (&q->envelope_quant_index[i], 9, 24, |
211 envelope_quant_index_huffbits[i], 1, 1, | 212 envelope_quant_index_huffbits[i], 1, 1, |
212 envelope_quant_index_huffcodes[i], 2, 2, 0); | 213 envelope_quant_index_huffcodes[i], 2, 2, 0); |
213 } | 214 } |
214 av_log(NULL,AV_LOG_DEBUG,"sqvh VLC init\n"); | 215 av_log(q->avctx,AV_LOG_DEBUG,"sqvh VLC init\n"); |
215 for (i=0 ; i<7 ; i++) { | 216 for (i=0 ; i<7 ; i++) { |
216 result |= init_vlc (&q->sqvh[i], vhvlcsize_tab[i], vhsize_tab[i], | 217 result |= init_vlc (&q->sqvh[i], vhvlcsize_tab[i], vhsize_tab[i], |
217 cvh_huffbits[i], 1, 1, | 218 cvh_huffbits[i], 1, 1, |
218 cvh_huffcodes[i], 2, 2, 0); | 219 cvh_huffcodes[i], 2, 2, 0); |
219 } | 220 } |
220 | 221 |
221 if (q->nb_channels==2 && q->joint_stereo==1){ | 222 if (q->nb_channels==2 && q->joint_stereo==1){ |
222 result |= init_vlc (&q->ccpl, 6, (1<<q->js_vlc_bits)-1, | 223 result |= init_vlc (&q->ccpl, 6, (1<<q->js_vlc_bits)-1, |
223 ccpl_huffbits[q->js_vlc_bits-2], 1, 1, | 224 ccpl_huffbits[q->js_vlc_bits-2], 1, 1, |
224 ccpl_huffcodes[q->js_vlc_bits-2], 2, 2, 0); | 225 ccpl_huffcodes[q->js_vlc_bits-2], 2, 2, 0); |
225 av_log(NULL,AV_LOG_DEBUG,"Joint-stereo VLC used.\n"); | 226 av_log(q->avctx,AV_LOG_DEBUG,"Joint-stereo VLC used.\n"); |
226 } | 227 } |
227 | 228 |
228 av_log(NULL,AV_LOG_DEBUG,"VLC tables initialized.\n"); | 229 av_log(q->avctx,AV_LOG_DEBUG,"VLC tables initialized.\n"); |
229 return result; | 230 return result; |
230 } | 231 } |
231 | 232 |
232 static av_cold int init_cook_mlt(COOKContext *q) { | 233 static av_cold int init_cook_mlt(COOKContext *q) { |
233 int j; | 234 int j; |
244 /* Initialize the MDCT. */ | 245 /* Initialize the MDCT. */ |
245 if (ff_mdct_init(&q->mdct_ctx, av_log2(mlt_size)+1, 1)) { | 246 if (ff_mdct_init(&q->mdct_ctx, av_log2(mlt_size)+1, 1)) { |
246 av_free(q->mlt_window); | 247 av_free(q->mlt_window); |
247 return -1; | 248 return -1; |
248 } | 249 } |
249 av_log(NULL,AV_LOG_DEBUG,"MDCT initialized, order = %d.\n", | 250 av_log(q->avctx,AV_LOG_DEBUG,"MDCT initialized, order = %d.\n", |
250 av_log2(mlt_size)+1); | 251 av_log2(mlt_size)+1); |
251 | 252 |
252 return 0; | 253 return 0; |
253 } | 254 } |
254 | 255 |
336 } | 337 } |
337 if(q->nb_channels==2 && q->joint_stereo==1 ){ | 338 if(q->nb_channels==2 && q->joint_stereo==1 ){ |
338 free_vlc(&q->ccpl); | 339 free_vlc(&q->ccpl); |
339 } | 340 } |
340 | 341 |
341 av_log(NULL,AV_LOG_DEBUG,"Memory deallocated.\n"); | 342 av_log(avctx,AV_LOG_DEBUG,"Memory deallocated.\n"); |
342 | 343 |
343 return 0; | 344 return 0; |
344 } | 345 } |
345 | 346 |
346 /** | 347 /** |
417 bits_left = q->bits_per_subpacket - get_bits_count(&q->gb); | 418 bits_left = q->bits_per_subpacket - get_bits_count(&q->gb); |
418 | 419 |
419 if(bits_left > q->samples_per_channel) { | 420 if(bits_left > q->samples_per_channel) { |
420 bits_left = q->samples_per_channel + | 421 bits_left = q->samples_per_channel + |
421 ((bits_left - q->samples_per_channel)*5)/8; | 422 ((bits_left - q->samples_per_channel)*5)/8; |
422 //av_log(NULL, AV_LOG_ERROR, "bits_left = %d\n",bits_left); | 423 //av_log(q->avctx, AV_LOG_ERROR, "bits_left = %d\n",bits_left); |
423 } | 424 } |
424 | 425 |
425 memset(&exp_index1,0,102*sizeof(int)); | 426 memset(&exp_index1,0,102*sizeof(int)); |
426 memset(&exp_index2,0,102*sizeof(int)); | 427 memset(&exp_index2,0,102*sizeof(int)); |
427 memset(&tmp_categorize_array,0,128*2*sizeof(int)); | 428 memset(&tmp_categorize_array,0,128*2*sizeof(int)); |
933 | 934 |
934 static int decode_subpacket(COOKContext *q, const uint8_t *inbuffer, | 935 static int decode_subpacket(COOKContext *q, const uint8_t *inbuffer, |
935 int sub_packet_size, int16_t *outbuffer) { | 936 int sub_packet_size, int16_t *outbuffer) { |
936 /* packet dump */ | 937 /* packet dump */ |
937 // for (i=0 ; i<sub_packet_size ; i++) { | 938 // for (i=0 ; i<sub_packet_size ; i++) { |
938 // av_log(NULL, AV_LOG_ERROR, "%02x", inbuffer[i]); | 939 // av_log(q->avctx, AV_LOG_ERROR, "%02x", inbuffer[i]); |
939 // } | 940 // } |
940 // av_log(NULL, AV_LOG_ERROR, "\n"); | 941 // av_log(q->avctx, AV_LOG_ERROR, "\n"); |
941 | 942 |
942 decode_bytes_and_gain(q, inbuffer, &q->gains1); | 943 decode_bytes_and_gain(q, inbuffer, &q->gains1); |
943 | 944 |
944 if (q->joint_stereo) { | 945 if (q->joint_stereo) { |
945 joint_decode(q, q->decode_buffer_1, q->decode_buffer_2); | 946 joint_decode(q, q->decode_buffer_1, q->decode_buffer_2); |
992 | 993 |
993 #ifdef COOKDEBUG | 994 #ifdef COOKDEBUG |
994 static void dump_cook_context(COOKContext *q) | 995 static void dump_cook_context(COOKContext *q) |
995 { | 996 { |
996 //int i=0; | 997 //int i=0; |
997 #define PRINT(a,b) av_log(NULL,AV_LOG_ERROR," %s = %d\n", a, b); | 998 #define PRINT(a,b) av_log(q->avctx,AV_LOG_ERROR," %s = %d\n", a, b); |
998 av_log(NULL,AV_LOG_ERROR,"COOKextradata\n"); | 999 av_log(q->avctx,AV_LOG_ERROR,"COOKextradata\n"); |
999 av_log(NULL,AV_LOG_ERROR,"cookversion=%x\n",q->cookversion); | 1000 av_log(q->avctx,AV_LOG_ERROR,"cookversion=%x\n",q->cookversion); |
1000 if (q->cookversion > STEREO) { | 1001 if (q->cookversion > STEREO) { |
1001 PRINT("js_subband_start",q->js_subband_start); | 1002 PRINT("js_subband_start",q->js_subband_start); |
1002 PRINT("js_vlc_bits",q->js_vlc_bits); | 1003 PRINT("js_vlc_bits",q->js_vlc_bits); |
1003 } | 1004 } |
1004 av_log(NULL,AV_LOG_ERROR,"COOKContext\n"); | 1005 av_log(q->avctx,AV_LOG_ERROR,"COOKContext\n"); |
1005 PRINT("nb_channels",q->nb_channels); | 1006 PRINT("nb_channels",q->nb_channels); |
1006 PRINT("bit_rate",q->bit_rate); | 1007 PRINT("bit_rate",q->bit_rate); |
1007 PRINT("sample_rate",q->sample_rate); | 1008 PRINT("sample_rate",q->sample_rate); |
1008 PRINT("samples_per_channel",q->samples_per_channel); | 1009 PRINT("samples_per_channel",q->samples_per_channel); |
1009 PRINT("samples_per_frame",q->samples_per_frame); | 1010 PRINT("samples_per_frame",q->samples_per_frame); |
1024 | 1025 |
1025 static av_cold int cook_decode_init(AVCodecContext *avctx) | 1026 static av_cold int cook_decode_init(AVCodecContext *avctx) |
1026 { | 1027 { |
1027 COOKContext *q = avctx->priv_data; | 1028 COOKContext *q = avctx->priv_data; |
1028 const uint8_t *edata_ptr = avctx->extradata; | 1029 const uint8_t *edata_ptr = avctx->extradata; |
1030 q->avctx = avctx; | |
1029 | 1031 |
1030 /* Take care of the codec specific extradata. */ | 1032 /* Take care of the codec specific extradata. */ |
1031 if (avctx->extradata_size <= 0) { | 1033 if (avctx->extradata_size <= 0) { |
1032 av_log(avctx,AV_LOG_ERROR,"Necessary extradata missing!\n"); | 1034 av_log(avctx,AV_LOG_ERROR,"Necessary extradata missing!\n"); |
1033 return -1; | 1035 return -1; |
1062 /* Initialize default data states. */ | 1064 /* Initialize default data states. */ |
1063 q->log2_numvector_size = 5; | 1065 q->log2_numvector_size = 5; |
1064 q->total_subbands = q->subbands; | 1066 q->total_subbands = q->subbands; |
1065 | 1067 |
1066 /* Initialize version-dependent variables */ | 1068 /* Initialize version-dependent variables */ |
1067 av_log(NULL,AV_LOG_DEBUG,"q->cookversion=%x\n",q->cookversion); | 1069 av_log(avctx,AV_LOG_DEBUG,"q->cookversion=%x\n",q->cookversion); |
1068 q->joint_stereo = 0; | 1070 q->joint_stereo = 0; |
1069 switch (q->cookversion) { | 1071 switch (q->cookversion) { |
1070 case MONO: | 1072 case MONO: |
1071 if (q->nb_channels != 1) { | 1073 if (q->nb_channels != 1) { |
1072 av_log(avctx,AV_LOG_ERROR,"Container channels != 1, report sample!\n"); | 1074 av_log(avctx,AV_LOG_ERROR,"Container channels != 1, report sample!\n"); |