From patchwork Fri Oct 6 11:37:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Timmerman X-Patchwork-Id: 5435 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp359456jah; Fri, 6 Oct 2017 04:45:34 -0700 (PDT) X-Received: by 10.28.170.208 with SMTP id t199mr1647045wme.4.1507290334634; Fri, 06 Oct 2017 04:45:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507290334; cv=none; d=google.com; s=arc-20160816; b=XnqLUR0dN0r1Ao8QlxVq6nSlWv6w//MciizPg8ZZXMGDYLLKrmLhkFmX/X0pQ4GTf9 1RqwiF0X9bMkbK9TFeULkMzamMenERV74PHHKgQ9GX+IJP4lzXwoRPFIknWIChVEIIpz JIWCjBTXbMO+EgdPyCCu5xcjeDjK3BcRXuz5lyRgoO/Y8F9LFKzitGdnvX2JgT9G2FdA 9YLSh/cq3jDkMKaVaBuVvqIQ1X/3/JzZypBu56bOTYosoaz66RlrkV0MHn5yxw1MBjY2 kLAaJFDK3IWI/vKLjEqtmCcq9hXSfkaZuLz/UBppmDX7vDKzW17hchmPh8Q+3cLz0O4v y18A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to: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=isYVMosVIsLK/IE3SQQ3TV4R3zFiLX7oR1WhxJH0hBs=; b=TQNjRB5hY7YA5ZoNfnTnFQo9eMdVeHbIWAv1t1XnTc6z1qKIf3GouS8JcHf2myGGiL 0OnP8xp5N5C/0eXWatQsXxueBSqVouUDt+BCVXqMXzstTP6Pmjn02pzxD3k4RskGpGLC XgVDP7GY1Jxe88AOyRhwkwuVE5WyhSWur00OHJH21qV08HyVnElh6tS8EggX5MLsNEZK vHFGNxXVlshX+Dt35t17JJqFjxh/g7nxPpTOeJVt5EAnaZPiD6fnLVOiw6HoZlAFev3v w80rhW5q+M5SIelSppGceKnq98pfQPy/yg3ZC2bQSxusg1WS+gvWaYZ81EbpujlNOUBM uMwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=islsDT93; 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 e37si1193325wre.72.2017.10.06.04.45.34; Fri, 06 Oct 2017 04:45:34 -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=islsDT93; 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 1C17568A490; Fri, 6 Oct 2017 14:45:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f176.google.com (mail-wr0-f176.google.com [209.85.128.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A60968A3C6 for ; Fri, 6 Oct 2017 14:45:26 +0300 (EEST) Received: by mail-wr0-f176.google.com with SMTP id z1so4050584wre.3 for ; Fri, 06 Oct 2017 04:45:26 -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=iEKZFWO6Wq+qMKLfkjd4fgIjzAy7QuLJLnhZbhSydXU=; b=islsDT93OkW+6h3dfgB01+L3IJ1mW5eLeKgss4PXEbABIIdVltbC0SL2RrzhXr1+47 zUIeIymOnEQw+T6okeO9Aj12ChhSMLoBY8sBB2f6ydNU6cJ3rB9zJroOS9Cst+STM9iY PuXH7SRM9x3WxLzREYEbz5apYOujDLFf67i4jTw41fy5CUmhD01hWNFiy6J8c2lEC/9y bZFvIGRH/kQRn5MIEzwzJSXmd9Gaum1IA5dCsCCb9YNzROyVORep9pWuA99cSybygjUr 3U+iugXfmbdbMmFnCV5oHhr8LvVOxgxP0hNeStMndmXIIQgVrXgpZwVzVwUauh/AaEWa jnpA== 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=iEKZFWO6Wq+qMKLfkjd4fgIjzAy7QuLJLnhZbhSydXU=; b=DJwAYTyz7+RdMLN3d6vD2lgylVyVOuVe4MX0FFeLiUZS8DHFwy5MqcgkPZP5ivppVg 6C+krg+AzWM0GcK/fnxp2styIcPOMm8r1Na35g0AkN+ib08efxPOqWPVapi2XKlo2GJo N+M8DIqrrdsqFiwGpNP3BN0Xo4iCqDdV/EncHqKqOZA/uquP8CW355xbHz1g69dctz8Q ecrtOvi2csPe+elc190GTliUAgnffKRpDXG4WCZv8zvFwcQOAewNWaNbSCSFkvp8Dfk8 zYRc2KOXG/U5O5HZlS9ehcecuS/t1OT95tmUGu3QRegtZ9jMzmvSwIwFtInYwfyF9Eg2 PFsw== X-Gm-Message-State: AMCzsaWyIK2Sm30ZYKQ2Va6z1M5MG1t62xzXKo7US69tu1mIwLHlYFHr 87NJkkP7Y3UBXNpDL+HIRFouQYKXlcVhAa+ogsrGLA== X-Google-Smtp-Source: AOwi7QBMPWZnuOU9R36d4zD9AlFp5HBVhXGvvNseeyEGAqjgmwCJZfL2LhRvtvvaIdUFJYLCp3iUUW8sJBn1IUkSJ50= X-Received: by 10.223.158.145 with SMTP id a17mr1946345wrf.47.1507289860881; Fri, 06 Oct 2017 04:37:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.184.75 with HTTP; Fri, 6 Oct 2017 04:37:40 -0700 (PDT) From: Mark Timmerman Date: Fri, 6 Oct 2017 13:37:40 +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 + libavcodec/codec_desc.c | 6 ++++++ libavformat/mpegtsenc.c | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 52cc5b0..fb43182 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -683,6 +683,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/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index 6a13bbb..0ec6872 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -3114,6 +3114,12 @@ static const AVCodecDescriptor codec_descriptors[] = { .name = "scte_35", .long_name = NULL_IF_CONFIG_SMALL("SCTE 35 Message Queue"), }, + { + .id = AV_CODEC_ID_SYNCHRONOUS_METADATA, + .type = AVMEDIA_TYPE_DATA, + .name = "sync_metadata", + .long_name = NULL_IF_CONFIG_SMALL("ISO/IEC 13818-1 Synchronous Metadata"), + }, /* deprecated codec ids */ }; 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; 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 */ -- 2.7.4