diff --git a/test/yuv_video_source.h b/test/yuv_video_source.h
index 33a31d4..a0eabce 100644
--- a/test/yuv_video_source.h
+++ b/test/yuv_video_source.h
@@ -15,7 +15,7 @@
 #include <string>
 
 #include "test/video_source.h"
-#include "aom/vpx_image.h"
+#include "aom/aom_image.h"
 
 namespace libaom_test {
 
@@ -24,19 +24,19 @@
 // do actual file encodes.
 class YUVVideoSource : public VideoSource {
  public:
-  YUVVideoSource(const std::string &file_name, vpx_img_fmt format,
+  YUVVideoSource(const std::string &file_name, aom_img_fmt format,
                  unsigned int width, unsigned int height, int rate_numerator,
                  int rate_denominator, unsigned int start, int limit)
       : file_name_(file_name), input_file_(NULL), img_(NULL), start_(start),
         limit_(limit), frame_(0), width_(0), height_(0),
-        format_(VPX_IMG_FMT_NONE), framerate_numerator_(rate_numerator),
+        format_(AOM_IMG_FMT_NONE), framerate_numerator_(rate_numerator),
         framerate_denominator_(rate_denominator) {
     // This initializes format_, raw_size_, width_, height_ and allocates img.
     SetSize(width, height, format);
   }
 
   virtual ~YUVVideoSource() {
-    vpx_img_free(img_);
+    aom_img_free(img_);
     if (input_file_) fclose(input_file_);
   }
 
@@ -57,15 +57,15 @@
     FillFrame();
   }
 
-  virtual vpx_image_t *img() const { return (frame_ < limit_) ? img_ : NULL; }
+  virtual aom_image_t *img() const { return (frame_ < limit_) ? img_ : NULL; }
 
   // Models a stream where Timebase = 1/FPS, so pts == frame.
-  virtual vpx_codec_pts_t pts() const { return frame_; }
+  virtual aom_codec_pts_t pts() const { return frame_; }
 
   virtual unsigned long duration() const { return 1; }
 
-  virtual vpx_rational_t timebase() const {
-    const vpx_rational_t t = { framerate_denominator_, framerate_numerator_ };
+  virtual aom_rational_t timebase() const {
+    const aom_rational_t t = { framerate_denominator_, framerate_numerator_ };
     return t;
   }
 
@@ -74,23 +74,23 @@
   virtual unsigned int limit() const { return limit_; }
 
   virtual void SetSize(unsigned int width, unsigned int height,
-                       vpx_img_fmt format) {
+                       aom_img_fmt format) {
     if (width != width_ || height != height_ || format != format_) {
-      vpx_img_free(img_);
-      img_ = vpx_img_alloc(NULL, format, width, height, 1);
+      aom_img_free(img_);
+      img_ = aom_img_alloc(NULL, format, width, height, 1);
       ASSERT_TRUE(img_ != NULL);
       width_ = width;
       height_ = height;
       format_ = format;
       switch (format) {
-        case VPX_IMG_FMT_I420: raw_size_ = width * height * 3 / 2; break;
-        case VPX_IMG_FMT_I422: raw_size_ = width * height * 2; break;
-        case VPX_IMG_FMT_I440: raw_size_ = width * height * 2; break;
-        case VPX_IMG_FMT_I444: raw_size_ = width * height * 3; break;
-        case VPX_IMG_FMT_I42016: raw_size_ = width * height * 3; break;
-        case VPX_IMG_FMT_I42216: raw_size_ = width * height * 4; break;
-        case VPX_IMG_FMT_I44016: raw_size_ = width * height * 4; break;
-        case VPX_IMG_FMT_I44416: raw_size_ = width * height * 6; break;
+        case AOM_IMG_FMT_I420: raw_size_ = width * height * 3 / 2; break;
+        case AOM_IMG_FMT_I422: raw_size_ = width * height * 2; break;
+        case AOM_IMG_FMT_I440: raw_size_ = width * height * 2; break;
+        case AOM_IMG_FMT_I444: raw_size_ = width * height * 3; break;
+        case AOM_IMG_FMT_I42016: raw_size_ = width * height * 3; break;
+        case AOM_IMG_FMT_I42216: raw_size_ = width * height * 4; break;
+        case AOM_IMG_FMT_I44016: raw_size_ = width * height * 4; break;
+        case AOM_IMG_FMT_I44416: raw_size_ = width * height * 6; break;
         default: ASSERT_TRUE(0);
       }
     }
@@ -107,14 +107,14 @@
  protected:
   std::string file_name_;
   FILE *input_file_;
-  vpx_image_t *img_;
+  aom_image_t *img_;
   size_t raw_size_;
   unsigned int start_;
   unsigned int limit_;
   unsigned int frame_;
   unsigned int width_;
   unsigned int height_;
-  vpx_img_fmt format_;
+  aom_img_fmt format_;
   int framerate_numerator_;
   int framerate_denominator_;
 };
