[FFmpeg-cvslog] mpegts: demux synchronous SMPTE 336M Key-Length-Value (KLV) metadata
Peter Ross
git at videolan.org
Mon Oct 28 20:14:08 CET 2013
ffmpeg | branch: master | Peter Ross <pross at xvid.org> | Tue Feb 5 22:01:11 2013 +1100| [69a042ee95c60d429f6dd6473caa1a88381a4da2] | committer: Michael Niedermayer
mpegts: demux synchronous SMPTE 336M Key-Length-Value (KLV) metadata
Fixes ticket #2579.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=69a042ee95c60d429f6dd6473caa1a88381a4da2
---
libavformat/mpegts.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 5f2dfe9..c91018e 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -640,6 +640,11 @@ static const StreamType REGD_types[] = {
{ 0 },
};
+static const StreamType METADATA_types[] = {
+ { MKTAG('K','L','V','A'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_KLV },
+ { 0 },
+};
+
/* descriptor present */
static const StreamType DESC_types[] = {
{ 0x6a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 }, /* AC-3 descriptor */
@@ -1002,6 +1007,12 @@ static int mpegts_push_data(MpegTSFilter *filter,
p += sl_header_bytes;
buf_size -= sl_header_bytes;
}
+ if (pes->stream_type == 0x15 && buf_size >= 5) {
+ /* skip metadata access unit header */
+ pes->pes_header_size += 5;
+ p += 5;
+ buf_size -= 5;
+ }
if (pes->ts->fix_teletext_pts && pes->st->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT) {
AVProgram *p = NULL;
while ((p = av_find_program_from_stream(pes->stream, p, pes->st->index))) {
@@ -1489,6 +1500,15 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
case 0x52: /* stream identifier descriptor */
st->stream_identifier = 1 + get8(pp, desc_end);
break;
+ case 0x26: /* metadata descriptor */
+ if (get16(pp, desc_end) == 0xFFFF)
+ *pp += 4;
+ if (get8(pp, desc_end) == 0xFF) {
+ st->codec->codec_tag = bytestream_get_le32(pp);
+ if (st->codec->codec_id == AV_CODEC_ID_NONE)
+ mpegts_find_stream_type(st, st->codec->codec_tag, METADATA_types);
+ }
+ break;
default:
break;
}
More information about the ffmpeg-cvslog
mailing list