Add hook functions in driver to facilitate sub-gop unit test
This patch includes hook functions required to handle encode
result and decoder input, in order to facilitate sub-gop unit test.
Change-Id: I0a14b73c8be407188aff3d42f7c2b2b6d41949e0
diff --git a/test/encode_test_driver.cc b/test/encode_test_driver.cc
index a304eb7..33468f8 100644
--- a/test/encode_test_driver.cc
+++ b/test/encode_test_driver.cc
@@ -215,10 +215,11 @@
for (int sl = 0; sl < number_spatial_layers_; sl++) {
PreEncodeFrameHook(video);
PreEncodeFrameHook(video, encoder.get());
+ PreDecodeFrameHook(video, decoder.get());
encoder->EncodeFrame(video, frame_flags_);
CxDataIterator iter = encoder->GetCxData();
-
+ if (!HandleEncodeResult(video, encoder.get())) break;
bool has_cxdata = false;
bool has_dxdata = false;
while (const aom_codec_cx_pkt_t *pkt = iter.Next()) {
diff --git a/test/encode_test_driver.h b/test/encode_test_driver.h
index a511936..f788ec9 100644
--- a/test/encode_test_driver.h
+++ b/test/encode_test_driver.h
@@ -136,6 +136,11 @@
ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
}
+ void Control(int ctrl_id, const void *arg) {
+ const aom_codec_err_t res = aom_codec_control(&encoder_, ctrl_id, arg);
+ ASSERT_EQ(AOM_CODEC_OK, res) << EncoderError();
+ }
+
#if CONFIG_AV1_ENCODER
void Control(int ctrl_id, aom_active_map_t *arg) {
const aom_codec_err_t res = aom_codec_control(&encoder_, ctrl_id, arg);
@@ -224,6 +229,10 @@
return !(::testing::Test::HasFatalFailure() || abort_);
}
+ // Hook to call before decoding a frame.
+ virtual void PreDecodeFrameHook(VideoSource * /*video*/,
+ Decoder * /*decoder*/) {}
+
// Hook to determine whether to decode frame after encoding
virtual bool DoDecode() const { return true; }
@@ -244,6 +253,12 @@
return AOM_CODEC_OK == res_dec;
}
+ // Hook to be called to handle encode result. Return true to continue.
+ virtual bool HandleEncodeResult(VideoSource * /*video*/,
+ Encoder * /*encoder*/) {
+ return 1;
+ }
+
virtual int GetNumSpatialLayers() { return 1; }
// Hook that can modify the encoder's output data