xref: /aosp_15_r20/external/libvpx/webmdec.h (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_WEBMDEC_H_
11*fb1b10abSAndroid Build Coastguard Worker #define VPX_WEBMDEC_H_
12*fb1b10abSAndroid Build Coastguard Worker 
13*fb1b10abSAndroid Build Coastguard Worker #include "./tools_common.h"
14*fb1b10abSAndroid Build Coastguard Worker 
15*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
16*fb1b10abSAndroid Build Coastguard Worker extern "C" {
17*fb1b10abSAndroid Build Coastguard Worker #endif
18*fb1b10abSAndroid Build Coastguard Worker 
19*fb1b10abSAndroid Build Coastguard Worker struct VpxInputContext;
20*fb1b10abSAndroid Build Coastguard Worker 
21*fb1b10abSAndroid Build Coastguard Worker struct WebmInputContext {
22*fb1b10abSAndroid Build Coastguard Worker   void *reader;
23*fb1b10abSAndroid Build Coastguard Worker   void *segment;
24*fb1b10abSAndroid Build Coastguard Worker   uint8_t *buffer;
25*fb1b10abSAndroid Build Coastguard Worker   const void *cluster;
26*fb1b10abSAndroid Build Coastguard Worker   const void *block_entry;
27*fb1b10abSAndroid Build Coastguard Worker   const void *block;
28*fb1b10abSAndroid Build Coastguard Worker   int block_frame_index;
29*fb1b10abSAndroid Build Coastguard Worker   int video_track_index;
30*fb1b10abSAndroid Build Coastguard Worker   int64_t timestamp_ns;
31*fb1b10abSAndroid Build Coastguard Worker   int is_key_frame;
32*fb1b10abSAndroid Build Coastguard Worker   int reached_eos;
33*fb1b10abSAndroid Build Coastguard Worker };
34*fb1b10abSAndroid Build Coastguard Worker 
35*fb1b10abSAndroid Build Coastguard Worker // Checks if the input is a WebM file. If so, initializes WebMInputContext so
36*fb1b10abSAndroid Build Coastguard Worker // that webm_read_frame can be called to retrieve a video frame.
37*fb1b10abSAndroid Build Coastguard Worker // Returns 1 on success and 0 on failure or input is not WebM file.
38*fb1b10abSAndroid Build Coastguard Worker // TODO(vigneshv): Refactor this function into two smaller functions specific
39*fb1b10abSAndroid Build Coastguard Worker // to their task.
40*fb1b10abSAndroid Build Coastguard Worker int file_is_webm(struct WebmInputContext *webm_ctx,
41*fb1b10abSAndroid Build Coastguard Worker                  struct VpxInputContext *vpx_ctx);
42*fb1b10abSAndroid Build Coastguard Worker 
43*fb1b10abSAndroid Build Coastguard Worker // Reads a WebM Video Frame. Memory for the buffer is created, owned and managed
44*fb1b10abSAndroid Build Coastguard Worker // by this function. For the first call, |buffer| should be NULL and
45*fb1b10abSAndroid Build Coastguard Worker // |*buffer_size| should be 0. Once all the frames are read and used,
46*fb1b10abSAndroid Build Coastguard Worker // webm_free() should be called, otherwise there will be a leak.
47*fb1b10abSAndroid Build Coastguard Worker // Parameters:
48*fb1b10abSAndroid Build Coastguard Worker //      webm_ctx - WebmInputContext object
49*fb1b10abSAndroid Build Coastguard Worker //      buffer - pointer where the frame data will be filled.
50*fb1b10abSAndroid Build Coastguard Worker //      buffer_size - pointer to buffer size.
51*fb1b10abSAndroid Build Coastguard Worker // Return values:
52*fb1b10abSAndroid Build Coastguard Worker //      0 - Success
53*fb1b10abSAndroid Build Coastguard Worker //      1 - End of Stream
54*fb1b10abSAndroid Build Coastguard Worker //     -1 - Error
55*fb1b10abSAndroid Build Coastguard Worker int webm_read_frame(struct WebmInputContext *webm_ctx, uint8_t **buffer,
56*fb1b10abSAndroid Build Coastguard Worker                     size_t *buffer_size);
57*fb1b10abSAndroid Build Coastguard Worker 
58*fb1b10abSAndroid Build Coastguard Worker // Guesses the frame rate of the input file based on the container timestamps.
59*fb1b10abSAndroid Build Coastguard Worker int webm_guess_framerate(struct WebmInputContext *webm_ctx,
60*fb1b10abSAndroid Build Coastguard Worker                          struct VpxInputContext *vpx_ctx);
61*fb1b10abSAndroid Build Coastguard Worker 
62*fb1b10abSAndroid Build Coastguard Worker // Resets the WebMInputContext.
63*fb1b10abSAndroid Build Coastguard Worker void webm_free(struct WebmInputContext *webm_ctx);
64*fb1b10abSAndroid Build Coastguard Worker 
65*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
66*fb1b10abSAndroid Build Coastguard Worker }  // extern "C"
67*fb1b10abSAndroid Build Coastguard Worker #endif
68*fb1b10abSAndroid Build Coastguard Worker 
69*fb1b10abSAndroid Build Coastguard Worker #endif  // VPX_WEBMDEC_H_
70