diff options
author | Stefan Pöschel <github@basicmaster.de> | 2019-01-19 22:51:38 +0100 |
---|---|---|
committer | wm4 <1387750+wm4@users.noreply.github.com> | 2019-09-26 11:53:42 +0200 |
commit | 3ee6d7db4e2e61465d18db05a8346086ffa0884b (patch) | |
tree | 2f01f56df77c09603645a36100965977d2486936 /player | |
parent | 41f290f54e385f28257bd24e8f399bcb7f3727b7 (diff) | |
download | mpv-3ee6d7db4e2e61465d18db05a8346086ffa0884b.tar.bz2 mpv-3ee6d7db4e2e61465d18db05a8346086ffa0884b.tar.xz |
command: fix bitrate rounding error
When the (float) bitrate is returned, it is implicitely converted to an
int64 value, merely discarding the fractional part.
However the bitrate of a CBR track can vary a bit due to timestamp
precision loss after clock conversion (this can affect MPEG-TS audio
tracks). So a bitrate like 191999.999... results in 191999 when
being returned - instead of 192000.
To fix this, apply proper rounding, as already done for the "old" case.
Hereby refactoring the "old" case to also use `llrint`.
Diffstat (limited to 'player')
-rw-r--r-- | player/command.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/player/command.c b/player/command.c index d30c84d82d..f97f699259 100644 --- a/player/command.c +++ b/player/command.c @@ -3107,7 +3107,7 @@ static int mp_property_packet_bitrate(void *ctx, struct m_property *prop, // Same story, but used kilobits for some reason. if (old) - return m_property_int64_ro(action, arg, rate / 1000.0 + 0.5); + return m_property_int64_ro(action, arg, llrint(rate / 1000.0)); if (action == M_PROPERTY_PRINT) { rate /= 1000; @@ -3118,7 +3118,7 @@ static int mp_property_packet_bitrate(void *ctx, struct m_property *prop, } return M_PROPERTY_OK; } - return m_property_int64_ro(action, arg, rate); + return m_property_int64_ro(action, arg, llrint(rate)); } static int mp_property_cwd(void *ctx, struct m_property *prop, |