# HG changeset patch # User bcoudurier # Date 1231982551 0 # Node ID 3bfd8604f48038d5921eea332705c5d8c87c71cf # Parent 4162b8362ed6885188bce71bde2539af079c49ad add aud nal unit if not present in h264 bitstream diff -r 4162b8362ed6 -r 3bfd8604f480 mpegtsenc.c --- a/mpegtsenc.c Thu Jan 15 00:42:57 2009 +0000 +++ b/mpegtsenc.c Thu Jan 15 01:22:31 2009 +0000 @@ -691,6 +691,7 @@ AVStream *st = s->streams[pkt->stream_index]; int size= pkt->size; uint8_t *buf= pkt->data; + uint8_t *data= NULL; MpegTSWriteStream *ts_st = st->priv_data; int len, max_payload_size; const uint8_t *access_unit_index = NULL; @@ -720,6 +721,23 @@ break; } } + } if (st->codec->codec_id == CODEC_ID_H264) { + if (pkt->size < 5 || AV_RB32(pkt->data) != 0x0000001) { + av_log(s, AV_LOG_ERROR, "h264 bitstream malformated\n"); + return -1; + } + if (pkt->data[4] != 0x09) { // AUD NAL + data = av_malloc(pkt->size+6); + if (!data) + return -1; + memcpy(data+6, pkt->data, pkt->size); + AV_WB32(data, 0x00000001); + data[4] = 0x09; + data[5] = 0xe0; // any slice type + buf = data; + size = pkt->size+6; + } + access_unit_index = buf; } else { access_unit_index = pkt->data; } @@ -752,6 +770,9 @@ access_unit_index = NULL; // unset access unit to avoid setting pts/dts again } } + + av_free(data); + return 0; }