media/libvpx/vp9/encoder/vp9_lookahead.h

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:0fdcc1898239
1 /*
2 * Copyright (c) 2011 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #ifndef VP9_ENCODER_VP9_LOOKAHEAD_H_
12 #define VP9_ENCODER_VP9_LOOKAHEAD_H_
13
14 #include "vpx_scale/yv12config.h"
15 #include "vpx/vpx_integer.h"
16
17 #define MAX_LAG_BUFFERS 25
18
19 struct lookahead_entry {
20 YV12_BUFFER_CONFIG img;
21 int64_t ts_start;
22 int64_t ts_end;
23 unsigned int flags;
24 };
25
26
27 struct lookahead_ctx;
28
29 /**\brief Initializes the lookahead stage
30 *
31 * The lookahead stage is a queue of frame buffers on which some analysis
32 * may be done when buffers are enqueued.
33 */
34 struct lookahead_ctx *vp9_lookahead_init(unsigned int width,
35 unsigned int height,
36 unsigned int subsampling_x,
37 unsigned int subsampling_y,
38 unsigned int depth);
39
40
41 /**\brief Destroys the lookahead stage
42 */
43 void vp9_lookahead_destroy(struct lookahead_ctx *ctx);
44
45
46 /**\brief Enqueue a source buffer
47 *
48 * This function will copy the source image into a new framebuffer with
49 * the expected stride/border.
50 *
51 * If active_map is non-NULL and there is only one frame in the queue, then copy
52 * only active macroblocks.
53 *
54 * \param[in] ctx Pointer to the lookahead context
55 * \param[in] src Pointer to the image to enqueue
56 * \param[in] ts_start Timestamp for the start of this frame
57 * \param[in] ts_end Timestamp for the end of this frame
58 * \param[in] flags Flags set on this frame
59 * \param[in] active_map Map that specifies which macroblock is active
60 */
61 int vp9_lookahead_push(struct lookahead_ctx *ctx, YV12_BUFFER_CONFIG *src,
62 int64_t ts_start, int64_t ts_end, unsigned int flags,
63 unsigned char *active_map);
64
65
66 /**\brief Get the next source buffer to encode
67 *
68 *
69 * \param[in] ctx Pointer to the lookahead context
70 * \param[in] drain Flag indicating the buffer should be drained
71 * (return a buffer regardless of the current queue depth)
72 *
73 * \retval NULL, if drain set and queue is empty
74 * \retval NULL, if drain not set and queue not of the configured depth
75 */
76 struct lookahead_entry *vp9_lookahead_pop(struct lookahead_ctx *ctx,
77 int drain);
78
79
80 /**\brief Get a future source buffer to encode
81 *
82 * \param[in] ctx Pointer to the lookahead context
83 * \param[in] index Index of the frame to be returned, 0 == next frame
84 *
85 * \retval NULL, if no buffer exists at the specified index
86 */
87 struct lookahead_entry *vp9_lookahead_peek(struct lookahead_ctx *ctx,
88 int index);
89
90
91 /**\brief Get the number of frames currently in the lookahead queue
92 *
93 * \param[in] ctx Pointer to the lookahead context
94 */
95 unsigned int vp9_lookahead_depth(struct lookahead_ctx *ctx);
96
97 #endif // VP9_ENCODER_VP9_LOOKAHEAD_H_

mercurial