From patchwork Tue Aug 1 12:25:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Timmerman X-Patchwork-Id: 4567 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.85 with SMTP id 82csp3596941vsb; Tue, 1 Aug 2017 05:25:39 -0700 (PDT) X-Received: by 10.223.182.168 with SMTP id j40mr17490885wre.122.1501590339478; Tue, 01 Aug 2017 05:25:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501590339; cv=none; d=google.com; s=arc-20160816; b=bks5AZ9wQUULWO7VPGzenVB8lYshV9N5WhI53QJfTpKEWOhRI2ncM3s42lZMU7JFt9 NTzeT5a7xX1WYvk95FqCoZFD34ezbZzByqKLiRTkrrVLEtcyY8Rd9JjwqLN6lIbso4U/ jX22bct5OWdaYfXCx7Opnz/8WjtaFSgsJ4FgFDLSPhLKm1uRrM/ufc7OiITtpGFv3k9b 2Y7dDi/JrPJiWuoADOnJcMRJq9UfdS+csJtksGJKoxsEyNGV7ZUeoi3EFLhzfboLQNE7 DJH4Mk0tQU3ItMjOjB5AyE5OWTOowObTmI6m0EestwJAISd7HHFl98Bsxz6gEWSawzkK x2Ag== 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:to:message-id:date:from:mime-version :dkim-signature:delivered-to:arc-authentication-results; bh=tZqg2V206/ehPFkN3WfTlFD6fgYrn8FgMsuYjCZUGwc=; b=WN92OOpj95xA2KsJCEHzNZi9kY4RilIuidX/GwHAm2z4WlL5BAXRQ7hlTzp6Wzp4D9 dQE0R+T4/Qy88cBCujYRzMjnMp2uQazf3rBvGyjPrCUTKuPu5VvCFZvbYulL9UzPkpwb wUJVQL2YMMdzyyPDLYZMWPI4xI5Clh+oO+nS1l09UG/fZT7ymahEWgR8CnsiCstwx4O/ jT1asKe0jSCQkn0Y2qhxvF8szPK+t6W6WHd7mwpALvFTZnbM8x7b4h0bv63NI7JmWOql Clm0V/Zit5hLtPx9gAfZQAB/co3Vuzx6TtLYmtxOURZVnDPW1fBjuQVsPOUkdrzN3CP/ qNqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=efeFv4Xw; 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=NONE 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 n194si1207127wmd.29.2017.08.01.05.25.38; Tue, 01 Aug 2017 05:25:39 -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=efeFv4Xw; 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=NONE 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 D657D689F3B; Tue, 1 Aug 2017 15:25:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vk0-f45.google.com (mail-vk0-f45.google.com [209.85.213.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E1695689F3B for ; Tue, 1 Aug 2017 15:25:25 +0300 (EEST) Received: by mail-vk0-f45.google.com with SMTP id r199so5370812vke.4 for ; Tue, 01 Aug 2017 05:25:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=Hp0lk948pgP6gLjiZ03DYyGUsmjB17HI8XpDewy/tiE=; b=efeFv4XwBAKz5FcZrVZ7OkLxzz+/QPMEwzNU/0rsFpptF8zqDzwhUVVAybeva+Tn8Z 1qkhLMptIIKof5Rf3KJbV734x0JcIETazdwlbiSP7X++QRvTvpgo7ClbGmoaV5eZ9h5V lApApwiyV+pXQZKRM+z6ePV8sqOet6qMIIKBOAqP+4gHULSCWMFeqY10xz751Dl45Yd3 PgkoY5IH+7D/ZPnJddttlrgh9F2BrYg+JUHafTBUne3BnHOMqMnzEELUMf7Jqi/voa4p mRfMZ17lpUpycvghIBvVeWfxwW/JsuBbuiJ3LUZLilFWc3/OF3Y/x0R0YybK3B33iOob xJrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Hp0lk948pgP6gLjiZ03DYyGUsmjB17HI8XpDewy/tiE=; b=aO3t97wlmtq9u5zZOOC8k+CVB/QfBj6L+15ygYhznGp247YJcE74RW1mZLCFKwbXzP MG0jeuYY+OTmXuFFIjTZFruA6VUcAR3Uq18HAtFZtjCi9qlCCGOgGiqKyetfu/vsZKD+ HcEOUTrEIONYcoJfbWUIG7WMDHpT/FoEdLRtqFqaJ7BQXQKoERo79WGFTaDMI9c6ZFAp myraBiWvtN5SQvJP3f7OHzgnjPaVQkX4Pnqt03t8ohGLNHiKkVik2lSE7QsPvpQycv4e tZwX8MySv/EVRaUm30T3aANAUklXsgstOLLno0iPx6+0FULh/j/SEx/m5M4YLL1OQR9D S0qw== X-Gm-Message-State: AIVw110/aD+Qtsp91je3A7WCUHYRjiJI4hTt3spreAa4HBTEDyQ00uwt +pQg/GhbaRal9L2l19rIm4uNbRFuJLcngnYPkA== X-Received: by 10.31.77.67 with SMTP id a64mr12655963vkb.186.1501590327259; Tue, 01 Aug 2017 05:25:27 -0700 (PDT) MIME-Version: 1.0 Received: by 10.176.28.83 with HTTP; Tue, 1 Aug 2017 05:25:26 -0700 (PDT) From: Mark Timmerman Date: Tue, 1 Aug 2017 14:25:26 +0200 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH] mpegtsenc add synchronous metadata X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" Add synchronous metadata to mpegtsenc * Added AV_CODEC_ID_SYNCHRONOUS_METADATA * PMT will have metadata_descriptor and metadata_std_descriptor in accordance with MISB ST 1402.2 * stream_type will be 0x15 metadata carried in PES packets * stream_id will be 0xfc metadata stream Users must supply Metadata Access Unit to the packet before writing. --- libavcodec/avcodec.h | 1 + libavformat/mpegtsenc.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) default: @@ -641,6 +642,27 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) *q++ = 'L'; *q++ = 'V'; *q++ = 'A'; + } else if (st->codecpar->codec_id == AV_CODEC_ID_SYNCHRONOUS_METADATA) { + const char *tag = "KLVA"; + *q++ = 0x26; /* desctiptor_tag = metadata_descriptor */ + *q++ = 9; /* desctiptor_length */ + put16(&q, 0x0100); /* metadata application format */ + *q++ = 0xff; /* metadata format */ + putstr8(&q, tag, 0); + *q++ = 0; /* metadata service ID */ + *q++ = 0xF; /* decoder_config_flags|DSM-CC flag|reserved */ + + *q++ = 0x27; /* desctiptor_tag = metadata_std_descriptor */ + *q++ = 9; /* desctiptor_length */ + *q++ = 0xc0; + *q++ = 0x00; + *q++ = 0x00; + *q++ = 0xc0; + *q++ = 0x00; + *q++ = 0x00; + *q++ = 0xc0; + *q++ = 0x00; + *q++ = 0x00; } else if (st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) { const char *tag = "ID3 "; *q++ = 0x26; /* metadata descriptor */ diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index c594993..fe4e538 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -682,6 +682,7 @@ enum AVCodecID { AV_CODEC_ID_DVD_NAV, AV_CODEC_ID_TIMED_ID3, AV_CODEC_ID_BIN_DATA, + AV_CODEC_ID_SYNCHRONOUS_METADATA, AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index fdfa544..35907da 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -387,6 +387,7 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) stream_type = STREAM_TYPE_PRIVATE_DATA; break; case AV_CODEC_ID_TIMED_ID3: + case AV_CODEC_ID_SYNCHRONOUS_METADATA: stream_type = STREAM_TYPE_METADATA; break;