From patchwork Sun Aug 21 08:44:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Sabatini X-Patchwork-Id: 231 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp1177967vsd; Sun, 21 Aug 2016 01:44:53 -0700 (PDT) X-Received: by 10.28.24.5 with SMTP id 5mr10955962wmy.6.1471769093851; Sun, 21 Aug 2016 01:44:53 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x206si11281593wmg.67.2016.08.21.01.44.53; Sun, 21 Aug 2016 01:44:53 -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; 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 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 EBAD4689CB5; Sun, 21 Aug 2016 11:44:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 71266689B18 for ; Sun, 21 Aug 2016 11:44:29 +0300 (EEST) Received: by mail-wm0-f68.google.com with SMTP id i5so9057371wmg.2 for ; Sun, 21 Aug 2016 01:44:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:mail-followup-to:references :mime-version:content-disposition:in-reply-to:user-agent; bh=0B8KLugJjYNEAv+zsEwU/zEx22BQW3wibQsYuFxaYkc=; b=ZFXyrbeQHnXWfqZO4Lw6RTTo6860aCpg35pNWWWZ7h8qC5YyIQAPj1CdfMT/rqYwjo KNM6R4dSuZQH+gYvPlLKqYvPFskGg3htadU/tYvFkldHpxVAVYslTwguo1z9qJrT0rwF c77HRi8/gvTRbcBCgEDLYfS3o2Jd90BkivRwoAdm7mKRY9+p4xPmhjRpivdAzJvL5FSR 8A6IodnSL+0LA8jJqFnOMHivewwuGzlpCrrE+gLW5+5WH2NNK0GEzBKRGYxWh/1yUKxr aowZzGWUldksQEDG6pXmgyewyBVamFSMmrADxDBvc3ecJKp77tUE9JOCYGhYNcP6xVqA 3t5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:mail-followup-to :references:mime-version:content-disposition:in-reply-to:user-agent; bh=0B8KLugJjYNEAv+zsEwU/zEx22BQW3wibQsYuFxaYkc=; b=j6ZbMWjE7xEG5xe0TGx0LFOLZHA5pRl1EGonE9fOKzlAbk2CZfVtDEu5fdxrTNcvuG HBvYs69/gCLuU3VVyiog9aKp9BBzRfPdn7g11jK7VVbztnUct+YZkCarE2K0z6Sihm2p EfMIOz5nT+1GOtFpESHzRhmbDHfRu0pdwYDfR/RrUWhHDof6gLqwvb5ZnNKGMmdutzc8 jPJX18qHXAhQ3FovCHIPozZLwbXZVL5KwCe/alOrj3waeKyDkdd7ENaOuoyghf1l6ODl yATUWvigmP7u2EtgX9Y6Y75gyit0kEvUDR8Bc8lHG7dallEYo9CFkJVRxmMnQ3ei9zHI 9Csg== X-Gm-Message-State: AEkoouvJCo42/jZZ13wcNgJTgeOsOrfnCs8itd8SFQkujg4Y0j3A1XiGwd5Bu4sBa9mwVw== X-Received: by 10.28.145.137 with SMTP id t131mr11380211wmd.110.1471769069965; Sun, 21 Aug 2016 01:44:29 -0700 (PDT) Received: from barisone (host245-114-dynamic.48-82-r.retail.telecomitalia.it. [82.48.114.245]) by smtp.gmail.com with ESMTPSA id lv9sm16575083wjb.22.2016.08.21.01.44.28 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 21 Aug 2016 01:44:29 -0700 (PDT) Received: by barisone (Postfix, from userid 1000) id 32A211A834F; Sun, 21 Aug 2016 10:44:27 +0200 (CEST) Date: Sun, 21 Aug 2016 10:44:27 +0200 From: Stefano Sabatini To: FFmpeg development discussions and patches Message-ID: <20160821084427.GC31228@barisone> Mail-Followup-To: FFmpeg development discussions and patches References: <1463676335-8188-1-git-send-email-stefasab@gmail.com> <20160820134835.GA31228@barisone> <20160820165752.GV5460@nb4> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20160820165752.GV5460@nb4> User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [FFmpeg-devel] [PATCH] lavf/mpegtsenc: write metadata descriptor for timed ID3 packets 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" On date Saturday 2016-08-20 18:57:52 +0200, Michael Niedermayer encoded: > On Sat, Aug 20, 2016 at 03:48:35PM +0200, Stefano Sabatini wrote: > > On date Thursday 2016-05-19 18:45:35 +0200, Stefano Sabatini encoded: > > > This is required since some softwares are not able to correctly recognize > > > the metadata. > > > --- > > > libavformat/mpegtsenc.c | 24 ++++++++++++++---------- > > > 1 file changed, 14 insertions(+), 10 deletions(-) > > > > Updated, with some more documentation and references to the MPEGTS > > standard. > > > > Note: this patch was created comparing the output of FFmpeg with those > > from encoding.com and elemental. With the change the output metadata > > can be read by third-party players. > > > > If the maintainers prefer, I can enable this output mode through a > > flag. > > -- > > FFmpeg = Fiendish & Fiendish Mastering Purposeless Egregious Goblin > > > mpegtsenc.c | 24 ++++++++++++++---------- > > 1 file changed, 14 insertions(+), 10 deletions(-) > > 3a6655bca70653c64bfb5f2073d01feee73e64c2 0003-lavf-mpegtsenc-write-metadata-descriptor-for-timed-I.patch > > From 20f22c426a9f5c59d28f66a17b59d62301503d67 Mon Sep 17 00:00:00 2001 > > From: Stefano Sabatini > > Date: Tue, 12 Apr 2016 18:16:21 +0200 > > Subject: [PATCH] lavf/mpegtsenc: write metadata descriptor for timed ID3 > > packets > > > > This is required since some programs are not able to correctly recognize > > the metadata. See H.222, 2.6.58 Metadata pointer descriptor. > > > > putstr8() is modified in order to allow to skip writing the string > > length. > > --- > > libavformat/mpegtsenc.c | 24 ++++++++++++++---------- > > 1 file changed, 14 insertions(+), 10 deletions(-) > > > > diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c > > index b437100..6f40615 100644 > > --- a/libavformat/mpegtsenc.c > > +++ b/libavformat/mpegtsenc.c > > @@ -256,7 +256,7 @@ static void mpegts_write_pat(AVFormatContext *s) > > } > > > > /* NOTE: !str is accepted for an empty string */ > > -static void putstr8(uint8_t **q_ptr, const char *str) > > +static void putstr8(uint8_t **q_ptr, const char *str, int write_len) > > breaks build, putstr8() seems after the place where a use is added > in git master, or i did somehing silly Another patch is needed (already approved, but doesn't make sense without this other patch), in attachment. From 20f22c426a9f5c59d28f66a17b59d62301503d67 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Tue, 12 Apr 2016 18:16:21 +0200 Subject: [PATCH] lavf/mpegtsenc: write metadata descriptor for timed ID3 packets This is required since some programs are not able to correctly recognize the metadata. See H.222, 2.6.58 Metadata pointer descriptor. putstr8() is modified in order to allow to skip writing the string length. --- libavformat/mpegtsenc.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index b437100..6f40615 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -256,7 +256,7 @@ static void mpegts_write_pat(AVFormatContext *s) } /* NOTE: !str is accepted for an empty string */ -static void putstr8(uint8_t **q_ptr, const char *str) +static void putstr8(uint8_t **q_ptr, const char *str, int write_len) { uint8_t *q; int len; @@ -266,7 +266,8 @@ static void putstr8(uint8_t **q_ptr, const char *str) len = 0; else len = strlen(str); - *q++ = len; + if (write_len) + *q++ = len; memcpy(q, str, len); q += len; *q_ptr = q; @@ -628,12 +629,15 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) *q++ = 'V'; *q++ = 'A'; } else if (st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) { - *q++ = 0x5; /* MPEG-2 registration descriptor */ - *q++ = 4; - *q++ = 'I'; - *q++ = 'D'; - *q++ = '3'; - *q++ = ' '; + const char *tag = "ID3 "; + *q++ = 0x26; /* metadata descriptor */ + *q++ = 13; + put16(&q, 0xffff); /* metadata application format */ + putstr8(&q, tag, 0); + *q++ = 0xff; /* metadata format */ + putstr8(&q, tag, 0); + *q++ = 0; /* metadata service ID */ + *q++ = 0xF; /* metadata_locator_record_flag|MPEG_carriage_flags|reserved */ } break; } @@ -678,8 +682,8 @@ static void mpegts_write_sdt(AVFormatContext *s) desc_len_ptr = q; q++; *q++ = ts->service_type; - putstr8(&q, service->provider_name); - putstr8(&q, service->name); + putstr8(&q, service->provider_name, 1); + putstr8(&q, service->name, 1); desc_len_ptr[0] = q - desc_len_ptr - 1; /* fill descriptor length */ -- 1.9.1