MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / cook_decode_init

Function cook_decode_init

libavcodec/cook.c:1082–1285  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1080 */
1081
1082static av_cold int cook_decode_init(AVCodecContext *avctx)
1083{
1084 COOKContext *q = avctx->priv_data;
1085 const uint8_t *edata_ptr = avctx->extradata;
1086 const uint8_t *edata_ptr_end = edata_ptr + avctx->extradata_size;
1087 int extradata_size = avctx->extradata_size;
1088 int s = 0;
1089 unsigned int channel_mask = 0;
1090 q->avctx = avctx;
1091
1092 /* Take care of the codec specific extradata. */
1093 if (extradata_size <= 0) {
1094 av_log(avctx,AV_LOG_ERROR,"Necessary extradata missing!\n");
1095 return -1;
1096 }
1097 av_log(avctx,AV_LOG_DEBUG,"codecdata_length=%d\n",avctx->extradata_size);
1098
1099 /* Take data from the AVCodecContext (RM container). */
1100 q->sample_rate = avctx->sample_rate;
1101 q->nb_channels = avctx->channels;
1102 q->bit_rate = avctx->bit_rate;
1103
1104 /* Initialize RNG. */
1105 av_lfg_init(&q->random_state, 0);
1106
1107 while(edata_ptr < edata_ptr_end){
1108 /* 8 for mono, 16 for stereo, ? for multichannel
1109 Swap to right endianness so we don't need to care later on. */
1110 if (extradata_size >= 8){
1111 q->subpacket[s].cookversion = bytestream_get_be32(&edata_ptr);
1112 q->subpacket[s].samples_per_frame = bytestream_get_be16(&edata_ptr);
1113 q->subpacket[s].subbands = bytestream_get_be16(&edata_ptr);
1114 extradata_size -= 8;
1115 }
1116 if (avctx->extradata_size >= 8){
1117 bytestream_get_be32(&edata_ptr); //Unknown unused
1118 q->subpacket[s].js_subband_start = bytestream_get_be16(&edata_ptr);
1119 q->subpacket[s].js_vlc_bits = bytestream_get_be16(&edata_ptr);
1120 extradata_size -= 8;
1121 }
1122
1123 /* Initialize extradata related variables. */
1124 q->subpacket[s].samples_per_channel = q->subpacket[s].samples_per_frame / q->nb_channels;
1125 q->subpacket[s].bits_per_subpacket = avctx->block_align * 8;
1126
1127 /* Initialize default data states. */
1128 q->subpacket[s].log2_numvector_size = 5;
1129 q->subpacket[s].total_subbands = q->subpacket[s].subbands;
1130 q->subpacket[s].num_channels = 1;
1131
1132 /* Initialize version-dependent variables */
1133
1134 av_log(avctx,AV_LOG_DEBUG,"subpacket[%i].cookversion=%x\n",s,q->subpacket[s].cookversion);
1135 q->subpacket[s].joint_stereo = 0;
1136 switch (q->subpacket[s].cookversion) {
1137 case MONO:
1138 if (q->nb_channels != 1) {
1139 av_log(avctx,AV_LOG_ERROR,"Container channels != 1, report sample!\n");

Callers

nothing calls this directly

Calls 10

av_logFunction · 0.85
av_lfg_initFunction · 0.85
cook_count_channelsFunction · 0.85
init_pow2tableFunction · 0.85
init_gain_tableFunction · 0.85
init_cplscales_tableFunction · 0.85
init_cook_vlc_tablesFunction · 0.85
av_malloczFunction · 0.85
init_cook_mltFunction · 0.85
dump_cook_contextFunction · 0.85

Tested by

no test coverage detected