int samples_per_channel;
int samples_per_frame;
int subbands;
- int numvector_bits;
- int numvector_size; //1 << numvector_bits;
+ int log2_numvector_size;
+ int numvector_size; //1 << log2_numvector_size;
int js_subband_start;
int total_subbands;
int num_vectors;
int i;
q->pow2tab[63] = 1.0;
for (i=1 ; i<64 ; i++){
- q->pow2tab[63+i]=(float)pow(2.0,(double)i);
- q->pow2tab[63-i]=1.0/(float)pow(2.0,(double)i);
+ q->pow2tab[63+i]=(float)((uint64_t)1<<i);
+ q->pow2tab[63-i]=1.0/(float)((uint64_t)1<<i);
}
}
int i;
q->rootpow2tab[63] = 1.0;
for (i=1 ; i<64 ; i++){
- q->rootpow2tab[63+i]=sqrt((float)powf(2.0,(float)i));
- q->rootpow2tab[63-i]=sqrt(1.0/(float)powf(2.0,(float)i));
+ q->rootpow2tab[63+i]=sqrt((float)((uint64_t)1<<i));
+ q->rootpow2tab[63-i]=sqrt(1.0/(float)((uint64_t)1<<i));
}
}
memset(&category_index, 0, 128*sizeof(int));
decode_envelope(q, quant_index_table);
- q->num_vectors = get_bits(&q->gb,q->numvector_bits);
+ q->num_vectors = get_bits(&q->gb,q->log2_numvector_size);
dequant_envelope(q, quant_index_table, quant_value_table);
categorize(q, quant_index_table, category, category_index);
expand_category(q, category, category_index);
* @param inbuffer pointer to the inbuffer
* @param sub_packet_size subpacket size
* @param outbuffer pointer to the outbuffer
- * @param pos the subpacket number in the frame
*/
return avctx->block_align;
}
+
#ifdef COOKDEBUG
static void dump_cook_context(COOKContext *q, COOKextradata *e)
{
PRINT("random_state",q->random_state);
PRINT("mlt_size",q->mlt_size);
PRINT("js_subband_start",q->js_subband_start);
- PRINT("numvector_bits",q->numvector_bits);
+ PRINT("log2_numvector_size",q->log2_numvector_size);
PRINT("numvector_size",q->numvector_size);
PRINT("total_subbands",q->total_subbands);
}
#endif
+
/**
* Cook initialization
*
/* Initialize default data states. */
q->js_subband_start = 0;
- q->numvector_bits = 5;
+ q->log2_numvector_size = 5;
q->total_subbands = q->subbands;
/* Initialize version-dependent variables */
q->js_vlc_bits = e->js_vlc_bits;
}
if (q->samples_per_channel > 256) {
- q->numvector_bits++; // q->numvector_bits = 6
+ q->log2_numvector_size = 6;
}
if (q->samples_per_channel > 512) {
- q->numvector_bits++; // q->numvector_bits = 7
+ q->log2_numvector_size = 7;
}
break;
case MC_COOK:
/* Initialize variable relations */
q->mlt_size = q->samples_per_channel;
- q->numvector_size = (1 << q->numvector_bits);
+ q->numvector_size = (1 << q->log2_numvector_size);
/* Generate tables */
init_rootpow2table(q);
if (init_cook_vlc_tables(q) != 0)
return -1;
+
+ if(avctx->block_align >= UINT_MAX/2)
+ return -1;
+
/* Pad the databuffer with FF_INPUT_BUFFER_PADDING_SIZE,
this is for the bitstreamreader. */
if ((q->decoded_bytes_buffer = av_mallocz((avctx->block_align+(4-avctx->block_align%4) + FF_INPUT_BUFFER_PADDING_SIZE)*sizeof(uint8_t))) == NULL)
av_log(NULL,AV_LOG_ERROR,"subbands > 50, report sample!\n");
return -1;
}
+ if ((q->samples_per_channel == 256) || (q->samples_per_channel == 512) || (q->samples_per_channel == 1024)) {
+ } else {
+ av_log(NULL,AV_LOG_ERROR,"unknown amount of samples_per_channel = %d, report sample!\n",q->samples_per_channel);
+ return -1;
+ }
#ifdef COOKDEBUG
dump_cook_context(q,e);