Re: [Cellar] QuickTime timecode tracks in Matroska, was Ancillary data in Matroska

Steve Lhomme <slhomme@matroska.org> Wed, 26 April 2017 07:51 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 5A1E7131C65 for <cellar@ietfa.amsl.com>; Wed, 26 Apr 2017 00:51:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Level:
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_LOW=-0.7] 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 j1v9PaG6H5P9 for <cellar@ietfa.amsl.com>; Wed, 26 Apr 2017 00:51:47 -0700 (PDT)
Received: from mail-yw0-x230.google.com (mail-yw0-x230.google.com [IPv6:2607:f8b0:4002:c05::230]) (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 731C7131C60 for <cellar@ietf.org>; Wed, 26 Apr 2017 00:51:40 -0700 (PDT)
Received: by mail-yw0-x230.google.com with SMTP id 203so103889643ywe.0 for <cellar@ietf.org>; Wed, 26 Apr 2017 00:51:40 -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 :content-transfer-encoding; bh=ozX0OqqUHD4YngPnsSFn/dckzusm4eujdkAzuazmdnM=; b=kfI/cZ5ZslAodfyExZqZlRe3wuV+UmSmr6v0DLuiA7yS9H7EDp54i8LP34KyliFDTt lXKogP2gqxkT7H0uC0Em7GwVB4DO9GdM+cZQgGLjE1+vgH+drSLRtZxpUJUooEnLCUef +haHY1I8zOta1sM2Gl4VnwMb+GqIJAi8IuoIINIt10JIOEgXiL7d49Cb/8J5/mIiuG9Q xs4p2LrMixGx953/1J53A7B5nQMxEYq7gmXDyNNOw6LOy+5rXco5dXJVeTtiadkxDl8A tDqf6kiGvwiOoT08RJhEQUTu6vk8mncwgxra8b0H21sfqQqsT5WVnrx7eTYqpnOxVSVA 2/TA==
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:content-transfer-encoding; bh=ozX0OqqUHD4YngPnsSFn/dckzusm4eujdkAzuazmdnM=; b=E5Tm8ItKseIz5dAebpvVcM0DMEClenpvbgFinj+MExGjfigcN2CSEc1HuTWYpDFjS/ tVVocvO7m8KolY8sJmqo6OPOQzj0QmeLBPdyOXs+TbpROxPGli3l2inhiK9+hcE6TxZE +VS5T8Zpiqptmj1NHeT5+JIN4eMYshbXKJu6SshVScxwWE183L51Qd+UTMapI7w6OiBk whiwIYnd11IJdFQ5it9DP9N6nPYtmoxvcOY5K8iVI/Iz3tjWVdiK1/l3411vClVviOtq cAGwio1oAGNlAft3OctdABw6Tm0FrjTfxRYt9HXmuGvCpkbutm3lpQq2SoM4Ov01UmpZ nDog==
X-Gm-Message-State: AN3rC/7JyYFtm5eKIjui7ZvsCwaYR0h2tYFhcmW8XpRWma0smERufhFx y6x3BxEI7YmbPqmApDwzJ+CtAiJHgg==
X-Received: by 10.129.103.11 with SMTP id b11mr13321447ywc.75.1493193099273; Wed, 26 Apr 2017 00:51:39 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.83.4.215 with HTTP; Wed, 26 Apr 2017 00:51:38 -0700 (PDT)
In-Reply-To: <1db0fb80-2441-a4f0-729e-bc5b5cfd1a84@mediaarea.net>
References: <2651a6f3-9c9a-6f76-2ee7-4d5c23b1ce57@mediaarea.net> <BFB215F1-1254-409C-817A-7AB1A772437A@dericed.com> <922C5404-EC19-462D-A836-C952E66C2FD8@dericed.com> <B3BE02C3-9402-4802-BC9E-3F95020C641D@dericed.com> <9244b201-9097-365f-b7da-f2d8553616ee@mediaarea.net> <79FE60E9-88D8-4922-AE76-9D1924E1D6EB@dericed.com> <43056655-cf09-9d54-6552-4ed4b655e74f@mediaarea.net> <34CA7943-497F-449A-81DA-3237CB87BDD7@dericed.com> <1db0fb80-2441-a4f0-729e-bc5b5cfd1a84@mediaarea.net>
From: Steve Lhomme <slhomme@matroska.org>
Date: Wed, 26 Apr 2017 09:51:38 +0200
Message-ID: <CAOXsMF+uE6PzVUjPhDd7w98nGXRrJ8Wr4ynqCr2HUvJmbH0kvg@mail.gmail.com>
To: Codec Encoding for LossLess Archiving and Realtime transmission <cellar@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/cellar/HsJt6V6hjUW_tr4JYs1tNmzSQT8>
Subject: Re: [Cellar] QuickTime timecode tracks in Matroska, was Ancillary data in Matroska
X-BeenThere: cellar@ietf.org
X-Mailman-Version: 2.1.22
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: Wed, 26 Apr 2017 07:51:49 -0000

A bit late on the party but I agree with the move to a more specific
track type for timecodes rather than the generic ancillary data.

2017-03-20 22:07 GMT+01:00 Jerome Martinez <jerome@mediaarea.net>:
> Le 20/03/2017 à 21:37, Dave Rice a écrit :
>>
>> [...]
>>>>
>>>> I’ve only seen a single value stored but then sometimes an edit list
>>>> used to alter the ordering of the timecode (in case when its
>>>> non-sequential). For Matroska possibly it could simply store a new timecode
>>>> Block at any case when it is not sequential.
>>>
>>> What about seeking?
>>
>> Isn't the seeking similar to QuickTime.
>
>
> Difference is that in QuickTime, a wrong "seek table" makes the playback
> impossible, so developers are more careful about it. and in the file I
> remember (I must still find it), there was only one offset in the offset
> table of QuickTime and a single "chunk" of time code with byte size of 4
> bytes per frame (to be confirmed as you say you saw edit lists instead)
>
>>   In QuickTime you'd need the offset table of the timecode track to
>> understand the number and location of all timecode samples. In Matroska you
>> would use the associated CuePoints of the timecode track for the same
>> reference. By parsing Cues the reader should be able to determine if the
>> timecode is stripped or not and if not then have the CueTimes for each
>> associated timecode Cluster.
>>
>>> If you have a timecode block at the first frame and also at the middle of
>>> the file, how a player can know that there is a timecode block breaking the
>>> sequential order without parsing the whole file when there is a seek request
>>> to the last minute of content? In that case, time code real value would be
>>> set to "waiting for new block" (and this block never comes). I don't think
>>> that forcing full parsing of the file with time code for seeking is a good
>>> solution.
>>
>> Same. But in the case of video if you seek to a P-frame then you have to
>> go backwards and decode from the I-frame. Similarly if seeking to a
>> timepoint without a timecode Cluster (analogous to a P-frame), then the
>> reader would have to use the Cues to decode the prior timecode Cluster
>> (analogous to I-frame) in order to determine the timecode value of the seek
>> point.
>
>
> Possible.
> But we need to be careful, what does it means?
> examples of issue:
> 1/ can a player consider that if there is only one CuePoint with CueTrack =
> the ID of the time code track, it means that this is a stripped content and
> time codes are in sequential order?
> 2/ can a player consider that if there are only 2 CuePoints with CueTrack =
> the ID of the time code track, it means that this is a stripped content and
> time codes are in sequential order except for one place and there is a
> single discontinuity?
> 3/ or must a player consider that if there only 2 CuePoints (let say frame 0
> and frame 1000) with CueTrack = the ID of the time code track, it means that
> it must seek to 0 if the requested frame is 999 (so a loooooong read of the
> file on disk before being able to play frame 999)
> If answers are 2/ yes 3/ no, I understand that the only method for storing a
> time code track with all values not sequential is to have a CuePoint for
> each time code frame (which makes the Cues huge, 15-20 bytes of CuePoint per
> time code frame).
>
> Please provide example about how you imagine CuePoints in the cases:
> 1/ sequential time codes during 2000 frames
> 2/ sequential time codes during 2000 frames except one discontinuity at
> frame 1000
> 3/ 2000 different times codes
> and where a player must seek if the request is to seek to frame 999.

Are timecode frames supposed to be matching a specific video frame or
audio frame ? Or they are loose ? If the former case it may be best to
be attached as a BlockAdditional. Otherwise they should always be in
sequential/display order, just like audio is. Even if video is not.

Having a separate track means the timestamps may not match exactly the
video or audio tracks. So in case of seeking/discontinuity it's like
you said, there's a state where you need to way for the next Timecode
block to know where you are. But in general a Timecode block
should/must be placed before the audio/video it corresponds to. It's
the same requirement there is in WebM that audio blocks are muxed
before video blocks. Timecode would be even more prioritary.

> _______________________________________________
> Cellar mailing list
> Cellar@ietf.org
> https://www.ietf.org/mailman/listinfo/cellar



-- 
Steve Lhomme
Matroska association Chairman