Modify ivf reader functions

Modified ivf reader functions to facilitate the implementation and
testing of the tile list OBU.

Change-Id: I5a9d21b8387e2898cbdd4a06bac284b5e84035a8
diff --git a/apps/aomdec.c b/apps/aomdec.c
index 281a8e8..8523aa0 100644
--- a/apps/aomdec.c
+++ b/apps/aomdec.c
@@ -244,7 +244,7 @@
                             buffer_size);
     case FILE_TYPE_IVF:
       return ivf_read_frame(input->aom_input_ctx->file, buf, bytes_in_buffer,
-                            buffer_size);
+                            buffer_size, NULL);
     case FILE_TYPE_OBU:
       return obudec_read_temporal_unit(input->obu_ctx, buf, bytes_in_buffer,
                                        buffer_size);
diff --git a/common/ivfdec.c b/common/ivfdec.c
index aa51bc8..80d73b0 100644
--- a/common/ivfdec.c
+++ b/common/ivfdec.c
@@ -62,7 +62,7 @@
 }
 
 int ivf_read_frame(FILE *infile, uint8_t **buffer, size_t *bytes_read,
-                   size_t *buffer_size) {
+                   size_t *buffer_size, aom_codec_pts_t *pts) {
   char raw_header[IVF_FRAME_HDR_SZ] = { 0 };
   size_t frame_size = 0;
 
@@ -87,6 +87,11 @@
         frame_size = 0;
       }
     }
+
+    if (pts) {
+      *pts = mem_get_le32(&raw_header[4]);
+      *pts += ((aom_codec_pts_t)mem_get_le32(&raw_header[8]) << 32);
+    }
   }
 
   if (!feof(infile)) {
diff --git a/common/ivfdec.h b/common/ivfdec.h
index 9e7f635..9013dea 100644
--- a/common/ivfdec.h
+++ b/common/ivfdec.h
@@ -19,8 +19,9 @@
 
 int file_is_ivf(struct AvxInputContext *input);
 
+typedef int64_t aom_codec_pts_t;
 int ivf_read_frame(FILE *infile, uint8_t **buffer, size_t *bytes_read,
-                   size_t *buffer_size);
+                   size_t *buffer_size, aom_codec_pts_t *pts);
 
 #ifdef __cplusplus
 } /* extern "C" */
diff --git a/common/video_reader.c b/common/video_reader.c
index ac2f55e..f5327c9 100644
--- a/common/video_reader.c
+++ b/common/video_reader.c
@@ -24,6 +24,7 @@
   uint8_t *buffer;
   size_t buffer_size;
   size_t frame_size;
+  aom_codec_pts_t pts;
 };
 
 AvxVideoReader *aom_video_reader_open(const char *filename) {
@@ -62,7 +63,7 @@
 
 int aom_video_reader_read_frame(AvxVideoReader *reader) {
   return !ivf_read_frame(reader->file, &reader->buffer, &reader->frame_size,
-                         &reader->buffer_size);
+                         &reader->buffer_size, &reader->pts);
 }
 
 const uint8_t *aom_video_reader_get_frame(AvxVideoReader *reader,
@@ -72,6 +73,12 @@
   return reader->buffer;
 }
 
+int64_t aom_video_reader_get_frame_pts(AvxVideoReader *reader) {
+  return (int64_t)reader->pts;
+}
+
+FILE *aom_video_reader_get_file(AvxVideoReader *reader) { return reader->file; }
+
 const AvxVideoInfo *aom_video_reader_get_info(AvxVideoReader *reader) {
   return &reader->info;
 }
diff --git a/common/video_reader.h b/common/video_reader.h
index 3ee9a34..1eb3383 100644
--- a/common/video_reader.h
+++ b/common/video_reader.h
@@ -42,6 +42,11 @@
 // aom_video_reader_read_frame().
 const uint8_t *aom_video_reader_get_frame(AvxVideoReader *reader, size_t *size);
 
+// Returns the pts of the frame.
+int64_t aom_video_reader_get_frame_pts(AvxVideoReader *reader);
+// Return the reader file.
+FILE *aom_video_reader_get_file(AvxVideoReader *reader);
+
 // Fills AvxVideoInfo with information from opened video file.
 const AvxVideoInfo *aom_video_reader_get_info(AvxVideoReader *reader);
 
diff --git a/tools/dump_obu.cc b/tools/dump_obu.cc
index fe503cc..9051f5f 100644
--- a/tools/dump_obu.cc
+++ b/tools/dump_obu.cc
@@ -68,7 +68,7 @@
   switch (file_type) {
     case FILE_TYPE_IVF: {
       if (ivf_read_frame(ctx->avx_ctx->file, &ctx->unit_buffer, unit_size,
-                         &ctx->unit_buffer_size)) {
+                         &ctx->unit_buffer_size, NULL)) {
         return false;
       }
       break;