mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-13 04:41:16 +00:00
xingmux: Properly calculate the number of frames
First, the xing header frame is never added to the count, we have to increment the count. Secondly, there is a rounding error when calculating the frame duration, as spf*GST_SECOND/rate is not an integer (26122448.9) an it must be 26122449.
This commit is contained in:
parent
56002b3fba
commit
cf3e901996
1 changed files with 2 additions and 1 deletions
|
@ -318,6 +318,7 @@ generate_xing_header (GstXingMux * xing)
|
|||
* SamplesPerFrame and SamplingRate are values for the current frame.
|
||||
*/
|
||||
number_of_frames = gst_util_uint64_scale (duration, rate, GST_SECOND) / spf;
|
||||
number_of_frames += 1; /* Xing Header Frame */
|
||||
GST_DEBUG ("Setting number of frames to %u", number_of_frames);
|
||||
number_of_frames = GUINT32_TO_BE (number_of_frames);
|
||||
memcpy (data, &number_of_frames, 4);
|
||||
|
@ -555,7 +556,7 @@ gst_xing_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
|||
seek_entry->byte = (seek_entry->timestamp == 0) ? 0 : xing->byte_count;
|
||||
xing->seek_table = g_list_append (xing->seek_table, seek_entry);
|
||||
|
||||
duration = gst_util_uint64_scale (spf, GST_SECOND, rate);
|
||||
duration = gst_util_uint64_scale_ceil (spf, GST_SECOND, rate);
|
||||
|
||||
GST_BUFFER_TIMESTAMP (outbuf) =
|
||||
(xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
|
||||
|
|
Loading…
Reference in a new issue