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