From patchwork Mon Jun 7 17:09:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 28128 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp3663574iof; Mon, 7 Jun 2021 10:18:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzaoI1KFJCcBJT1E9RBVgT0CfDLTbua/4ONQoikyXow9khfjvz0uuVXwghL2NWDAtEDlivl X-Received: by 2002:a50:fd0a:: with SMTP id i10mr21366157eds.78.1623086282294; Mon, 07 Jun 2021 10:18:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623086282; cv=none; d=google.com; s=arc-20160816; b=muZTRdRPi4FKt+E4DfcK2IM1uvhEhl46XD3InaY8R5vnysDU4QN19g7mIIjm/3VFeX YehEjP9iXWLQ2yIwPdl69tAvTpFGSxR1HqZACloM++v+cO2KPAZAWfX0k2HxVuNpD1CL M5nVZoz8jE10/5odiBhY+Gw2IESdz5PsXXZftpylwq9uvmIJJiXrTbTefgz+MRlfV/za p+mBJ+ZXzBJTJb1eckHtDOjUduIecNxDxzweGcMLhZCoc6Xk/YvsRPNOx8i09j6NihSx d1zNBTfO+lyQqIDh8p8m8nnOTSMpNJMzhk7uzx3z8gs7BCBmQP5kvpDTz2Uy0QjNRpjy pdBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=7fij16rB3JXLNL1fZfMRfJbxtan4x17HvFb8Pv1L/CM=; b=bIUDSKu6p2TsRJm3fhjeRcWKhJkI1aQXTbsCjs1szHmuGqb8LEPJOJovHB4bR9Pipm xLF55Zlzy2jWSlDOAEg/DCib88uechM17symO24n45GoGKboSpJO80KkXHiFeR5tiuEM 6KxN/Ov3fkOLMyTkxZjKuyscWEnlWq+HjXfMtepNED433O648H5U3Jd9vKPV/a5gqwtW PuuqIVkMiUwlX1Q2ftyuQD4JwznS4Stjwf1kXFoySeG2OIQhNQutLgCUWlYuCuhZHNtF BD/MkWczZGmLEE+wWZz0qs/kDrt5HL0JfQiH4fWGsOfDKWhkShUGdLb+YDGKchfFjbzw Genw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="Okd/xz7n"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f2si7039430edu.428.2021.06.07.10.18.01; Mon, 07 Jun 2021 10:18:02 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="Okd/xz7n"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 690786806F7; Mon, 7 Jun 2021 20:17:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2CA966801D3 for ; Mon, 7 Jun 2021 20:17:52 +0300 (EEST) Received: by mail-lj1-f177.google.com with SMTP id e2so23274801ljk.4 for ; Mon, 07 Jun 2021 10:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=aY7yIF448GQMMk9j+e4jPm5QYh5lLdeAcPhOLfy2O5A=; b=Okd/xz7nyJQGPCNKRWT73FoGE/n4sFquvfTkZnNlVYHrGM9FpwacCymvaQya6ZAQKt ioy22JQTL8xXR2KdNjLwWsqUOlT1KQWuKngmWhyZZPfT03lFAMsTtkjVwcWsPYnLoYfy NH+JWk3IIZPAE8Bi65Z6fCPrNkIgxdzsn81pulU9/Tr57/kjoasy5GeRZdD6QdNNMl3/ CMMDkrGxiKdOLVFu4e1Usc1iIR5T4A/hapVkH/SV+HBeq4n87Vyi4fk4363sdLx6K12v HCCKqWM2CS5CIIH8MjxEs3WpHmbt11JTdt5OcbuMFN+HKSw2UiR+3rD37aeH0VaVPZG4 qOKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=aY7yIF448GQMMk9j+e4jPm5QYh5lLdeAcPhOLfy2O5A=; b=HlwRlR74qq/gRFG1G2E0rTVd96R3MFrsyfFLo+yoRr6+sRI1p+brOC8pak/aiIlSgl W1s8EGW+HFsf8EUKHqS3Ptc5Q8nCa2uYtQIBJphaXzLYWnMyja+8XYYojI0V4FzFajx3 U3EKwxhKrIr6E67M4dRDRBUH6LiqE0mqSxmZqPsIKLynh+XZzoWm1r9OLYO2b8IeRbZc 8SApcQ2KCWcH5l3wzxkSMscxkqjdWOhLDbbMiskHlT/MbPnnZocKm6RgTJnuN5nlu9v4 2nE7CNTcIZI33mrisqrbb6lyuAiLTQrcmIoqbkhQfqXk5VLhfgPiFVDQLd7iNw7LfIp0 cv5Q== X-Gm-Message-State: AOAM533of0D3C7UDG4nrIBbGv+uI+vBgtmX4iu6p5FWchz7EtehkGWr/ e0MtZ/J+jOlwFFrgDyEWLl5d1dWufJs= X-Received: by 2002:a2e:9c85:: with SMTP id x5mr8949464lji.78.1623085797884; Mon, 07 Jun 2021 10:09:57 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id h2sm239518lfv.288.2021.06.07.10.09.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Jun 2021 10:09:57 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Jun 2021 20:09:52 +0300 Message-Id: <20210607170952.8944-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4] avformat/mpegtsenc: enable muxing of ARIB captions X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kvsDW1Xbhuom From: zheng qian Writes a general ARIB stream identifier descriptor, as well as a data component descriptor which also includes a pre-defined additional_arib_caption_info structure. Signed-off-by: zheng qian --- libavformat/mpegtsenc.c | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 04af6da2db..98dac17994 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -287,6 +287,50 @@ static void putbuf(uint8_t **q_ptr, const uint8_t *buf, size_t len) *q_ptr += len; } +static int put_arib_caption_descriptor(AVFormatContext *s, uint8_t **q_ptr, + AVCodecParameters *codecpar) +{ + uint8_t stream_identifier; + uint16_t data_component_id; + uint8_t *q = *q_ptr; + + switch (codecpar->profile) { + case FF_PROFILE_ARIB_PROFILE_A: + stream_identifier = 0x30; + data_component_id = 0x0008; + break; + case FF_PROFILE_ARIB_PROFILE_C: + stream_identifier = 0x87; + data_component_id = 0x0012; + break; + default: + av_log(s, AV_LOG_ERROR, + "Unset/unknown ARIB caption profile %d utilized!\n", + codecpar->profile); + return AVERROR_INVALIDDATA; + } + + // stream_identifier_descriptor + *q++ = 0x52; // descriptor_tag + *q++ = 1; // descriptor_length + *q++ = stream_identifier; // component_tag: stream_identifier + + // data_component_descriptor, defined in ARIB STD-B10, part 2, 6.2.20 + *q++ = 0xFD; // descriptor_tag: ARIB data coding type descriptor + *q++ = 3; // descriptor_length + put16(&q, data_component_id); // data_component_id + // additional_arib_caption_info: defined in ARIB STD-B24, fascicle 1, Part 3, 9.6.1 + // Here we utilize a pre-defined set of values defined in ARIB TR-B14, + // Fascicle 2, 4.2.8.5 for PMT usage, with the reserved bits in the middle + // set to 1 (as that is what every broadcaster seems to be doing in + // production). + *q++ = 0x3D; // DMF('0011'), Reserved('11'), Timing('01') + + *q_ptr = q; + + return 0; +} + static void put_registration_descriptor(uint8_t **q_ptr, uint32_t tag) { uint8_t *q = *q_ptr; @@ -369,6 +413,7 @@ static int get_dvb_stream_type(AVFormatContext *s, AVStream *st) break; case AV_CODEC_ID_DVB_SUBTITLE: case AV_CODEC_ID_DVB_TELETEXT: + case AV_CODEC_ID_ARIB_CAPTION: stream_type = STREAM_TYPE_PRIVATE_DATA; break; case AV_CODEC_ID_SMPTE_KLV: @@ -726,6 +771,9 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) } *len_ptr = q - len_ptr - 1; + } else if (codec_id == AV_CODEC_ID_ARIB_CAPTION) { + if (put_arib_caption_descriptor(s, &q, st->codecpar) < 0) + break; } break; case AVMEDIA_TYPE_VIDEO: