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:
parent
8274b21c09
commit
912a838efe
@ -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);
|
||||
|
@ -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
3
tests/ref/lavf-fate/latm
Normal 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
|
Loading…
Reference in New Issue
Block a user