[FFmpeg-devel] [PATCH] asfenc: too many payloads in a packet
Aaron Graham
aaron at aarongraham.com
Tue May 13 00:38:39 CEST 2014
(Fixes ticket #3634)
https://trac.ffmpeg.org/ticket/3634
On Mon, May 12, 2014 at 3:26 PM, Aaron Graham <aaron at aarongraham.com> wrote:
> In the ASF specification:
> http://www.microsoft.com/en-us/download/details.aspx?id=14995
>
> the section on Multiple payloads (5.2.3.3) describes the bit fields used
> to specify payload length type and number of payloads. The number of
> payloads field is a 6-bit field, meaning a packet can hold a maximum of 63
> payloads.
>
> asfenc.c was not honoring this, and if more than 63 payloads would fit in
> a packet, the "number of payloads" field would overflow into the "payload
> length type" field, causing parsing errors in ffplay.
>
> You can reproduce this with any AAC file that has several seconds of
> silence in the beginning (lots of very small AAC frames). Use this ffmpeg
> command:
>
> $ ffmpeg -i silence.m4a -acodec copy silence.asf
>
> Note that ffplay will get lots of errors.
>
> Anyway, here's a patch to fix the problem:
>
> diff -ur ffmpeg-mine/libavformat/asfenc.c ffmpeg-2.2.2/libavformat/asfenc.c
> --- ffmpeg-mine/libavformat/asfenc.c 2014-05-12 15:23:12.093259469-0700
> +++ ffmpeg-2.2.2/libavformat/asfenc.c 2014-05-04 21:14:52.000000000 -0700
> @@ -34,7 +34,6 @@
>
> #define ASF_INDEXED_INTERVAL 10000000
> #define ASF_INDEX_BLOCK (1<<9)
> -#define ASF_PAYLOADS_PER_PACKET 63
>
> #define ASF_PACKET_ERROR_CORRECTION_DATA_SIZE 0x2
> #define ASF_PACKET_ERROR_CORRECTION_FLAGS \
> @@ -819,8 +818,6 @@
> flush_packet(s);
> else if (asf->packet_size_left <=
> (PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS + PACKET_HEADER_MIN_SIZE + 1))
> flush_packet(s);
> - else if (asf->packet_nb_payloads == ASF_PAYLOADS_PER_PACKET)
> - flush_packet(s);
> }
> stream->seq++;
> }
>
>
More information about the ffmpeg-devel
mailing list