mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
Fix an out of array access and some minor cleanup of the code.
All available cook samples decode correctly now. patch by Benjamin Larsson < banan ** at ** student ** dot ** ltu ** dot ** se > Originally committed as revision 4810 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
1499e0bee9
commit
7022003581
@ -131,11 +131,6 @@ typedef struct {
|
|||||||
float rootpow2tab[127];
|
float rootpow2tab[127];
|
||||||
|
|
||||||
/* data buffers */
|
/* data buffers */
|
||||||
uint8_t* frame_reorder_buffer;
|
|
||||||
int* frame_reorder_index;
|
|
||||||
int frame_reorder_counter;
|
|
||||||
int frame_reorder_complete;
|
|
||||||
int frame_reorder_index_size;
|
|
||||||
|
|
||||||
uint8_t* decoded_bytes_buffer;
|
uint8_t* decoded_bytes_buffer;
|
||||||
float mono_mdct_output[2048] __attribute__((aligned(16)));
|
float mono_mdct_output[2048] __attribute__((aligned(16)));
|
||||||
@ -325,8 +320,6 @@ static int cook_decode_close(AVCodecContext *avctx)
|
|||||||
av_free(q->mlt_precos);
|
av_free(q->mlt_precos);
|
||||||
av_free(q->mlt_presin);
|
av_free(q->mlt_presin);
|
||||||
av_free(q->mlt_postcos);
|
av_free(q->mlt_postcos);
|
||||||
av_free(q->frame_reorder_index);
|
|
||||||
av_free(q->frame_reorder_buffer);
|
|
||||||
av_free(q->decoded_bytes_buffer);
|
av_free(q->decoded_bytes_buffer);
|
||||||
|
|
||||||
/* Free the transform. */
|
/* Free the transform. */
|
||||||
@ -915,7 +908,7 @@ static void joint_decode(COOKContext *q, float* mlt_buffer1,
|
|||||||
float* mlt_buffer2) {
|
float* mlt_buffer2) {
|
||||||
int i,j;
|
int i,j;
|
||||||
int decouple_tab[SUBBAND_SIZE];
|
int decouple_tab[SUBBAND_SIZE];
|
||||||
float decode_buffer[2048]; //Only 1060 might be needed.
|
float decode_buffer[1060];
|
||||||
int idx, cpl_tmp,tmp_idx;
|
int idx, cpl_tmp,tmp_idx;
|
||||||
float f1,f2;
|
float f1,f2;
|
||||||
float* cplscale;
|
float* cplscale;
|
||||||
@ -940,20 +933,18 @@ static void joint_decode(COOKContext *q, float* mlt_buffer1,
|
|||||||
/* When we reach js_subband_start (the higher frequencies)
|
/* When we reach js_subband_start (the higher frequencies)
|
||||||
the coefficients are stored in a coupling scheme. */
|
the coefficients are stored in a coupling scheme. */
|
||||||
idx = (1 << q->js_vlc_bits) - 1;
|
idx = (1 << q->js_vlc_bits) - 1;
|
||||||
if (q->js_subband_start < q->subbands) {
|
for (i=q->js_subband_start ; i<q->subbands ; i++) {
|
||||||
for (i=0 ; i<q->subbands ; i++) {
|
cpl_tmp = cplband[i];
|
||||||
cpl_tmp = cplband[i + q->js_subband_start];
|
idx -=decouple_tab[cpl_tmp];
|
||||||
idx -=decouple_tab[cpl_tmp];
|
cplscale = (float*)cplscales[q->js_vlc_bits-2]; //choose decoupler table
|
||||||
cplscale = (float*)cplscales[q->js_vlc_bits-2]; //choose decoupler table
|
f1 = cplscale[decouple_tab[cpl_tmp]];
|
||||||
f1 = cplscale[decouple_tab[cpl_tmp]];
|
f2 = cplscale[idx-1];
|
||||||
f2 = cplscale[idx-1];
|
for (j=0 ; j<SUBBAND_SIZE ; j++) {
|
||||||
for (j=0 ; j<SUBBAND_SIZE ; j++) {
|
tmp_idx = ((q->js_subband_start + i)*20)+j;
|
||||||
tmp_idx = ((2*q->js_subband_start + i)*20)+j;
|
mlt_buffer1[20*i + j] = f1 * decode_buffer[tmp_idx];
|
||||||
mlt_buffer1[20*(i+q->js_subband_start) + j] = f1 * decode_buffer[tmp_idx];
|
mlt_buffer2[20*i + j] = f2 * decode_buffer[tmp_idx];
|
||||||
mlt_buffer2[20*(i+q->js_subband_start) + j] = f2 * decode_buffer[tmp_idx];
|
|
||||||
}
|
|
||||||
idx = (1 << q->js_vlc_bits) - 1;
|
|
||||||
}
|
}
|
||||||
|
idx = (1 << q->js_vlc_bits) - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1159,8 +1150,6 @@ static void dump_cook_context(COOKContext *q, COOKextradata *e)
|
|||||||
PRINT("numvector_bits",q->numvector_bits);
|
PRINT("numvector_bits",q->numvector_bits);
|
||||||
PRINT("numvector_size",q->numvector_size);
|
PRINT("numvector_size",q->numvector_size);
|
||||||
PRINT("total_subbands",q->total_subbands);
|
PRINT("total_subbands",q->total_subbands);
|
||||||
PRINT("frame_reorder_counter",q->frame_reorder_counter);
|
|
||||||
PRINT("frame_reorder_index_size",q->frame_reorder_index_size);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/**
|
/**
|
||||||
@ -1293,8 +1282,9 @@ static int cook_decode_init(AVCodecContext *avctx)
|
|||||||
/* Initialize transform. */
|
/* Initialize transform. */
|
||||||
if ( init_cook_mlt(q) == 0 )
|
if ( init_cook_mlt(q) == 0 )
|
||||||
return -1;
|
return -1;
|
||||||
|
#ifdef COOKDEBUG
|
||||||
//dump_cook_context(q,e);
|
dump_cook_context(q,e);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user