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