[FFmpeg-devel] [PATCH] latmenc: Check for LOAS sync word

James Almer jamrial at gmail.com
Wed Jan 16 09:43:03 CET 2013


On 15/01/13 10:34 PM, Michael Niedermayer wrote:
> you can check extradata
> as a sideeffect it would fix the crash
> with the right (well wrong) data the current patch not fix the crash

How about the attached patch? (It still needs reindentation)
If there's no extradata then the packet is either LOAS or ADTS, and it should be
used if it's the former or discarded if it's anything else.

This also prevents potential misdetection of raw packets as ADTS packets, since 
the check was on the first 3 bytes as well and without checking if there was any
extradata available.

Regards.
-------------- next part --------------
>From dc95954687b24faf19284fa39d5cb34ce5863741 Mon Sep 17 00:00:00 2001
From: James Almer <jamrial at gmail.com>
Date: Wed, 16 Jan 2013 05:21:55 -0300
Subject: [PATCH] latmenc: Check for LOAS sync word

Write the packet unaltered if found.

Fixes ticket #1917

Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavformat/latmenc.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/libavformat/latmenc.c b/libavformat/latmenc.c
index 233eab8..d6bdf62 100644
--- a/libavformat/latmenc.c
+++ b/libavformat/latmenc.c
@@ -152,8 +152,14 @@ static int latm_write_packet(AVFormatContext *s, AVPacket *pkt)
     if (s->streams[0]->codec->codec_id == AV_CODEC_ID_AAC_LATM)
         return ff_raw_write_packet(s, pkt);
 
-    if (pkt->size > 2 && pkt->data[0] == 0xff && (pkt->data[1] >> 4) == 0xf) {
+    if (!s->streams[0]->codec->extradata) {
+        if (pkt->size > 2 && pkt->data[0] == 0x56 && (pkt->data[1] >> 4) == 0xe &&
+            (AV_RB16(pkt->data + 1) & 0x1FFF) + 3 == pkt->size)
+            return ff_raw_write_packet(s, pkt);
+
+    if (pkt->size > 2 && pkt->data[0] == 0xff && (pkt->data[1] >> 4) == 0xf)
         av_log(s, AV_LOG_ERROR, "ADTS header detected - ADTS will not be incorrectly muxed into LATM\n");
+
         return AVERROR_INVALIDDATA;
     }
     if (pkt->size > 0x1fff)
-- 
1.8.0.msysgit.0



More information about the ffmpeg-devel mailing list