Re: [Cellar] AV1 mapping Matroska

Steve Lhomme <slhomme@matroska.org> Mon, 02 July 2018 11:54 UTC

Return-Path: <slhomme@matroska.org>
X-Original-To: cellar@ietfa.amsl.com
Delivered-To: cellar@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id EA60D130DF7 for <cellar@ietfa.amsl.com>; Mon, 2 Jul 2018 04:54:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.909
X-Spam-Level:
X-Spam-Status: No, score=-1.909 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, T_DKIMWL_WL_MED=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=matroska-org.20150623.gappssmtp.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XQdolLP5RPSP for <cellar@ietfa.amsl.com>; Mon, 2 Jul 2018 04:54:38 -0700 (PDT)
Received: from mail-pf0-x22b.google.com (mail-pf0-x22b.google.com [IPv6:2607:f8b0:400e:c00::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 809D6129385 for <cellar@ietf.org>; Mon, 2 Jul 2018 04:54:38 -0700 (PDT)
Received: by mail-pf0-x22b.google.com with SMTP id s21-v6so7414419pfm.6 for <cellar@ietf.org>; Mon, 02 Jul 2018 04:54:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=matroska-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=blgU5yyjE17MtBySND2djZm4KleoxKS2Kl/sOog2PKY=; b=04FeWnPzGzVlyRDUwCceGc9KajmnMk2xVsjRvYcN2UjMWy+3Qz7dcr7MHS2mu6dhcu 0iKhM/lxhseH6FWjrX9w2WmZX5KZyBYGt+S/sCbGfoYDgYH4n6kYAKCJb8DsxYX1mAhb ktic7BalQJMi2BqJTgP5lSgyHZ8LDkCZ5iDoHji0cDYGZ2TVzEvfqSCPN8C6s7fcovkB vi+C40yRuuXhy/vzphUXnFR8S5oZzmBpFtABm8zm4G78j0+qSMS4HL9Ox5tisLIqgXls m9K7vjqHRdbxbGqVuOonJuqfIH3MO1wd7RFoaNkm5iTslpZy6iI/zYJXJYRWPl5xGmAD E/HA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=blgU5yyjE17MtBySND2djZm4KleoxKS2Kl/sOog2PKY=; b=UqyY081VR4xSofSLoxXkN7c04Fih9H6oFgBiHTlJPe1VplIUy70yUyAwetvXILSe/+ Q2cit0tSMNXU1vrKeymwtLvFgebSQKXJYpQuVPL2m5Z1ry0MTxvK8OCDE7Lm8A2Z8mZY UePSS+KqOROy2uGh9PnozPIDQ5J9FYeWlVm2HjvU0Skhh9geFCWHvjtCGtktfjRPl3Ee 7M4GC98hMIZ9CIW672eLYELwzzBevGL1UEH8QMCd++vS7im+DWunAVvY0CYmFAr2UpSv xVENZgSbtWqLqpBNNsfyuP4dBM5uEwL/CX7g1mNHGDCj5nfzWB439XcNlMNeu2m8UCA3 gEYQ==
X-Gm-Message-State: APt69E1IkV+17GidCgCvVKN2En27wOIw+h8ZFQwx62QJ6wToZdhsNB0J ETe2Xwv4CNFG6mFRs3UzekTeLntyBCJIVYAK7nzbfw==
X-Google-Smtp-Source: AAOMgpf8DxkxYMdzap9u1LvaulbLXG4JiYLL8HaaYfEARwym4m+6O+fRiHSDeZjN9XsVNQ8eqX6HfgV49mChsv8f4oo=
X-Received: by 2002:a62:b20c:: with SMTP id x12-v6mr16128177pfe.64.1530532477944; Mon, 02 Jul 2018 04:54:37 -0700 (PDT)
MIME-Version: 1.0
Received: by 2002:a17:90a:17af:0:0:0:0 with HTTP; Mon, 2 Jul 2018 04:54:37 -0700 (PDT)
In-Reply-To: <CA+anqdzpJH+HkAhLwQn2NmpxRuFKtJazN3W70s4BvVpREqeOXQ@mail.gmail.com>
References: <f603a9f5-d7dc-6640-1f53-f4d7b62a788e@googlemail.com> <CAOXsMFJJbHbh3=Gnu7Uag4Skq5+=jOimFNPxuicgDiVdbven4w@mail.gmail.com> <dada3690-c8da-05db-4ddb-32476c1170f5@xiph.org> <CAOXsMF+CPW6VJsFaeahuL00hnvq5dUO-gHE3sYXPr5iVy8s1aQ@mail.gmail.com> <87efgmdqou.fsf@bunkus.org> <20180702103455.GQ4839@michaelspb> <CAOXsMF+Q-RzwapNOamqc9G9XttnzMXyUuSY8_HFAA+h+4YsMJA@mail.gmail.com> <36a0dc7e-8579-d99c-4beb-e8f4ce019eff@mediaarea.net> <CAOXsMFKwoujXN1zqzDN16dcw5=14-Mer+XoJZZMzPbo+JpS_XA@mail.gmail.com> <CA+anqdzpJH+HkAhLwQn2NmpxRuFKtJazN3W70s4BvVpREqeOXQ@mail.gmail.com>
From: Steve Lhomme <slhomme@matroska.org>
Date: Mon, 02 Jul 2018 13:54:37 +0200
Message-ID: <CAOXsMFJq52Ty3bAeWFZqSUY7-B1PzLWokog_8UvCg+_WfBLdzA@mail.gmail.com>
To: Hendrik Leppkes <h.leppkes@gmail.com>
Cc: CELLAR list <cellar@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/cellar/AfAflmJP7YSBkNQ3pxspWScGEWM>
Subject: Re: [Cellar] AV1 mapping Matroska
X-BeenThere: cellar@ietf.org
X-Mailman-Version: 2.1.26
Precedence: list
List-Id: Codec Encoding for LossLess Archiving and Realtime transmission <cellar.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/cellar>, <mailto:cellar-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cellar/>
List-Post: <mailto:cellar@ietf.org>
List-Help: <mailto:cellar-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/cellar>, <mailto:cellar-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 02 Jul 2018 11:54:41 -0000

2018-07-02 13:35 GMT+02:00 Hendrik Leppkes <h.leppkes@gmail.com>:
> On Mon, Jul 2, 2018 at 1:27 PM Steve Lhomme <slhomme@matroska.org> wrote:
>>
>> 2018-07-02 13:14 GMT+02:00 Jerome Martinez <jerome@mediaarea.net>:
>> > On 02/07/2018 12:51, Steve Lhomme wrote:
>> >>
>> >> 2018-07-02 12:34 GMT+02:00 Michael Niedermayer <michael@niedermayer.cc>:
>> >>>
>> >>> Hi
>> >>>
>> >>> On Mon, Jul 02, 2018 at 09:47:45AM +0200, Moritz Bunkus wrote:
>> >>>>
>> >>>> Hey,
>> >>>>
>> >>>>> Looking at the term "coded video sequence" (CVS) in other codecs (H.264
>> >>>>> and H.265) it seems it's a common term. And for those codec one Segment
>> >>>>> correspond to one CVS, with the parameters of that CVS stored in the
>> >>>>> CodecPrivate (SPS + PPS for H.264 for example). So we should probably
>> >>>>> go
>> >>>>> in that simple way.
>> >>>>
>> >>>> I have quite a lot of h.264 samples here, mainly M2TS from DVB, where
>> >>>> SPS/PPS change mid-stream, often multiple times. For such files the
>> >>>> first
>> >>>> occurrences of SPS/PPS make up the AvcC in CodecPrivate, but all key
>> >>>> frames
>> >>>> are still prefixed with the currently active SPS/PPS — because that's
>> >>>> the
>> >>>> only way to signal that stuff has actually changed.
>> >>>
>> >>> IMHO All SPS/PPS should be in the "global header" (CodecPrivate) which
>> >>> the
>> >>> global header applies to, not just the first.
>> >
>> >
>> > Not possible with e.g. real time streaming (you don't know in advance the
>> > next SPS/PPS)
>> >
>> >>> This way an application can know all resolutions, aspect ratios and so on
>> >>> from just the header without the need to scan through all random access
>> >>> points.
>> >>
>> >> My understanding is that it's how it's done in MP4:
>> >>
>> >> "Each AVC sample entry, which contains the AVC video stream decoder
>> >> specific information, includes a group of SPSs and PPSs. This group of
>> >> parameter sets functions much like a codebook. Each parameter set has
>> >> an identifier, and each slice references the parameter set it was
>> >> coded against using the parameter set's identifier."
>> >>
>> >> I have to check but I don't think Sequence Headers OBUs have
>> >> identifiers like that in AV1.
>> >
>> >
>> > Not in AV1 (I just updated my own code for AV1  1.0.0 spec, still not
>> > there).
>> > But it actually does not answer the issue because in the example there is
>> > usually still only the "set id" of 0 (the new SPS replaces the old one, not
>> > a new number).
>> >
>> > Actually IIRC in HEVC (same for AVC) there are explicitly 2 different codec
>> > identifiers:
>> > - "hvc1" is for *all* SPS/PPS in the global header (CodecPrivate), and there
>> > is no SPS/PPS in the stream itself
>> > - "hev1" is for *no* SPS/PPS in the global header (CodecPrivate), and key
>> > frames are prefixed with the currently active SPS/PPS
>> > (I personally don't see the need of 2 different identifiers, as it quick to
>> > see if SPS/PPS is in the file, but there is surely a reason)
>> >
>> > The issue is not only for AV1, but for all formats permitting to have the
>> > init in the stream itself (AVC, HEVC, AV1...).
>> >
>> > IMO we should not restrict to only one possibility in Matroska spec, as they
>> > are for different needs (non real time vs real time), whatever is the format
>> > (AVC, HEVC, AV1...).
>> >
>> >
>> >
>> >> By the way, this is one mapping for V_AV1. There could be other AV1
>> >> mapping in Matroska where there is no CodecPrivate and there could be
>> >> multiple coded video sequences in it. But it would require the use of
>> >> CodecState and CueCodecState which is currently not an option for
>> >> WebM. So for now I will concentrate on a single coded video sequence.
>> >> And if needed in the future we can do a different one.
>> >
>> >
>> > If WebM decides that real time AV1 is for them, they may decide to discard
>> > CodecPrivate usage and put sequence header in the "Block" (as they currently
>> > do with up to date AOM build)
>> > So restriction will not be there in practice.
>>
>> Seeking in such a file would not be possible. I'm not sure it's
>> desirable even when doing adaptive streaming with short sequences. We
>> will need CodecState and CueCodecState for that. We could define such
>> a case (with a different codec ID) for Matroska and WebM could pick
>> that from there.
>>
>> Also while working on the case where the Sequence Header OBU doesn't
>> change, I noticed an issue. The Sequence Header OBU can still change
>> the [operating_parameters_info] during the lifetime of the stream
>> (paragraph 7.5 pointed out by Tim). That means even applying the
>> stricter restrictions of the Codec Video Sequence in AV1 means we'd
>> still need CodecState and CueCodecState for seeking to work. This
>> change is only possible in a specific decoder model (Annex E) when
>> [decoder_model_info_present_flag] is 1. When it's 0 then the
>> [operating_parameters_info] doesn't apply. So we should probably
>> restrict the single Sequence Header OBU to streams where
>> [decoder_model_info_present_flag] is 0.
>>
>
> In this particular case, doesn't the stream already include in-band
> Sequence Header OBUs, and judging from the requirement of some
> parameters being allowed to change, I would wager that decoders would
> be setup to handle them as well.
> So all this comes down to is setting up Cues properly to point to
> clean seek points with a Sequence Header + Keyframe, much like a H264
> stream with minor SPS/PPS changes would be muxed right now.

Ah yes, good point. In Paragraph 7.5 there is this:

"Note:There is not a requirement that every temporal unit with a key
frame also contains a sequence header, just that the sequence header
has been sent before the first key frame. However, note that temporal
units without sequence header OBUs are not considered to be random
access points."

So we can assume that differing Sequence Headers OBUs will be found
in-band. And must be bit-identical to the first one in the CVS except
for [operating_parameters_info].

It may also mean that our keyframe flag may need to be refined. And by
"temporal unit" I think it means "temporal unit with a key frame"
wihout a sequence header OBU are not RAP. In practice I don't think
there will not be keyframes where the sequence header OBU is not in
that temporal unit.


> Now if an encoder would produce a stream that uses multiple different
> Sequence Headers but doesn't regularly repeat the sequence header (ie.
> with keyframes), then such a stream would be unseekable in whatever
> medium, and that would be the encoders fault.
>
> (PS: re-posted to the list, can someone fix this list to set reply-to headers?)
>
> - Hendrik
>
> _______________________________________________
> Cellar mailing list
> Cellar@ietf.org
> https://www.ietf.org/mailman/listinfo/cellar



-- 
Steve Lhomme
Matroska association Chairman