Browse code

avcodec/adtsenc: check packet side data for AAC extradata updates

This is in preparation for the following patch.

Signed-off-by: James Almer <jamrial@gmail.com>

James Almer authored on 2017/05/25 05:02:08
Showing 1 changed files
... ...
@@ -149,11 +149,28 @@ static int adts_write_frame_header(ADTSContext *ctx,
149 149
 static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
150 150
 {
151 151
     ADTSContext *adts = s->priv_data;
152
+    AVCodecParameters *par = s->streams[0]->codecpar;
152 153
     AVIOContext *pb = s->pb;
153 154
     uint8_t buf[ADTS_HEADER_SIZE];
154 155
 
155 156
     if (!pkt->size)
156 157
         return 0;
158
+    if (!par->extradata_size) {
159
+        uint8_t *side_data;
160
+        int side_data_size = 0, ret;
161
+
162
+        side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
163
+                                            &side_data_size);
164
+        if (side_data_size) {
165
+            ret = adts_decode_extradata(s, adts, side_data, side_data_size);
166
+            if (ret < 0)
167
+                return ret;
168
+            ret = ff_alloc_extradata(par, side_data_size);
169
+            if (ret < 0)
170
+                return ret;
171
+            memcpy(par->extradata, side_data, side_data_size);
172
+        }
173
+    }
157 174
     if (adts->write_adts) {
158 175
         int err = adts_write_frame_header(adts, buf, pkt->size,
159 176
                                              adts->pce_size);