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;