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`.
This commit is contained in:
Stefan Pöschel 2019-01-19 22:51:38 +01:00 committed by wm4
parent 41f290f54e
commit 3ee6d7db4e
1 changed files with 2 additions and 2 deletions

View File

@ -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,