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 {
     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