]> granicus.if.org Git - libvpx/blobdiff - test/y4m_video_source.h
Merge "build/make/configure.sh: Fix armv7 builds in Xcode7."
[libvpx] / test / y4m_video_source.h
index bd86c2c042bec6a181540ea35cfd57f6df032e15..378e75bf8aa0839128523c04c9b37546db5866d0 100644 (file)
@@ -12,9 +12,7 @@
 #include <string>
 
 #include "test/video_source.h"
-extern "C" {
 #include "./y4minput.h"
-}
 
 namespace libvpx_test {
 
@@ -37,30 +35,33 @@ class Y4mVideoSource : public VideoSource {
 
   virtual ~Y4mVideoSource() {
     vpx_img_free(img_.get());
-    y4m_input_close(&y4m_);
-    if (input_file_)
-      fclose(input_file_);
+    CloseSource();
   }
 
-  virtual void Begin() {
-    if (input_file_)
-      fclose(input_file_);
+  virtual void OpenSource() {
+    CloseSource();
     input_file_ = OpenTestDataFile(file_name_);
     ASSERT_TRUE(input_file_ != NULL) << "Input file open failed. Filename: "
-        << file_name_;
+                                     << file_name_;
+  }
 
-    y4m_input_open(&y4m_, input_file_, NULL, 0, 0);
+  virtual void ReadSourceToStart() {
+    ASSERT_TRUE(input_file_ != NULL);
+    ASSERT_FALSE(y4m_input_open(&y4m_, input_file_, NULL, 0, 0));
     framerate_numerator_ = y4m_.fps_n;
     framerate_denominator_ = y4m_.fps_d;
-
     frame_ = 0;
     for (unsigned int i = 0; i < start_; i++) {
-        Next();
+      Next();
     }
-
     FillFrame();
   }
 
+  virtual void Begin() {
+    OpenSource();
+    ReadSourceToStart();
+  }
+
   virtual void Next() {
     ++frame_;
     FillFrame();
@@ -91,6 +92,15 @@ class Y4mVideoSource : public VideoSource {
   }
 
  protected:
+  void CloseSource() {
+    y4m_input_close(&y4m_);
+    y4m_ = y4m_input();
+    if (input_file_ != NULL) {
+      fclose(input_file_);
+      input_file_ = NULL;
+    }
+  }
+
   std::string file_name_;
   FILE *input_file_;
   testing::internal::scoped_ptr<vpx_image_t> img_;