From: Marton Balint <cus@passwd.hu>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH 2/2] Add support for preserving SMPTE 2038 when transcoding MPEG-TS streams
Date: Thu, 16 Mar 2023 23:40:01 +0100 (CET)
Message-ID: <d4f7a214-8ef9-b972-115d-34c9ac3a803c@passwd.hu> (raw)
In-Reply-To: <20230309170405.25457-2-dheitmueller@ltnglobal.com>
On Thu, 9 Mar 2023, Devin Heitmueller wrote:
> Add the appropriate descriptors to the MPEG-TS demux and mux to
> ensure that SMPTE 2038 VANC streams are properly preserved
> when using codec copy (including adding the appropriate PMT
> descriptors).
>
> The focus of this patch is TS input to TS output. A separate
> patch adds support for output of 2038 VANC over decklink SDI.
>
> Signed-off-by: Devin Heitmueller <dheitmueller@ltnglobal.com>
> ---
> libavcodec/codec_desc.c | 6 ++++++
> libavcodec/codec_id.h | 1 +
> libavformat/mpegts.c | 1 +
> libavformat/mpegtsenc.c | 5 +++++
> libavformat/mux.c | 6 ++++--
> 5 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c
> index e80ac07700..2830fd85fa 100644
> --- a/libavcodec/codec_desc.c
> +++ b/libavcodec/codec_desc.c
> @@ -3608,6 +3608,12 @@ static const AVCodecDescriptor codec_descriptors[] = {
> .name = "klv",
> .long_name = NULL_IF_CONFIG_SMALL("SMPTE 336M Key-Length-Value (KLV) metadata"),
> },
> + {
> + .id = AV_CODEC_ID_SMPTE_2038,
> + .type = AVMEDIA_TYPE_DATA,
> + .name = "smpte_2038",
> + .long_name = NULL_IF_CONFIG_SMALL("SMPTE ST 2038 VANC in MPEG-2 TS"),
> + },
> {
> .id = AV_CODEC_ID_DVD_NAV,
> .type = AVMEDIA_TYPE_DATA,
> diff --git a/libavcodec/codec_id.h b/libavcodec/codec_id.h
> index 89a4a0cb89..d6d4b6c44c 100644
> --- a/libavcodec/codec_id.h
> +++ b/libavcodec/codec_id.h
> @@ -579,6 +579,7 @@ enum AVCodecID {
> AV_CODEC_ID_IDF,
> AV_CODEC_ID_OTF,
> AV_CODEC_ID_SMPTE_KLV,
> + AV_CODEC_ID_SMPTE_2038,
This should go to the end of the data codec list to retain ABI
compatibility. Order in codec_desc.c should be the same.
Regards,
Marton
> AV_CODEC_ID_DVD_NAV,
> AV_CODEC_ID_TIMED_ID3,
> AV_CODEC_ID_BIN_DATA,
> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
> index d97702fcd7..a8fa3c0b28 100644
> --- a/libavformat/mpegts.c
> +++ b/libavformat/mpegts.c
> @@ -866,6 +866,7 @@ static const StreamType REGD_types[] = {
> { MKTAG('E', 'A', 'C', '3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 },
> { MKTAG('H', 'E', 'V', 'C'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_HEVC },
> { MKTAG('K', 'L', 'V', 'A'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_KLV },
> + { MKTAG('V', 'A', 'N', 'C'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_2038 },
> { MKTAG('I', 'D', '3', ' '), AVMEDIA_TYPE_DATA, AV_CODEC_ID_TIMED_ID3 },
> { MKTAG('V', 'C', '-', '1'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },
> { MKTAG('O', 'p', 'u', 's'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_OPUS },
> diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
> index 3f201cce1d..0b38555362 100644
> --- a/libavformat/mpegtsenc.c
> +++ b/libavformat/mpegtsenc.c
> @@ -422,6 +422,9 @@ static int get_dvb_stream_type(AVFormatContext *s, AVStream *st)
> case AV_CODEC_ID_TIMED_ID3:
> stream_type = STREAM_TYPE_METADATA;
> break;
> + case AV_CODEC_ID_SMPTE_2038:
> + stream_type = STREAM_TYPE_PRIVATE_DATA;
> + break;
> case AV_CODEC_ID_DVB_SUBTITLE:
> case AV_CODEC_ID_DVB_TELETEXT:
> case AV_CODEC_ID_ARIB_CAPTION:
> @@ -804,6 +807,8 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
> case AVMEDIA_TYPE_DATA:
> if (codec_id == AV_CODEC_ID_SMPTE_KLV) {
> put_registration_descriptor(&q, MKTAG('K', 'L', 'V', 'A'));
> + } else if (st->codecpar->codec_id == AV_CODEC_ID_SMPTE_2038) {
> + put_registration_descriptor(&q, MKTAG('V', 'A', 'N', 'C'));
> } else if (codec_id == AV_CODEC_ID_TIMED_ID3) {
> const char *tag = "ID3 ";
> *q++ = METADATA_DESCRIPTOR;
> diff --git a/libavformat/mux.c b/libavformat/mux.c
> index 04de05ec17..0bc9b6b87d 100644
> --- a/libavformat/mux.c
> +++ b/libavformat/mux.c
> @@ -304,7 +304,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
> par->codec_tag = av_codec_get_tag(of->p.codec_tag, par->codec_id);
> }
>
> - if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT)
> + if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT &&
> + par->codec_id != AV_CODEC_ID_SMPTE_2038)
> si->nb_interleaved_streams++;
> }
> si->interleave_packet = of->interleave_packet;
> @@ -942,7 +943,8 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *pkt,
> ++stream_count;
> } else if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT &&
> par->codec_id != AV_CODEC_ID_VP8 &&
> - par->codec_id != AV_CODEC_ID_VP9) {
> + par->codec_id != AV_CODEC_ID_VP9 &&
> + par->codec_id != AV_CODEC_ID_SMPTE_2038) {
> ++noninterleaved_count;
> }
> }
> --
> 2.35.1.655.ga68dfadae5
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-03-16 22:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-09 17:04 [FFmpeg-devel] [PATCH 1/2] mpegtsenc: Restrict "async" behavior to KLV async packets Devin Heitmueller
2023-03-09 17:04 ` [FFmpeg-devel] [PATCH 2/2] Add support for preserving SMPTE 2038 when transcoding MPEG-TS streams Devin Heitmueller
2023-03-16 22:40 ` Marton Balint [this message]
2023-03-16 22:41 ` [FFmpeg-devel] [PATCH 1/2] mpegtsenc: Restrict "async" behavior to KLV async packets Marton Balint
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d4f7a214-8ef9-b972-115d-34c9ac3a803c@passwd.hu \
--to=cus@passwd.hu \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git