Hi Alexey,
You don't need to use it when decoding. I don't think recent versions
of vpxenc set that flag any more.
--
You received this message because you are subscribed to the Google Groups "WebM Discussion" group.
To post to this group, send email to webm-d...@webmproject.org.
To unsubscribe from this group, send email to webm-discuss...@webmproject.org.
For more options, visit this group at http://groups.google.com/a/webmproject.org/group/webm-discuss/?hl=en.
Seems like after each answer i have more question :)
I currently checked some different webm videos inclusive some from
youtube. All of them set default duration.
Spec also say: "All
absolute (block + cluster) timecodes must be monotonically
increasing." According to this, default duration make sense.
So you
propose disabling default duration if altref option is enabled?
If i do not use defaultduration setting, i do not know what can i
expect from the stream. Should i normalize framerate or not.
Are there
was some frame lost? If yes, it is good to wait for a keyframe. If
stream fail, there is two ways to display this failed stream:
stuttering, or artifacts. I think stuttering is less worst.
I work on vp8 support in gstreamer. The problem is, the timestamp will
be set in vp8enc element. Timestamps are 64bit long (nanoseconds), in
webmmux they are rounded to milisconds if timestampscale=1000000.
Because i do not know how the stream will be muxed, i can't decide
what TS to set for AR-frame.
If i set it too close to D-1 it will have
same TS and can be wrongly interpreted by demuxer.
If i set it too
close to D-frame, it can be dropped on some QoS event.
I should some how know what frame type is it, if it is an invisible
frame, i can send it to decoder immediately after D-1 was decoded.
No
problems with TS or QoS and every one is happy.
--
Right now GStreamer seems to use alt frames with BlockGroup and
BlockDuration of 0 and possibly marked as invisible. This is OK, but
that frame has no reference set, so it can be considered as a
keyframe, and would be described as such in the Cue entries.
So are they keyframes usable for seeking ? If not I have to verify
mkclean to make sure it doesn't list them in the Cues. For that they
will need to be specifically marked as Invisible (a 0 duration may be
valid as a keyframe for seeking).
--
Steve Lhomme
Matroska association Chairman
Steve
--
To post to this group, send email to webm-d...@webmproject.org.
To unsubscribe from this group, send email to webm-discuss...@webmproject.org.
--
Here are the possibilities I can think of:
1/ in BlockGroup with a 0 duration. The problem is that for most
existing demuxers this is considered as a keyframe. When remuxing it
can result to a Cue entry which should not happen. So this is not
enough.
One possibility could be to add a fake reference in the BlockGroup,
namely it's to itself (own timecode). That would fool current demuxers
and should not disturb systems that handle these references properly
(I don't know any). Now that would be a problem if our AF and its FF
had the same timecode. One good reason to avoid this.
2/ Use a SimpleBlock for the AF without they keyframe flag and with
the invisible flag (which it is).
This solution, like the previous, would require the AF and the FF to
have different timecodes. This may not be possible if the
TimecodeScale matches the framerate of the video. ie, the timecode is
incremented by 1 in each consecutive Block/SimpleBlock, leaving no
room for a frame in between displayed ones.
3/ Put the AF and FF together in the same SimpleBlock using lacing.
The problem is that in this case the timecode of the second frame is
"unknown" (left to the framework to decide how to handle this). That
means they would likely get the default duration (if any). They might
also get split by a remuxer.
4/ Put the AF in BlockAdditions:
http://www.matroska.org/technical/specs/index.html#BlockAdditions
As you can see, it is left to the codec to know how to handle the
BlockAdditional element. That means the FF would be in Block and the
AF in BlockAdditional. They get the same timecode. And the AF is
marked with BlockAddID=1 which for VP8 would mean an alt-ref frame. No
need for 0 duration as it's just extra data to handle.
IMO only #4 is a clean solution. It doesn't require any hacking of the
timecodes. The drawback is that BlockAdditions is currently poorly
supported. So it's likely the data in current frameworks will not be
passed to the VP8 decoder. I suppose that would break decoding.
There's one last option: frame packing. The VP8 encoder/decoder is
responsible for (un)packing the AF and FF frames together in one
buffer (one Frame as seen by Matroska). Just like the MPEG 4.2
B-frames were done in AVI.
Steve
--
> 4/ Put the AF in BlockAdditions:
> http://www.matroska.org/technical/specs/index.html#BlockAdditions
> As you can see, it is left to the codec to know how to handle the
> BlockAdditional element. That means the FF would be in Block and the
> AF in BlockAdditional. They get the same timecode. And the AF is
> marked with BlockAddID=1 which for VP8 would mean an alt-ref frame. No
> need for 0 duration as it's just extra data to handle.
5/ Packed AF:
> There's one last option: frame packing. The VP8 encoder/decoder is
> responsible for (un)packing the AF and FF frames together in one
> buffer (one Frame as seen by Matroska). Just like the MPEG 4.2
> B-frames were done in AVI.
I "vote" for 4 or 5
the more I think about it, the more I favor option 5 aka frame packing
You're right, we need to find something else to store alt-ref frames
(AF). You also want the AF to have the same timecode as the following
frame (FF). This is not good. In the same track no frame should have
the same timecode. That's a basic requirement, especially when
references are used.
Here are the possibilities I can think of:
1/ in BlockGroup with a 0 duration. The problem is that for most
existing demuxers this is considered as a keyframe. When remuxing it
can result to a Cue entry which should not happen. So this is not
enough.
One possibility could be to add a fake reference in the BlockGroup,
namely it's to itself (own timecode). That would fool current demuxers
and should not disturb systems that handle these references properly
(I don't know any). Now that would be a problem if our AF and its FF
had the same timecode. One good reason to avoid this.
2/ Use a SimpleBlock for the AF without they keyframe flag and with
the invisible flag (which it is).
This solution, like the previous, would require the AF and the FF to
have different timecodes.
This may not be possible if the
TimecodeScale matches the framerate of the video. ie, the timecode is
incremented by 1 in each consecutive Block/SimpleBlock, leaving no
room for a frame in between displayed ones.
3/ Put the AF and FF together in the same SimpleBlock using lacing.
The problem is that in this case the timecode of the second frame is
"unknown" (left to the framework to decide how to handle this). That
means they would likely get the default duration (if any). They might
also get split by a remuxer.
4/ Put the AF in BlockAdditions:
http://www.matroska.org/technical/specs/index.html#BlockAdditions
As you can see, it is left to the codec to know how to handle the
BlockAdditional element. That means the FF would be in Block and the
AF in BlockAdditional. They get the same timecode. And the AF is
marked with BlockAddID=1 which for VP8 would mean an alt-ref frame. No
need for 0 duration as it's just extra data to handle.
IMO only #4 is a clean solution. It doesn't require any hacking of the
timecodes. The drawback is that BlockAdditions is currently poorly
supported. So it's likely the data in current frameworks will not be
passed to the VP8 decoder. I suppose that would break decoding.
There's one last option: frame packing. The VP8 encoder/decoder is
responsible for (un)packing the AF and FF frames together in one
buffer (one Frame as seen by Matroska). Just like the MPEG 4.2
B-frames were done in AVI.
=
Steve
ircc webm spec say "The TimecodeScale element should (must) be set to
> 2/ Use a SimpleBlock for the AF without they keyframe flag and with
> the invisible flag (which it is).
> This solution, like the previous, would require the AF and the FF to
> have different timecodes. This may not be possible if the
> TimecodeScale matches the framerate of the video. ie, the timecode is
> incremented by 1 in each consecutive Block/SimpleBlock, leaving no
> room for a frame in between displayed ones.
a default of 1.000.000 nanoseconds."
Timecodes of FF and PF are known, AF is unknown and should be
> 3/ Put the AF and FF together in the same SimpleBlock using lacing.
> The problem is that in this case the timecode of the second frame is
> "unknown" (left to the framework to decide how to handle this). That
> means they would likely get the default duration (if any). They might
> also get split by a remuxer.
"generated"
I agree. I thought there was already something about frames never
having the same timecode in the specs but it's not. For me it's so
obvious that it's implied.
>> One possibility could be to add a fake reference in the BlockGroup,
>> namely it's to itself (own timecode). That would fool current demuxers
>> and should not disturb systems that handle these references properly
>> (I don't know any). Now that would be a problem if our AF and its FF
>> had the same timecode. One good reason to avoid this.
>
> I'm not sure why you would want to add a fake reference.
Simply to make sure demuxers know it's is not a keyframe. As this is
the only way to tell it when BlockGroup is used.
> If your file was muxed like 2.e. or 2.f. you should just put a real
> reference to PF. (If your file was muxed like 2.d. you could still have
> a reference but as said above we will need to make rules about referencing >
> 1 blocks with the same timestamp)
>>
>> 2/ Use a SimpleBlock for the AF without they keyframe flag and with
>> the invisible flag (which it is).
>
> Muxers should be able to mark the block as invisible but I don't think this
> should be mandatory. I think we should leave the invisible flag out of this
> discussion.
It is mandatory to put the correct information about data in the file
format. Just yesterday I was reported a bug in FFMPEG that doesn't
always put the keyframe flag on ffv1 frames even though they are
supposed to be all keyframes. Sure it works but this is not correct.
Again, a rule that is written nowhere because it's so obvious that
it's implied.
>> This solution, like the previous, would require the AF and the FF to
>> have different timecodes.
>
> Again not sure why they cannot have the same timecode.
OK, this seems to be a crucial point here. So let me explain a bit.
Matroska stores Presentation TimeStamps (PTS) and no Decoding
TimeStamps (DTS). And the frames are in coding order (ie DTS always
increasing, but not necessarily PTS). It seems very odd that 2 frames
should be rendered at the same time on the same data pipeline. It may
not be the case in the few programs you tested, but I'm not sure you
are planning to check with all multimedia framework makers to make
sure such a rule doesn't break their internal working. Also because
the PTS can be decreasing in some case (when B frames are involved),
that means there has to be a reordering in the pipeline, based on the
timecode. Reordering 2 frames that have the same timecode could lead
to unexpected behaviours.
The original BlockGroup+Block+BlockReference(s) was designed so that a
program that only knows about the container (not the codec internals)
can edit a file and keep all the frames that are needed to display the
desired edit. That's where the invisible flag was introduced, so that
reference frames that are outside of the edit are still part of the
file, but not displayed.
Imagine this example of video frames :
A(k) B(alt) C(-1) D(-2)
(k: keyframe, alt: alt-ref frame, -: references the x frame behind
If you cut at D, it has a references to B. With BlockGroup the
BlockReference would be the timecode of B. But if the timecode of B
and C are the same, which one are you supposed to keep ? That's why
it's better to avoid having frames with the same timecode.
Of course when using only SimpleBlock you lose that editing
possibility. But does it mean VP8 will always be prevented from being
used in non linear editors ?
Plus a alt-frame doesn't have a PTS, only a range for the DTS. If it
has no PTS there's no reason to have a fake one, it only creates
problems. Plus it also breaks the rule of one frame in/one frame out
that most frameworks use.
Now in the light of this, frame packing would not be ideal either. If
you want D, you'd need B+C. But then B+C would be marked as invisible.
You only lose some decoding CPU decoding C which is never used.
> This would break all players today.
That's one of the problems you get when desiging a format with
features not existing before. Most of the time they are not used
because no framework handles it. It's chicken and egg problem.
> Also I'm not sure this is the cleanest solution as muxers and demuxers might
> have to have intimate knowledge of the data. I.E. I think mkv/webm muxers
This is the opposite. Just like the CodecPrivate is opaque to the
(de)mux stage, the BlockAdditions are also opaque. They just carry an
ID passed to the codec in case more than one is possible.
> will need to know that the compressed frame that was just sent to them is an
> altref frame. There is no way in current multimedia platforms to distinguish
> altref frames from other non key-frames. So muxers would need to know that
> the data is a vp8 frame and how to parse the vp8 header to see if it is an
> alt-ref frame. Same is true with demuxers sending frames down the pipeline.
It's mostly that frameworks are not made for BlockAdditions.
This system was created for the WavPack hybrid mode. The main track is
a lossy codec and the BlockAddition part is the complementary data to
have the lossless version. In this case a muxer can strip the
additional data to keep only the lossy part. In the case of the
alt-ref frame it cannot be removed otherwise it breaks decoding.
>> There's one last option: frame packing. The VP8 encoder/decoder is
>> responsible for (un)packing the AF and FF frames together in one
>> buffer (one Frame as seen by Matroska). Just like the MPEG 4.2
>> B-frames were done in AVI.
>
> Ahh yes. I agree this would be the best option, but we cannot do this option
> without breaking the bitstream (which we cannot do), or defining a new codec
> ID with frame packed header ala VP6 vs VP6F. For the next generation I have
> made sure that the codec guys will support frame packing, but that does not
> help us today.
There's not a bit left to handle this ? That would be pretty easy to
handle the extra check on your decoder library.
> I think we should stay away from defining muxing alt-ref frames that would
> break current players as it will take time for the players to support the
> new format. Plus you will always have users that have not upgraded or
> can't because they are on a device and then the new files will not work for
> them.
In the light of all this, I still don't see a clean & working solution
to the alt-ref problem. It's sad to be stuck by legacy of existing
files for such a new format...
> I think the only file types that are currently being created are 1.b, 1.c,
> and 2.f with SimpleBlocks.
> I think it would be best if the spec said 1.a,1.b, 1.c, 2.e SB, 2.e BG, 2.f
> SB and 2.f BG are valid files that must be handled by players. I think most
> players can handle these files today (with the IE9 exception on BG). For
> muxers we would strongly suggest 1.c, unless there is a good reason. I can't
> think of any, if anyone has one please reply.
> This will be dependent on block timecodes being monotonically increasing
> vs strictly increasing. So a few questions:
> Is strictly increasing explicitly referenced in the Matroska spec today?
No, but see above why it should be avoided.
> What issues could arise form allowing monotonically vs strictly increasing
> timecodes?
> I think the cleanest solution would be to allow monotonically increasing
> timestamps. The muxing/demuxing is straight forward (for the most part) and
> all/most of the players can handle it today.
Increasing timecodes may be good for VP8. But for any format with B
frames this is not going to be the case.
> Another question I raised if the interaction of DefaultDuration and
> SimpleBlocks? If you read the spec and the files that FFmpeg currently
> generates with altref frames it would seem that the with every altref frame
> DefaultDuration time is being added to the overall duration of the video
It should not be added. It replaces the duration when it is not set
(in SimpleBlock for example).
> stream. This would mess with av sync but the timestamps are correct. All
> players can handle these files correctly. It seems like most players just
> ignore DefaultDuration wrt SimpleBlocks. Is this the correct behavior?
I assume some framework don't use duration for frames. This is usually
fine for decoding, in the end you only need the PTS (hence we don't
use a DTS).
> Truthfully I don't fully understand why you would need to set a
> DefaultDuration on a video stream in a timestamp based container. If the
> framerate is non-integral it seems like they are going to be at odds with
> each other.
It can be useful to recover the start timecode in laces (thus it
should not be used with Vorbis which doesn't have a fixed framerate).
It is also used to tell the fps of a track for video.
It is mandatory to put the correct information about data in the file
> If your file was muxed like 2.e. or 2.f. you should just put a real
> reference to PF. (If your file was muxed like 2.d. you could still have
> a reference but as said above we will need to make rules about referencing >
> 1 blocks with the same timestamp)
>>
>> 2/ Use a SimpleBlock for the AF without they keyframe flag and with
>> the invisible flag (which it is).
>
> Muxers should be able to mark the block as invisible but I don't think this
> should be mandatory. I think we should leave the invisible flag out of this
> discussion.
format. Just yesterday I was reported a bug in FFMPEG that doesn't
always put the keyframe flag on ffv1 frames even though they are
supposed to be all keyframes. Sure it works but this is not correct.
Again, a rule that is written nowhere because it's so obvious that
it's implied.
OK, this seems to be a crucial point here. So let me explain a bit.
>> This solution, like the previous, would require the AF and the FF to
>> have different timecodes.
>
> Again not sure why they cannot have the same timecode.
Matroska stores Presentation TimeStamps (PTS) and no Decoding
TimeStamps (DTS). And the frames are in coding order (ie DTS always
increasing, but not necessarily PTS). It seems very odd that 2 frames
should be rendered at the same time on the same data pipeline.
It may
not be the case in the few programs you tested, but I'm not sure you
are planning to check with all multimedia framework makers to make
sure such a rule doesn't break their internal working. Also because
the PTS can be decreasing in some case (when B frames are involved),
that means there has to be a reordering in the pipeline, based on the
timecode.
Reordering 2 frames that have the same timecode could lead
to unexpected behaviours.
The original BlockGroup+Block+BlockReference(s) was designed so that a
program that only knows about the container (not the codec internals)
can edit a file and keep all the frames that are needed to display the
desired edit. That's where the invisible flag was introduced, so that
reference frames that are outside of the edit are still part of the
file, but not displayed.
Imagine this example of video frames :
A(k) B(alt) C(-1) D(-2)
(k: keyframe, alt: alt-ref frame, -: references the x frame behind
If you cut at D, it has a references to B. With BlockGroup the
BlockReference would be the timecode of B. But if the timecode of B
and C are the same, which one are you supposed to keep ?
That's why
it's better to avoid having frames with the same timecode.
Of course when using only SimpleBlock you lose that editing
possibility.
But does it mean VP8 will always be prevented from being
used in non linear editors ?
Plus a alt-frame doesn't have a PTS, only a range for the DTS. If it
has no PTS there's no reason to have a fake one, it only creates
problems.
Plus it also breaks the rule of one frame in/one frame out
that most frameworks use.
Now in the light of this, frame packing would not be ideal either. If
you want D, you'd need B+C. But then B+C would be marked as invisible.
You only lose some decoding CPU decoding C which is never used.
That's one of the problems you get when desiging a format with
> This would break all players today.
features not existing before. Most of the time they are not used
because no framework handles it. It's chicken and egg problem.
This is the opposite. Just like the CodecPrivate is opaque to the
> Also I'm not sure this is the cleanest solution as muxers and demuxers might
> have to have intimate knowledge of the data. I.E. I think mkv/webm muxers
(de)mux stage, the BlockAdditions are also opaque. They just carry an
ID passed to the codec in case more than one is possible.
It's mostly that frameworks are not made for BlockAdditions.
> will need to know that the compressed frame that was just sent to them is an
> altref frame. There is no way in current multimedia platforms to distinguish
> altref frames from other non key-frames. So muxers would need to know that
> the data is a vp8 frame and how to parse the vp8 header to see if it is an
> alt-ref frame. Same is true with demuxers sending frames down the pipeline.
This system was created for the WavPack hybrid mode. The main track is
a lossy codec and the BlockAddition part is the complementary data to
have the lossless version. In this case a muxer can strip the
additional data to keep only the lossy part. In the case of the
alt-ref frame it cannot be removed otherwise it breaks decoding.
There's not a bit left to handle this ? That would be pretty easy to
>> There's one last option: frame packing. The VP8 encoder/decoder is
>> responsible for (un)packing the AF and FF frames together in one
>> buffer (one Frame as seen by Matroska). Just like the MPEG 4.2
>> B-frames were done in AVI.
>
> Ahh yes. I agree this would be the best option, but we cannot do this option
> without breaking the bitstream (which we cannot do), or defining a new codec
> ID with frame packed header ala VP6 vs VP6F. For the next generation I have
> made sure that the codec guys will support frame packing, but that does not
> help us today.
handle the extra check on your decoder library.
It should not be added. It replaces the duration when it is not set
> Another question I raised if the interaction of DefaultDuration and
> SimpleBlocks? If you read the spec and the files that FFmpeg currently
> generates with altref frames it would seem that the with every altref frame
> DefaultDuration time is being added to the overall duration of the video
(in SimpleBlock for example).
I assume some framework don't use duration for frames. This is usually
> stream. This would mess with av sync but the timestamps are correct. All
> players can handle these files correctly. It seems like most players just
> ignore DefaultDuration wrt SimpleBlocks. Is this the correct behavior?
fine for decoding, in the end you only need the PTS (hence we don't
use a DTS).
It can be useful to recover the start timecode in laces (thus it
> Truthfully I don't fully understand why you would need to set a
> DefaultDuration on a video stream in a timestamp based container. If the
> framerate is non-integral it seems like they are going to be at odds with
> each other.
should not be used with Vorbis which doesn't have a fixed framerate).
It is also used to tell the fps of a track for video.
--
On Sat, Jul 16, 2011 at 4:41 AM, Steve Lhomme <slh...@matroska.org> wrote:
> On Fri, Jul 15, 2011 at 8:00 PM, Frank Galligan <fgal...@google.com> wrote:
>> On Thu, Jul 14, 2011 at 12:32 PM, Steve Lhomme <slh...@matroska.org> wrote:
[...]
>
> Matroska stores Presentation TimeStamps (PTS) and no Decoding
> TimeStamps (DTS). And the frames are in coding order (ie DTS always
> increasing, but not necessarily PTS). It seems very odd that 2 frames
> should be rendered at the same time on the same data pipeline. It may
> not be the case in the few programs you tested, but I'm not sure you
> are planning to check with all multimedia framework makers to make
> sure such a rule doesn't break their internal working. Also because
> the PTS can be decreasing in some case (when B frames are involved),
> that means there has to be a reordering in the pipeline, based on the
> timecode. Reordering 2 frames that have the same timecode could lead
> to unexpected behaviours.
The reordering happens in the decoder. Any framework that supports
b-frames has to support passing a frame to the decoder but not getting
one back, or passing one and getting multiple back. We rely on the
first behavior in VP8.
>
> The original BlockGroup+Block+BlockReference(s) was designed so that a
> program that only knows about the container (not the codec internals)
> can edit a file and keep all the frames that are needed to display the
> desired edit. That's where the invisible flag was introduced, so that
> reference frames that are outside of the edit are still part of the
> file, but not displayed.
>
> Imagine this example of video frames :
> A(k) B(alt) C(-1) D(-2)
> (k: keyframe, alt: alt-ref frame, -: references the x frame behind
>
> If you cut at D, it has a references to B. With BlockGroup the
> BlockReference would be the timecode of B. But if the timecode of B
> and C are the same, which one are you supposed to keep ? That's why
> it's better to avoid having frames with the same timecode.
>
In VP8, D references A, B, and C, unless you go out of your way to
avoid that, as you might for error resiliency. There is a quality
penalty for doing that though, so any time you're using a reliable
transport like local disk or HTTP, you would leave that feature off.
It's off by default in libvpx.
In a little more detail, each macroblock in VP8 can be reconstructed
from one of 4 frames (the current frame, and one of 3 reference
buffers). In addition, it has an entropy model which can receive
partial updates on every frame, and they persist from frame to frame.
You can get information about which frames are referenced and whether
a frame is droppable at encode time, but it's expensive on the decode
side.
> Of course when using only SimpleBlock you lose that editing
> possibility. But does it mean VP8 will always be prevented from being
> used in non linear editors ?
>
Frame accurate cutting is not not easy with VP8 if you don't encode
with this use in mind, regardless of how it's muxed.
> Plus a alt-frame doesn't have a PTS, only a range for the DTS. If it
> has no PTS there's no reason to have a fake one, it only creates
> problems. Plus it also breaks the rule of one frame in/one frame out
> that most frameworks use.
>
It only breaks the 1i1o rule end to end, which doesn't affect any
framework we know about. At the decoder, 1i1o is not expected.
> Now in the light of this, frame packing would not be ideal either. If
> you want D, you'd need B+C. But then B+C would be marked as invisible.
> You only lose some decoding CPU decoding C which is never used.
>
It's possible to skip the bulk of the decoding of C if you told the
decoder you weren't going to display it. Not supported in libvpx
today, but I think ffvp8 supports this.
[...]
>>> There's one last option: frame packing. The VP8 encoder/decoder is
>>> responsible for (un)packing the AF and FF frames together in one
>>> buffer (one Frame as seen by Matroska). Just like the MPEG 4.2
>>> B-frames were done in AVI.
>>
>> Ahh yes. I agree this would be the best option, but we cannot do this option
>> without breaking the bitstream (which we cannot do), or defining a new codec
>> ID with frame packed header ala VP6 vs VP6F. For the next generation I have
>> made sure that the codec guys will support frame packing, but that does not
>> help us today.
>
> There's not a bit left to handle this ? That would be pretty easy to
> handle the extra check on your decoder library.
>
There are multiple decoders and device drivers that all would have to
be updated. Ignoring the problems of rollout and existing content,
there are a few ways this could be done, but it's fairly tricky to do
and still support frame parallel decoding due to the way the VP8
payload is defined. In any case, it boils down to putting a container
within a container. There are also use cases I can imagine for having
runs of N invisible frames, which doesn't fit well with a packed
format at all. Bottom line, I think we can do better next time, but
it's not worth piling on hacks when the current practice of using
SimpleBlocks and either monotonically increasing or synthetic
timestamps works and is reasonably intuitive, imo. The other methods
presented seem like more work with no benefit to me.
[...]
>> Truthfully I don't fully understand why you would need to set a
>> DefaultDuration on a video stream in a timestamp based container. If the
>> framerate is non-integral it seems like they are going to be at odds with
>> each other.
>
> It can be useful to recover the start timecode in laces (thus it
> should not be used with Vorbis which doesn't have a fixed framerate).
> It is also used to tell the fps of a track for video.
>
It's not any better for determining fps than the FrameRate parameter
is (ie, informational). It doesn't have enough resolution at most time
code scales.
From the discussion it seems the crucial part is that demuxers don't
actually reorder frames on their own. So having 2 frames with the same
timecode may not be such a big deal after all. It should just be
defined that in case of "raw editing" because of the possible mismatch
with a reference, they both should be kept (and in that order).
Do everyone agrees with this ?
Steve
> Note in some WebM files that are using BlockGroups/Blocks with
> ReferenceBlock elements there could be a case that a ReferenceBlock is
> referincing more than one Block with the same timestamp. In this case the
> muxer/demuxer may not know which of the Blocks is referenced and MUST treat
> the ReferenceBlock as refernecing all of the Blocks with the same timestamp.
>
I think this could be worded more simply. Maybe something like:
If the timecode stored in a ReferenceBlock is shared by multiple
Blocks the muxer/demuxer MUST treat all the Blocks as referenced.
On Monday, July 4, 2011 at 2:28:27 AM UTC-5, fishor wrote:Hallo all,
i see vpxenc set 0x8 flag on each matroska block in case of invisible
frame.
Is it used for debug purpose? Or there any documentation hot to use in
for decoding?
Regards,
Alexey