latmenc: fix muxing of byte-aligned DSE.

This will only work for DSEs that are first in a packet, but
that is enough to fix handling of the reference files in
fate-suite/aac (though most of them still have other issues).

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
Reimar Döffinger 2012-04-09 00:10:07 +02:00
parent 8274b21c09
commit 912a838efe
3 changed files with 21 additions and 1 deletions

View File

@ -166,8 +166,21 @@ static int latm_write_packet(AVFormatContext *s, AVPacket *pkt)
/* The LATM payload is written unaligned */
i = 0;
if (pkt->size && (pkt->data[0] & 0xe1) == 0x81) {
// Convert byte-aligned DSE to non-aligned.
// Due to the input format encoding we know that
// it is naturally byte-aligned in the input stream,
// so there are no padding bits to account for.
// To avoid having to add padding bits and rearrange
// the whole stream we just remove the byte-align flag.
// This allows us to remux our FATE AAC samples into latm
// files that are still playable with minimal effort.
put_bits(&bs, 8, pkt->data[0] & 0xfe);
i++;
}
/* PayloadMux() */
for (i = 0; i < pkt->size; i++)
for (; i < pkt->size; i++)
put_bits(&bs, 8, pkt->data[i]);
avpriv_align_put_bits(&bs);

View File

@ -139,6 +139,10 @@ if [ -n "$do_mp3" ] ; then
do_lavf_fate mp3 "mp3-conformance/he_32khz.bit" "-acodec copy"
fi
if [ -n "$do_latm" ] ; then
do_lavf_fate latm "aac/al04_44.mp4" "-acodec copy"
fi
if [ -n "$do_ogg_vp3" ] ; then
# -idct simple causes different results on different systems
DEC_OPTS="$DEC_OPTS -idct auto"

3
tests/ref/lavf-fate/latm Normal file
View File

@ -0,0 +1,3 @@
9c8d1afdb2d336976102f175ba577471 *./tests/data/lavf-fate/lavf.latm
71926 ./tests/data/lavf-fate/lavf.latm
./tests/data/lavf-fate/lavf.latm CRC=0xd846c4b3