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 468615f204.

Fixes ticket #10828, #10883.

Signed-off-by: Marton Balint <cus@passwd.hu>
(cherry picked from commit 0aaee4741c)
This commit is contained in:
Marton Balint 2024-03-01 00:09:43 +01:00
parent 3fb9425a75
commit 894bebeaf7
1 changed files with 5 additions and 2 deletions

View File

@ -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;