blob: 962c6653b50f6b11223b6f969dce37bad75c3c5c [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
12#ifndef VIDEO_READER_H_
13#define VIDEO_READER_H_
14
15#include "./video_common.h"
16
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
Yaowu Xuf883b422016-08-30 14:01:10 -070045// Fills AvxVideoInfo with information from opened video file.
46const AvxVideoInfo *aom_video_reader_get_info(AvxVideoReader *reader);
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -080047
48#ifdef __cplusplus
49} // extern "C"
50#endif
51
52#endif // VIDEO_READER_H_