comparison movenc.c @ 2921:dab2aecebb97 libavformat

extract isom_write_avcc into a function
author aurel
date Fri, 11 Jan 2008 01:04:01 +0000
parents 5f15ed0f5fdc
children dcd599833abc
comparison
equal deleted inserted replaced
2920:5f15ed0f5fdc 2921:dab2aecebb97
473 av_freep(buf); 473 av_freep(buf);
474 *size = url_close_dyn_buf(pb, buf); 474 *size = url_close_dyn_buf(pb, buf);
475 return 0; 475 return 0;
476 } 476 }
477 477
478 static int mov_write_avcc_tag(ByteIOContext *pb, MOVTrack *track) 478 static int isom_write_avcc(ByteIOContext *pb, uint8_t *data, int len)
479 { 479 {
480 offset_t pos = url_ftell(pb); 480 if (len > 6) {
481
482 put_be32(pb, 0);
483 put_tag(pb, "avcC");
484 if (track->vosLen > 6) {
485 /* check for h264 start code */ 481 /* check for h264 start code */
486 if (AV_RB32(track->vosData) == 0x00000001) { 482 if (AV_RB32(data) == 0x00000001) {
487 uint8_t *buf, *end; 483 uint8_t *buf=NULL, *end;
488 uint32_t sps_size=0, pps_size=0; 484 uint32_t sps_size=0, pps_size=0;
489 uint8_t *sps=0, *pps=0; 485 uint8_t *sps=0, *pps=0;
490 486
491 int ret = avc_parse_nal_units(track->vosData, &track->vosData, &track->vosLen); 487 int ret = avc_parse_nal_units(data, &buf, &len);
492 if (ret < 0) 488 if (ret < 0)
493 return ret; 489 return ret;
494 buf = track->vosData; 490 data = buf;
495 end = track->vosData + track->vosLen; 491 end = buf + len;
496 492
497 /* look for sps and pps */ 493 /* look for sps and pps */
498 while (buf < end) { 494 while (buf < end) {
499 unsigned int size; 495 unsigned int size;
500 uint8_t nal_type; 496 uint8_t nal_type;
522 put_be16(pb, sps_size); 518 put_be16(pb, sps_size);
523 put_buffer(pb, sps, sps_size); 519 put_buffer(pb, sps, sps_size);
524 put_byte(pb, 1); /* number of pps */ 520 put_byte(pb, 1); /* number of pps */
525 put_be16(pb, pps_size); 521 put_be16(pb, pps_size);
526 put_buffer(pb, pps, pps_size); 522 put_buffer(pb, pps, pps_size);
523 av_free(data);
527 } else { 524 } else {
528 put_buffer(pb, track->vosData, track->vosLen); 525 put_buffer(pb, data, len);
529 } 526 }
530 } 527 }
528 return 0;
529 }
530
531 static int mov_write_avcc_tag(ByteIOContext *pb, MOVTrack *track)
532 {
533 offset_t pos = url_ftell(pb);
534
535 put_be32(pb, 0);
536 put_tag(pb, "avcC");
537 isom_write_avcc(pb, track->vosData, track->vosLen);
531 return updateSize(pb, pos); 538 return updateSize(pb, pos);
532 } 539 }
533 540
534 /* also used by all avid codecs (dv, imx, meridien) and their variants */ 541 /* also used by all avid codecs (dv, imx, meridien) and their variants */
535 static int mov_write_avid_tag(ByteIOContext *pb, MOVTrack *track) 542 static int mov_write_avid_tag(ByteIOContext *pb, MOVTrack *track)