avcodec/adtsenc: check packet side data for AAC extradata updates
authorJames Almer <jamrial@gmail.com>
Wed, 24 May 2017 20:02:08 +0000 (17:02 -0300)
committerJames Almer <jamrial@gmail.com>
Wed, 24 May 2017 23:28:00 +0000 (20:28 -0300)
This is in preparation for the following patch.

Signed-off-by: James Almer <jamrial@gmail.com>
libavformat/adtsenc.c

index 5e006dd..a046c2f 100644 (file)
@@ -149,11 +149,28 @@ static int adts_write_frame_header(ADTSContext *ctx,
 static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
 {
     ADTSContext *adts = s->priv_data;
+    AVCodecParameters *par = s->streams[0]->codecpar;
     AVIOContext *pb = s->pb;
     uint8_t buf[ADTS_HEADER_SIZE];
 
     if (!pkt->size)
         return 0;
+    if (!par->extradata_size) {
+        uint8_t *side_data;
+        int side_data_size = 0, ret;
+
+        side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
+                                            &side_data_size);
+        if (side_data_size) {
+            ret = adts_decode_extradata(s, adts, side_data, side_data_size);
+            if (ret < 0)
+                return ret;
+            ret = ff_alloc_extradata(par, side_data_size);
+            if (ret < 0)
+                return ret;
+            memcpy(par->extradata, side_data, side_data_size);
+        }
+    }
     if (adts->write_adts) {
         int err = adts_write_frame_header(adts, buf, pkt->size,
                                              adts->pce_size);