Opened 5 months ago
#10134 new defect
Timescale value in manifest inconsistent in DASH Template mode vs Timeline mode
Reported by: | Peter Chave | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avformat |
Version: | git-master | Keywords: | timescale dash manifest init segment initialization template timeline |
Cc: | Peter Chave | Blocked By: | |
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
When using the DASH muxer output, if mode is set to use_template then the timescale value in manifest is always 1,000,000
However the timescale value set in the initialization segment is based on encoding configuration.
Example:
DASH stream with encoded video at 29.97fps results in:
Manifest timescale = 1,000,000
Init segment timescale = 30,000
DASH stream with encoded video at 30fps results in:
Manifest timescale = 1,000,000
Init segment timescale = 15,360
The understanding is that both the manifest and init segment should use the same timescale.
If the mode is set use_timeline
Then timescale value in the manifest AND init segment are the same.
Possible reason:
Inspecting the source code /libavformat/dashenc.c
line 654 appears to answer the question why does this occur.
That section of code starts with a conditional on use_template
However the very next line (655) sets timescale based on an inline conditional statement based on use_timeline.
That inline conditional will set the timescale variable always to AV_TIME_BASE
AV_TIME_BASE is defined in libavutil/avutil.h as being 1000000
Can someone determine if this is the root cause of the misalignment between Manifest and Init segment timescales?
If so what was the intend of the inline conditional?
If this is not the cause can it be investigated further to determine the true root cause?