# HG changeset patch # User bcoudurier # Date 1242009029 0 # Node ID fa21da521576b800e5064d700dc30198ed7fb502 # Parent 7d8344d28ab945fc219640c512d9c23f06ba9531 write a single pes for video frames, some proprietary player needs it diff -r 7d8344d28ab9 -r fa21da521576 mpegtsenc.c --- a/mpegtsenc.c Sun May 10 20:41:01 2009 +0000 +++ b/mpegtsenc.c Mon May 11 02:30:29 2009 +0000 @@ -619,6 +619,8 @@ len = payload_size + header_len + 3; if (private_code != 0) len++; + if (len > 0xffff) + len = 0; *q++ = len >> 8; *q++ = len; val = 0x80; @@ -709,31 +711,7 @@ } ts_st->first_pts_check = 0; - if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) { - /* for subtitle, a single PES packet must be generated */ - mpegts_write_pes(s, st, buf, size, pts, AV_NOPTS_VALUE); - return 0; - } - - if (st->codec->codec_id == CODEC_ID_DIRAC) { - /* for Dirac, a single PES packet must be generated */ - mpegts_write_pes(s, st, buf, size, pts, dts); - return 0; - } - - if (st->codec->codec_id == CODEC_ID_MPEG2VIDEO || - st->codec->codec_id == CODEC_ID_MPEG1VIDEO) { - const uint8_t *p = pkt->data; - const uint8_t *end = pkt->data+pkt->size; - uint32_t state = -1; - while (p < end) { - p = ff_find_start_code(p, end, &state); - if (state == PICTURE_START_CODE) { - access_unit_index = p - 4; - break; - } - } - } if (st->codec->codec_id == CODEC_ID_H264) { + 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; @@ -759,6 +737,14 @@ return -1; } + if (st->codec->codec_type == CODEC_TYPE_SUBTITLE || + st->codec->codec_type == CODEC_TYPE_VIDEO) { + // for video and subtitle, write a single pes packet + mpegts_write_pes(s, st, buf, size, pts, dts); + return 0; + } + + // audio while (size > 0) { len = DEFAULT_PES_PAYLOAD_SIZE - ts_st->payload_index; if (len > size)