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 #ifndef VP8_ENCODER_LOOKAHEAD_H_ 11 #define VP8_ENCODER_LOOKAHEAD_H_ 12 #include "vpx_scale/yv12config.h" 13 #include "vpx/vpx_integer.h" 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 struct lookahead_entry 20 { 21 YV12_BUFFER_CONFIG img; 22 int64_t ts_start; 23 int64_t ts_end; 24 unsigned int flags; 25 }; 26 27 28 struct lookahead_ctx; 29 30 /**\brief Initializes the lookahead stage 31 * 32 * The lookahead stage is a queue of frame buffers on which some analysis 33 * may be done when buffers are enqueued. 34 * 35 * 36 */ 37 struct lookahead_ctx* vp8_lookahead_init(unsigned int width, 38 unsigned int height, 39 unsigned int depth 40 ); 41 42 43 /**\brief Destroys the lookahead stage 44 * 45 */ 46 void vp8_lookahead_destroy(struct lookahead_ctx *ctx); 47 48 49 /**\brief Enqueue a source buffer 50 * 51 * This function will copy the source image into a new framebuffer with 52 * the expected stride/border. 53 * 54 * If active_map is non-NULL and there is only one frame in the queue, then copy 55 * only active macroblocks. 56 * 57 * \param[in] ctx Pointer to the lookahead context 58 * \param[in] src Pointer to the image to enqueue 59 * \param[in] ts_start Timestamp for the start of this frame 60 * \param[in] ts_end Timestamp for the end of this frame 61 * \param[in] flags Flags set on this frame 62 * \param[in] active_map Map that specifies which macroblock is active 63 */ 64 int 65 vp8_lookahead_push(struct lookahead_ctx *ctx, 66 YV12_BUFFER_CONFIG *src, 67 int64_t ts_start, 68 int64_t ts_end, 69 unsigned int flags, 70 unsigned char *active_map); 71 72 73 /**\brief Get the next source buffer to encode 74 * 75 * 76 * \param[in] ctx Pointer to the lookahead context 77 * \param[in] drain Flag indicating the buffer should be drained 78 * (return a buffer regardless of the current queue depth) 79 * 80 * \retval NULL, if drain set and queue is empty 81 * \retval NULL, if drain not set and queue not of the configured depth 82 * 83 */ 84 struct lookahead_entry* 85 vp8_lookahead_pop(struct lookahead_ctx *ctx, 86 int drain); 87 88 89 #define PEEK_FORWARD 1 90 #define PEEK_BACKWARD -1 91 /**\brief Get a future source buffer to encode 92 * 93 * \param[in] ctx Pointer to the lookahead context 94 * \param[in] index Index of the frame to be returned, 0 == next frame 95 * 96 * \retval NULL, if no buffer exists at the specified index 97 * 98 */ 99 struct lookahead_entry* 100 vp8_lookahead_peek(struct lookahead_ctx *ctx, 101 unsigned int index, 102 int direction); 103 104 105 /**\brief Get the number of frames currently in the lookahead queue 106 * 107 * \param[in] ctx Pointer to the lookahead context 108 */ 109 unsigned int 110 vp8_lookahead_depth(struct lookahead_ctx *ctx); 111 112 113 #ifdef __cplusplus 114 } // extern "C" 115 #endif 116 117 #endif // VP8_ENCODER_LOOKAHEAD_H_ 118