summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorCheng Chen <chengchen@google.com>2022-04-05 18:25:23 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-04-05 18:25:23 +0000
commit6e1b7c6c14fea5d972bdd1162b51fc93942222a2 (patch)
tree3204e2cc40cae1c87d86dccdcedb356630179048 /vp9
parent96a509ee0363d19bec589542f8b676caf2608d13 (diff)
parent2c32425851cb89a1623ac7f3cf3d7bbba7aa32c6 (diff)
downloadlibvpx-6e1b7c6c14fea5d972bdd1162b51fc93942222a2.tar
libvpx-6e1b7c6c14fea5d972bdd1162b51fc93942222a2.tar.gz
libvpx-6e1b7c6c14fea5d972bdd1162b51fc93942222a2.tar.bz2
libvpx-6e1b7c6c14fea5d972bdd1162b51fc93942222a2.zip
Merge "L2E: Make SimpleEncode take vp9 level as an input" into main
Diffstat (limited to 'vp9')
-rw-r--r--vp9/simple_encode.cc26
-rw-r--r--vp9/simple_encode.h24
-rw-r--r--vp9/vp9_cx_iface.c6
-rw-r--r--vp9/vp9_cx_iface.h1
4 files changed, 43 insertions, 14 deletions
diff --git a/vp9/simple_encode.cc b/vp9/simple_encode.cc
index 6ba37a321..1a0ada119 100644
--- a/vp9/simple_encode.cc
+++ b/vp9/simple_encode.cc
@@ -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),
diff --git a/vp9/simple_encode.h b/vp9/simple_encode.h
index 8ec7069e8..7920e95ee 100644
--- a/vp9/simple_encode.h
+++ b/vp9/simple_encode.h
@@ -44,6 +44,26 @@ enum RefFrameType {
kRefFrameTypeNone = -1,
};
+enum VP9_LEVEL {
+ LEVEL_UNKNOWN = 0,
+ LEVEL_AUTO = 1,
+ LEVEL_1 = 10,
+ LEVEL_1_1 = 11,
+ LEVEL_2 = 20,
+ LEVEL_2_1 = 21,
+ LEVEL_3 = 30,
+ LEVEL_3_1 = 31,
+ LEVEL_4 = 40,
+ LEVEL_4_1 = 41,
+ LEVEL_5 = 50,
+ LEVEL_5_1 = 51,
+ LEVEL_5_2 = 52,
+ LEVEL_6 = 60,
+ LEVEL_6_1 = 61,
+ LEVEL_6_2 = 62,
+ LEVEL_MAX = 255
+};
+
enum GopMapFlag {
kGopMapFlagStart =
1 << 0, // Indicate this location is the start of a group of pictures.
@@ -343,7 +363,8 @@ class SimpleEncode {
// format.
SimpleEncode(int frame_width, int frame_height, int frame_rate_num,
int frame_rate_den, int target_bitrate, int num_frames,
- const char *infile_path, const char *outfile_path = nullptr);
+ int target_level, const char *infile_path,
+ const char *outfile_path = nullptr);
~SimpleEncode();
SimpleEncode(SimpleEncode &) = delete;
SimpleEncode &operator=(const SimpleEncode &) = delete;
@@ -513,6 +534,7 @@ class SimpleEncode {
int target_bitrate_;
int num_frames_;
int encode_speed_;
+ int target_level_;
std::FILE *in_file_;
std::FILE *out_file_;
diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c
index 76274437c..b809ab3e6 100644
--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -2143,6 +2143,7 @@ static vp9_extracfg get_extra_cfg() {
VP9EncoderConfig vp9_get_encoder_config(int frame_width, int frame_height,
vpx_rational_t frame_rate,
int target_bitrate, int encode_speed,
+ int target_level,
vpx_enc_pass enc_pass) {
/* This function will generate the same VP9EncoderConfig used by the
* vpxenc command given below.
@@ -2154,6 +2155,7 @@ VP9EncoderConfig vp9_get_encoder_config(int frame_width, int frame_height,
* FPS: frame_rate
* BITRATE: target_bitrate
* CPU_USED:encode_speed
+ * TARGET_LEVEL: target_level
*
* INPUT, OUTPUT, LIMIT will not affect VP9EncoderConfig
*
@@ -2166,6 +2168,7 @@ VP9EncoderConfig vp9_get_encoder_config(int frame_width, int frame_height,
* FPS=30/1
* LIMIT=150
* CPU_USED=0
+ * TARGET_LEVEL=0
* ./vpxenc --limit=$LIMIT --width=$WIDTH --height=$HEIGHT --fps=$FPS
* --lag-in-frames=25 \
* --codec=vp9 --good --cpu-used=CPU_USED --threads=0 --profile=0 \
@@ -2174,7 +2177,7 @@ VP9EncoderConfig vp9_get_encoder_config(int frame_width, int frame_height,
* --minsection-pct=0 --maxsection-pct=150 --arnr-maxframes=7 --psnr \
* --arnr-strength=5 --sharpness=0 --undershoot-pct=100 --overshoot-pct=100 \
* --frame-parallel=0 --tile-columns=0 --cpu-used=0 --end-usage=vbr \
- * --target-bitrate=$BITRATE -o $OUTPUT $INPUT
+ * --target-bitrate=$BITRATE --target-level=0 -o $OUTPUT $INPUT
*/
VP9EncoderConfig oxcf;
@@ -2192,6 +2195,7 @@ VP9EncoderConfig vp9_get_encoder_config(int frame_width, int frame_height,
oxcf.frame_parallel_decoding_mode = 0;
oxcf.two_pass_vbrmax_section = 150;
oxcf.speed = abs(encode_speed);
+ oxcf.target_level = target_level;
return oxcf;
}
diff --git a/vp9/vp9_cx_iface.h b/vp9/vp9_cx_iface.h
index 01338adb4..f2de8507f 100644
--- a/vp9/vp9_cx_iface.h
+++ b/vp9/vp9_cx_iface.h
@@ -20,6 +20,7 @@ extern "C" {
VP9EncoderConfig vp9_get_encoder_config(int frame_width, int frame_height,
vpx_rational_t frame_rate,
int target_bitrate, int encode_speed,
+ int target_level,
vpx_enc_pass enc_pass);
void vp9_dump_encoder_config(const VP9EncoderConfig *oxcf, FILE *fp);