L2E: Make SimpleEncode take vp9 level as an input
Level conformance is standadized in vp9. If a specific target level is set, the vp9 encoder is required to produce conformant bitstream with limit on frame size, rate, min alt-ref distance, etc. This change makes the SimpleEncode environment take the target level as an input. To make existing tests pass, we set the level to 0. Change-Id: Ia35224f75c2fe50338b5b86a50c84355f5daf6fd
This commit is contained in:
@@ -782,11 +782,12 @@ static void UpdateEncodeConfig(const EncodeConfig &config,
|
||||
|
||||
static VP9EncoderConfig GetEncodeConfig(
|
||||
int frame_width, int frame_height, vpx_rational_t frame_rate,
|
||||
int target_bitrate, int encode_speed, vpx_enc_pass enc_pass,
|
||||
int target_bitrate, int encode_speed, int target_level,
|
||||
vpx_enc_pass enc_pass,
|
||||
const std::vector<EncodeConfig> &encode_config_list) {
|
||||
VP9EncoderConfig oxcf =
|
||||
vp9_get_encoder_config(frame_width, frame_height, frame_rate,
|
||||
target_bitrate, encode_speed, enc_pass);
|
||||
VP9EncoderConfig oxcf = vp9_get_encoder_config(
|
||||
frame_width, frame_height, frame_rate, target_bitrate, encode_speed,
|
||||
target_level, enc_pass);
|
||||
for (const auto &config : encode_config_list) {
|
||||
UpdateEncodeConfig(config, &oxcf);
|
||||
}
|
||||
@@ -799,7 +800,7 @@ static VP9EncoderConfig GetEncodeConfig(
|
||||
|
||||
SimpleEncode::SimpleEncode(int frame_width, int frame_height,
|
||||
int frame_rate_num, int frame_rate_den,
|
||||
int target_bitrate, int num_frames,
|
||||
int target_bitrate, int num_frames, int target_level,
|
||||
const char *infile_path, const char *outfile_path) {
|
||||
impl_ptr_ = std::unique_ptr<EncodeImpl>(new EncodeImpl());
|
||||
frame_width_ = frame_width;
|
||||
@@ -809,6 +810,7 @@ SimpleEncode::SimpleEncode(int frame_width, int frame_height,
|
||||
target_bitrate_ = target_bitrate;
|
||||
num_frames_ = num_frames;
|
||||
encode_speed_ = 0;
|
||||
target_level_ = target_level;
|
||||
|
||||
frame_coding_index_ = 0;
|
||||
show_frame_count_ = 0;
|
||||
@@ -860,9 +862,9 @@ StatusCode SimpleEncode::DumpEncodeConfigs(int pass, FILE *fp) {
|
||||
}
|
||||
const vpx_rational_t frame_rate =
|
||||
make_vpx_rational(frame_rate_num_, frame_rate_den_);
|
||||
const VP9EncoderConfig oxcf =
|
||||
GetEncodeConfig(frame_width_, frame_height_, frame_rate, target_bitrate_,
|
||||
encode_speed_, enc_pass, impl_ptr_->encode_config_list);
|
||||
const VP9EncoderConfig oxcf = GetEncodeConfig(
|
||||
frame_width_, frame_height_, frame_rate, target_bitrate_, encode_speed_,
|
||||
target_level_, enc_pass, impl_ptr_->encode_config_list);
|
||||
vp9_dump_encoder_config(&oxcf, fp);
|
||||
return StatusOk;
|
||||
}
|
||||
@@ -872,7 +874,7 @@ void SimpleEncode::ComputeFirstPassStats() {
|
||||
make_vpx_rational(frame_rate_num_, frame_rate_den_);
|
||||
const VP9EncoderConfig oxcf = GetEncodeConfig(
|
||||
frame_width_, frame_height_, frame_rate, target_bitrate_, encode_speed_,
|
||||
VPX_RC_FIRST_PASS, impl_ptr_->encode_config_list);
|
||||
target_level_, VPX_RC_FIRST_PASS, impl_ptr_->encode_config_list);
|
||||
impl_ptr_->cpi = init_encoder(&oxcf, impl_ptr_->img_fmt);
|
||||
struct lookahead_ctx *lookahead = impl_ptr_->cpi->lookahead;
|
||||
int i;
|
||||
@@ -1038,7 +1040,7 @@ void SimpleEncode::StartEncode() {
|
||||
make_vpx_rational(frame_rate_num_, frame_rate_den_);
|
||||
VP9EncoderConfig oxcf = GetEncodeConfig(
|
||||
frame_width_, frame_height_, frame_rate, target_bitrate_, encode_speed_,
|
||||
VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
|
||||
target_level_, VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
|
||||
|
||||
vpx_fixed_buf_t stats;
|
||||
stats.buf = GetVectorData(impl_ptr_->first_pass_stats);
|
||||
@@ -1266,7 +1268,7 @@ int SimpleEncode::GetCodingFrameNum() const {
|
||||
make_vpx_rational(frame_rate_num_, frame_rate_den_);
|
||||
const VP9EncoderConfig oxcf = GetEncodeConfig(
|
||||
frame_width_, frame_height_, frame_rate, target_bitrate_, encode_speed_,
|
||||
VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
|
||||
target_level_, VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
|
||||
FRAME_INFO frame_info = vp9_get_frame_info(&oxcf);
|
||||
fps_init_first_pass_info(&twopass.first_pass_info,
|
||||
GetVectorData(impl_ptr_->first_pass_stats),
|
||||
@@ -1285,7 +1287,7 @@ std::vector<int> SimpleEncode::ComputeKeyFrameMap() const {
|
||||
make_vpx_rational(frame_rate_num_, frame_rate_den_);
|
||||
const VP9EncoderConfig oxcf = GetEncodeConfig(
|
||||
frame_width_, frame_height_, frame_rate, target_bitrate_, encode_speed_,
|
||||
VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
|
||||
target_level_, VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
|
||||
TWO_PASS twopass;
|
||||
fps_init_first_pass_info(&twopass.first_pass_info,
|
||||
GetVectorData(impl_ptr_->first_pass_stats),
|
||||
|
||||
Reference in New Issue
Block a user