mjpeg_encoder: add mjpeg_encoder_get_stats

This commit is contained in:
Yonit Halperin 2013-06-24 12:36:31 -04:00
parent 1377732805
commit a9f1a4b75d
2 changed files with 18 additions and 0 deletions

View File

@ -169,6 +169,7 @@ struct MJpegEncoder {
void *cbs_opaque;
/* stats */
uint64_t starting_bit_rate;
uint64_t avg_quality;
uint32_t num_frames;
};
@ -195,6 +196,8 @@ MJpegEncoder *mjpeg_encoder_new(int bit_rate_control, uint64_t starting_bit_rate
enc->first_frame = TRUE;
enc->rate_control_is_active = bit_rate_control;
enc->rate_control.byte_rate = starting_bit_rate / 8;
enc->starting_bit_rate = starting_bit_rate;
if (bit_rate_control) {
struct timespec time;
@ -1259,3 +1262,11 @@ uint64_t mjpeg_encoder_get_bit_rate(MJpegEncoder *encoder)
{
return encoder->rate_control.byte_rate * 8;
}
void mjpeg_encoder_get_stats(MJpegEncoder *encoder, MJpegEncoderStats *stats)
{
spice_assert(encoder != NULL && stats != NULL);
stats->starting_bit_rate = encoder->starting_bit_rate;
stats->cur_bit_rate = mjpeg_encoder_get_bit_rate(encoder);
stats->avg_quality = (double)encoder->avg_quality / encoder->num_frames;
}

View File

@ -43,6 +43,12 @@ typedef struct MJpegEncoderRateControlCbs {
void (*update_client_playback_delay)(void *opaque, uint32_t delay_ms);
} MJpegEncoderRateControlCbs;
typedef struct MJpegEncoderStats {
uint64_t starting_bit_rate;
uint64_t cur_bit_rate;
double avg_quality;
} MJpegEncoderStats;
MJpegEncoder *mjpeg_encoder_new(int bit_rate_control, uint64_t starting_bit_rate,
MJpegEncoderRateControlCbs *cbs, void *opaque);
void mjpeg_encoder_destroy(MJpegEncoder *encoder);
@ -103,5 +109,6 @@ void mjpeg_encoder_client_stream_report(MJpegEncoder *encoder,
void mjpeg_encoder_notify_server_frame_drop(MJpegEncoder *encoder);
uint64_t mjpeg_encoder_get_bit_rate(MJpegEncoder *encoder);
void mjpeg_encoder_get_stats(MJpegEncoder *encoder, MJpegEncoderStats *stats);
#endif