This is in preparation for the following patch.
Signed-off-by: James Almer <jamrial@gmail.com>
... | ... |
@@ -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); |