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

Jerome Martinez <jerome@mediaarea.net> Mon, 20 March 2017 21:07 UTC

Return-Path: <jerome@mediaarea.net>
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 2202E1293EE for <cellar@ietfa.amsl.com>; Mon, 20 Mar 2017 14:07:37 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.921
X-Spam-Level:
X-Spam-Status: No, score=-1.921 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
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 o6MHZLAH48KI for <cellar@ietfa.amsl.com>; Mon, 20 Mar 2017 14:07:34 -0700 (PDT)
Received: from 7.mo179.mail-out.ovh.net (7.mo179.mail-out.ovh.net [46.105.61.94]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 68D441293E3 for <cellar@ietf.org>; Mon, 20 Mar 2017 14:07:33 -0700 (PDT)
Received: from player794.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo179.mail-out.ovh.net (Postfix) with ESMTP id 434C9304D4 for <cellar@ietf.org>; Mon, 20 Mar 2017 22:07:31 +0100 (CET)
Received: from [192.168.2.101] (p5DDB5708.dip0.t-ipconnect.de [93.219.87.8]) (Authenticated sender: jerome@mediaarea.net) by player794.ha.ovh.net (Postfix) with ESMTPSA id A6AF514007D for <cellar@ietf.org>; Mon, 20 Mar 2017 22:07:31 +0100 (CET)
To: cellar@ietf.org
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>
From: Jerome Martinez <jerome@mediaarea.net>
Message-ID: <1db0fb80-2441-a4f0-729e-bc5b5cfd1a84@mediaarea.net>
Date: Mon, 20 Mar 2017 22:07:29 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0
MIME-Version: 1.0
In-Reply-To: <34CA7943-497F-449A-81DA-3237CB87BDD7@dericed.com>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
X-Ovh-Tracer-Id: 4941293218207436945
X-VR-SPAMSTATE: OK
X-VR-SPAMSCORE: 0
X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeelhedrieejgddugeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecufedttdenuc
Archived-At: <https://mailarchive.ietf.org/arch/msg/cellar/GiPj53pdaqK9sSpSJV1J0YGcbWg>
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: Mon, 20 Mar 2017 21:07:37 -0000

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.