77 lines
1.5 KiB
C++
77 lines
1.5 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "dynamic_bitrate_helper.h"
|
|
|
|
static unsigned g_query_settings()
|
|
{
|
|
t_int32 temp;
|
|
try {
|
|
config_object::g_get_data_int32(standard_config_objects::int32_dynamic_bitrate_display_rate,temp);
|
|
} catch(std::exception const &) {return 9;}
|
|
if (temp < 0) return 0;
|
|
return (unsigned) temp;
|
|
}
|
|
|
|
dynamic_bitrate_helper::dynamic_bitrate_helper()
|
|
{
|
|
reset();
|
|
}
|
|
|
|
void dynamic_bitrate_helper::init()
|
|
{
|
|
if (!m_inited)
|
|
{
|
|
m_inited = true;
|
|
unsigned temp = g_query_settings();
|
|
if (temp > 0) {m_enabled = true; m_update_interval = 1.0 / (double) temp; }
|
|
else {m_enabled = false; m_update_interval = 0; }
|
|
m_last_duration = 0;
|
|
m_update_bits = 0;
|
|
m_update_time = 0;
|
|
|
|
}
|
|
}
|
|
|
|
void dynamic_bitrate_helper::on_frame(double p_duration,t_size p_bits)
|
|
{
|
|
init();
|
|
m_last_duration = p_duration;
|
|
m_update_time += p_duration;
|
|
m_update_bits += p_bits;
|
|
}
|
|
|
|
bool dynamic_bitrate_helper::on_update(file_info & p_out, double & p_timestamp_delta)
|
|
{
|
|
init();
|
|
|
|
bool ret = false;
|
|
if (m_enabled)
|
|
{
|
|
if (m_update_time > m_update_interval)
|
|
{
|
|
int val = (int) ( ((double)m_update_bits / m_update_time + 500.0) / 1000.0 );
|
|
if (val != p_out.info_get_bitrate_vbr())
|
|
{
|
|
p_timestamp_delta = - (m_update_time - m_last_duration); //relative to last frame beginning;
|
|
p_out.info_set_bitrate_vbr(val);
|
|
ret = true;
|
|
}
|
|
m_update_bits = 0;
|
|
m_update_time = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_update_bits = 0;
|
|
m_update_time = 0;
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
void dynamic_bitrate_helper::reset()
|
|
{
|
|
m_inited = false;
|
|
}
|