Originally committed as revision 16626 to svn://svn.ffmpeg.org/ffmpeg/trunk
Baptiste Coudurier authored on 2009/01/16 10:22:30... | ... |
@@ -309,6 +309,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) |
309 | 309 |
FLVContext *flv = s->priv_data; |
310 | 310 |
unsigned ts; |
311 | 311 |
int size= pkt->size; |
312 |
+ uint8_t *data= NULL; |
|
312 | 313 |
int flags, flags_size; |
313 | 314 |
|
314 | 315 |
// av_log(s, AV_LOG_DEBUG, "type:%d pts: %"PRId64" size:%d\n", enc->codec_type, timestamp, size); |
... | ... |
@@ -341,6 +342,11 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) |
341 | 341 |
} |
342 | 342 |
|
343 | 343 |
if (enc->codec_id == CODEC_ID_H264) { |
344 |
+ /* check if extradata looks like mp4 formated */ |
|
345 |
+ if (enc->extradata_size > 0 && *(uint8_t*)enc->extradata != 1) { |
|
346 |
+ if (ff_avc_parse_nal_units_buf(pkt->data, &data, &size) < 0) |
|
347 |
+ return -1; |
|
348 |
+ } |
|
344 | 349 |
if (!flv->delay && pkt->dts < 0) |
345 | 350 |
flv->delay = -pkt->dts; |
346 | 351 |
} |
... | ... |
@@ -361,17 +367,16 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) |
361 | 361 |
put_byte(pb,1); // AVC NALU |
362 | 362 |
put_be24(pb,pkt->pts - pkt->dts); |
363 | 363 |
} |
364 |
- if (enc->codec_id == CODEC_ID_H264 && |
|
365 |
- /* check if extradata looks like mp4 formated */ |
|
366 |
- enc->extradata_size > 0 && *(uint8_t*)enc->extradata != 1) { |
|
367 |
- ff_avc_parse_nal_units(pb, pkt->data, pkt->size); |
|
368 |
- } else { |
|
369 |
- put_buffer(pb, pkt->data, size); |
|
370 |
- } |
|
364 |
+ |
|
365 |
+ put_buffer(pb, data ? data : pkt->data, size); |
|
366 |
+ |
|
371 | 367 |
put_be32(pb,size+flags_size+11); // previous tag size |
372 | 368 |
flv->duration = FFMAX(flv->duration, pkt->pts + flv->delay + pkt->duration); |
373 | 369 |
|
374 | 370 |
put_flush_packet(pb); |
371 |
+ |
|
372 |
+ av_free(data); |
|
373 |
+ |
|
375 | 374 |
return 0; |
376 | 375 |
} |
377 | 376 |
|