Browse Source

aac_latm: Align inband PCE to the start of the payload

A strict reading of the spec seems to imply that it should be aligned to
the start of the element instance tag, but that would break all of the
samples with PCEs.

It seems like a well formed LATM stream should have its PCE in the ASC
rather than inband.

Fixes ticket 4544
tags/n3.3
Alex Converse 9 years ago
parent
commit
1fce67d640
1 changed files with 4 additions and 1 deletions
  1. +4
    -1
      libavcodec/aacdec_template.c

+ 4
- 1
libavcodec/aacdec_template.c View File

@@ -2949,6 +2949,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
int err, elem_id; int err, elem_id;
int samples = 0, multiplier, audio_found = 0, pce_found = 0; int samples = 0, multiplier, audio_found = 0, pce_found = 0;
int is_dmono, sce_count = 0; int is_dmono, sce_count = 0;
int payload_alignment;


ac->frame = data; ac->frame = data;


@@ -2971,6 +2972,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
// This may lead to an undefined profile being signaled // This may lead to an undefined profile being signaled
ac->avctx->profile = ac->oc[1].m4ac.object_type - 1; ac->avctx->profile = ac->oc[1].m4ac.object_type - 1;


payload_alignment = get_bits_count(gb);
ac->tags_mapped = 0; ac->tags_mapped = 0;
// parse // parse
while ((elem_type = get_bits(gb, 3)) != TYPE_END) { while ((elem_type = get_bits(gb, 3)) != TYPE_END) {
@@ -3025,7 +3027,8 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
uint8_t layout_map[MAX_ELEM_ID*4][3]; uint8_t layout_map[MAX_ELEM_ID*4][3];
int tags; int tags;
push_output_configuration(ac); push_output_configuration(ac);
tags = decode_pce(avctx, &ac->oc[1].m4ac, layout_map, gb, 0);
tags = decode_pce(avctx, &ac->oc[1].m4ac, layout_map, gb,
payload_alignment);
if (tags < 0) { if (tags < 0) {
err = tags; err = tags;
break; break;


Loading…
Cancel
Save