summaryrefslogtreecommitdiff
path: root/vp9/encoder
diff options
context:
space:
mode:
Diffstat (limited to 'vp9/encoder')
-rw-r--r--vp9/encoder/vp9_lookahead.c12
-rw-r--r--vp9/encoder/vp9_lookahead.h28
2 files changed, 35 insertions, 5 deletions
diff --git a/vp9/encoder/vp9_lookahead.c b/vp9/encoder/vp9_lookahead.c
index f016a59d7..97838c38e 100644
--- a/vp9/encoder/vp9_lookahead.c
+++ b/vp9/encoder/vp9_lookahead.c
@@ -64,6 +64,7 @@ struct lookahead_ctx *vp9_lookahead_init(unsigned int width,
unsigned int i;
ctx->max_sz = depth;
ctx->buf = calloc(depth, sizeof(*ctx->buf));
+ ctx->next_show_idx = 0;
if (!ctx->buf) goto bail;
for (i = 0; i < depth; i++)
if (vpx_alloc_frame_buffer(
@@ -81,6 +82,13 @@ bail:
}
#define USE_PARTIAL_COPY 0
+int vp9_lookahead_full(const struct lookahead_ctx *ctx) {
+ return ctx->sz + 1 + MAX_PRE_FRAMES > ctx->max_sz;
+}
+
+int vp9_lookahead_next_show_idx(const struct lookahead_ctx *ctx) {
+ return ctx->next_show_idx;
+}
int vp9_lookahead_push(struct lookahead_ctx *ctx, YV12_BUFFER_CONFIG *src,
int64_t ts_start, int64_t ts_end, int use_highbitdepth,
@@ -103,7 +111,7 @@ int vp9_lookahead_push(struct lookahead_ctx *ctx, YV12_BUFFER_CONFIG *src,
assert(use_highbitdepth == 0);
#endif
- if (ctx->sz + 1 + MAX_PRE_FRAMES > ctx->max_sz) return 1;
+ if (vp9_lookahead_full(ctx)) return 1;
ctx->sz++;
buf = pop(ctx, &ctx->write_idx);
@@ -185,6 +193,8 @@ int vp9_lookahead_push(struct lookahead_ctx *ctx, YV12_BUFFER_CONFIG *src,
buf->ts_start = ts_start;
buf->ts_end = ts_end;
buf->flags = flags;
+ buf->show_idx = ctx->next_show_idx;
+ ++ctx->next_show_idx;
return 0;
}
diff --git a/vp9/encoder/vp9_lookahead.h b/vp9/encoder/vp9_lookahead.h
index e149918b5..dbbe3af58 100644
--- a/vp9/encoder/vp9_lookahead.h
+++ b/vp9/encoder/vp9_lookahead.h
@@ -25,6 +25,7 @@ struct lookahead_entry {
YV12_BUFFER_CONFIG img;
int64_t ts_start;
int64_t ts_end;
+ int show_idx; /*The show_idx of this frame*/
vpx_enc_frame_flags_t flags;
};
@@ -32,10 +33,12 @@ struct lookahead_entry {
#define MAX_PRE_FRAMES 1
struct lookahead_ctx {
- int max_sz; /* Absolute size of the queue */
- int sz; /* Number of buffers currently in the queue */
- int read_idx; /* Read index */
- int write_idx; /* Write index */
+ int max_sz; /* Absolute size of the queue */
+ int sz; /* Number of buffers currently in the queue */
+ int read_idx; /* Read index */
+ int write_idx; /* Write index */
+ int next_show_idx; /* The show_idx that will be assigned to the next frame
+ being pushed in the queue*/
struct lookahead_entry *buf; /* Buffer list */
};
@@ -57,6 +60,23 @@ struct lookahead_ctx *vp9_lookahead_init(unsigned int width,
*/
void vp9_lookahead_destroy(struct lookahead_ctx *ctx);
+/**\brief Check if lookahead is full
+ *
+ * \param[in] ctx Pointer to the lookahead context
+ *
+ * Return 1 if lookahead is full, otherwise return 0.
+ */
+int vp9_lookahead_full(const struct lookahead_ctx *ctx);
+
+/**\brief Return the next_show_idx
+ *
+ * \param[in] ctx Pointer to the lookahead context
+ *
+ * Return the show_idx that will be assigned to the next
+ * frame pushed by vp9_lookahead_push()
+ */
+int vp9_lookahead_next_show_idx(const struct lookahead_ctx *ctx);
+
/**\brief Enqueue a source buffer
*
* This function will copy the source image into a new framebuffer with