blob: 9ab439e8afa4398ccd9fae8bc30a0cdec0e6769b [file] [log] [blame]
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -08001/*
Yaowu Xu9c01aa12016-09-01 14:32:49 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -08003 *
Yaowu Xu9c01aa12016-09-01 14:32:49 -07004 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080010 */
11
James Zerne1cbb132018-08-22 14:10:36 -070012#ifndef AOM_COMMON_VIDEO_READER_H_
13#define AOM_COMMON_VIDEO_READER_H_
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080014
Tom Finegandd3e2a52018-05-23 14:33:09 -070015#include "common/video_common.h"
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080016
17// The following code is work in progress. It is going to support transparent
18// reading of input files. Right now only IVF format is supported for
19// simplicity. The main goal the API is to be simple and easy to use in example
Yaowu Xuf883b422016-08-30 14:01:10 -070020// code and in aomenc/aomdec later. All low-level details like memory
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080021// buffer management are hidden from API users.
Yaowu Xuf883b422016-08-30 14:01:10 -070022struct AvxVideoReaderStruct;
23typedef struct AvxVideoReaderStruct AvxVideoReader;
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080024
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29// Opens the input file for reading and inspects it to determine file type.
Yaowu Xuf883b422016-08-30 14:01:10 -070030// Returns an opaque AvxVideoReader* upon success, or NULL upon failure.
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080031// Right now only IVF format is supported.
Yaowu Xuf883b422016-08-30 14:01:10 -070032AvxVideoReader *aom_video_reader_open(const char *filename);
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080033
Yaowu Xuf883b422016-08-30 14:01:10 -070034// Frees all resources associated with AvxVideoReader* returned from
35// aom_video_reader_open() call.
36void aom_video_reader_close(AvxVideoReader *reader);
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080037
38// Reads frame from the file and stores it in internal buffer.
Yaowu Xuf883b422016-08-30 14:01:10 -070039int aom_video_reader_read_frame(AvxVideoReader *reader);
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080040
41// Returns the pointer to memory buffer with frame data read by last call to
Yaowu Xuf883b422016-08-30 14:01:10 -070042// aom_video_reader_read_frame().
43const uint8_t *aom_video_reader_get_frame(AvxVideoReader *reader, size_t *size);
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080044
Yunqing Wangdb7f0c52018-06-01 16:39:59 -070045// Returns the pts of the frame.
46int64_t aom_video_reader_get_frame_pts(AvxVideoReader *reader);
47// Return the reader file.
48FILE *aom_video_reader_get_file(AvxVideoReader *reader);
49
Yaowu Xuf883b422016-08-30 14:01:10 -070050// Fills AvxVideoInfo with information from opened video file.
51const AvxVideoInfo *aom_video_reader_get_info(AvxVideoReader *reader);
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080052
Yunqing Wang3ae70c92019-01-25 17:34:07 -080053// Set fourcc.
54void aom_video_reader_set_fourcc(AvxVideoReader *reader, uint32_t fourcc);
55
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080056#ifdef __cplusplus
57} // extern "C"
58#endif
59
James Zerne1cbb132018-08-22 14:10:36 -070060#endif // AOM_COMMON_VIDEO_READER_H_