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

Function decode_header_trees

libavcodec/smacker.c:275–320  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

273}
274
275static int decode_header_trees(SmackVContext *smk) {
276 GetBitContext gb;
277 int mmap_size, mclr_size, full_size, type_size;
278
279 mmap_size = AV_RL32(smk->avctx->extradata);
280 mclr_size = AV_RL32(smk->avctx->extradata + 4);
281 full_size = AV_RL32(smk->avctx->extradata + 8);
282 type_size = AV_RL32(smk->avctx->extradata + 12);
283
284 init_get_bits(&gb, smk->avctx->extradata + 16, (smk->avctx->extradata_size - 16) * 8);
285
286 if(!get_bits1(&gb)) {
287 av_log(smk->avctx, AV_LOG_INFO, "Skipping MMAP tree\n");
288 smk->mmap_tbl = av_malloc(sizeof(int) * 2);
289 smk->mmap_tbl[0] = 0;
290 smk->mmap_last[0] = smk->mmap_last[1] = smk->mmap_last[2] = 1;
291 } else {
292 smacker_decode_header_tree(smk, &gb, &smk->mmap_tbl, smk->mmap_last, mmap_size);
293 }
294 if(!get_bits1(&gb)) {
295 av_log(smk->avctx, AV_LOG_INFO, "Skipping MCLR tree\n");
296 smk->mclr_tbl = av_malloc(sizeof(int) * 2);
297 smk->mclr_tbl[0] = 0;
298 smk->mclr_last[0] = smk->mclr_last[1] = smk->mclr_last[2] = 1;
299 } else {
300 smacker_decode_header_tree(smk, &gb, &smk->mclr_tbl, smk->mclr_last, mclr_size);
301 }
302 if(!get_bits1(&gb)) {
303 av_log(smk->avctx, AV_LOG_INFO, "Skipping FULL tree\n");
304 smk->full_tbl = av_malloc(sizeof(int) * 2);
305 smk->full_tbl[0] = 0;
306 smk->full_last[0] = smk->full_last[1] = smk->full_last[2] = 1;
307 } else {
308 smacker_decode_header_tree(smk, &gb, &smk->full_tbl, smk->full_last, full_size);
309 }
310 if(!get_bits1(&gb)) {
311 av_log(smk->avctx, AV_LOG_INFO, "Skipping TYPE tree\n");
312 smk->type_tbl = av_malloc(sizeof(int) * 2);
313 smk->type_tbl[0] = 0;
314 smk->type_last[0] = smk->type_last[1] = smk->type_last[2] = 1;
315 } else {
316 smacker_decode_header_tree(smk, &gb, &smk->type_tbl, smk->type_last, type_size);
317 }
318
319 return 0;
320}
321
322static av_always_inline void last_reset(int *recode, int *last) {
323 recode[last[0]] = recode[last[1]] = recode[last[2]] = 0;

Callers 1

decode_initFunction · 0.85

Calls 6

init_get_bitsFunction · 0.85
get_bits1Function · 0.85
av_logFunction · 0.85
av_mallocFunction · 0.85
AV_RL32Function · 0.50

Tested by

no test coverage detected