C2SoftHevcEnc: Add support for dynamic bitrate change
Test: Manual with a application based on AMediaCodec api
Bug: 125938526
Change-Id: Idefe6291d8d7185400d20a7c95c9ea5070a0b196
diff --git a/media/codec2/components/hevc/C2SoftHevcEnc.cpp b/media/codec2/components/hevc/C2SoftHevcEnc.cpp
index 0d3357f..fb2da7c 100644
--- a/media/codec2/components/hevc/C2SoftHevcEnc.cpp
+++ b/media/codec2/components/hevc/C2SoftHevcEnc.cpp
@@ -865,6 +865,22 @@
return;
}
}
+
+ // handle dynamic config parameters
+ {
+ IntfImpl::Lock lock = mIntf->lock();
+ std::shared_ptr<C2StreamBitrateInfo::output> bitrate = mIntf->getBitrate_l();
+ lock.unlock();
+
+ if (bitrate != mBitrate) {
+ mBitrate = bitrate;
+ mEncParams.s_tgt_lyr_prms.as_tgt_params[0].ai4_tgt_bitrate[0] =
+ mBitrate->value;
+ mEncParams.s_tgt_lyr_prms.as_tgt_params[0].ai4_peak_bitrate[0] =
+ mBitrate->value << 1;
+ }
+ }
+
ihevce_inp_buf_t s_encode_ip{};
ihevce_out_buf_t s_encode_op{};
uint64_t workIndex = work->input.ordinal.frameIndex.peekull();