[FFmpeg-cvslog] avformat/mpegts: detect synchronous metadata KLV more reliably

Marton Balint git at videolan.org
Tue Mar 19 22:32:08 EET 2024


ffmpeg | branch: release/6.1 | Marton Balint <cus at passwd.hu> | Fri Mar  1 00:09:43 2024 +0100| [894bebeaf728720415affaeab421e901fa461e78] | committer: Marton Balint

avformat/mpegts: detect synchronous metadata KLV more reliably

The mpegts code historically tries to strip (the first) metadata access unit
header from synchronous KLV metadata, but the detection for such streams was
unreliable causing strips of asynchronous metadata or ID3 as well.

MISB ST 1402 specifies required stream type, stream id and registration
descriptor (which eventually maps to the codec ID) so let's use all of these
for reliable detection.

Fixes a regression caused by 468615f2045da325e0f73e8e668d49cf456ccb37.

Fixes ticket #10828, #10883.

Signed-off-by: Marton Balint <cus at passwd.hu>
(cherry picked from commit 0aaee4741ce0c10ca09f5d17194b58d0cf0ebece)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=894bebeaf728720415affaeab421e901fa461e78
---

 libavformat/mpegts.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index c7fd1f5d1f..9babe68126 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1306,8 +1306,11 @@ skip:
                     p += sl_header_bytes;
                     buf_size -= sl_header_bytes;
                 }
-                if (pes->st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV && buf_size >= 5) {
-                    /* skip metadata access unit header */
+                if (pes->stream_type == STREAM_TYPE_METADATA &&
+                    pes->stream_id == STREAM_ID_METADATA_STREAM &&
+                    pes->st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV &&
+                    buf_size >= 5) {
+                    /* skip metadata access unit header - see MISB ST 1402 */
                     pes->pes_header_size += 5;
                     p += 5;
                     buf_size -= 5;



More information about the ffmpeg-cvslog mailing list