ref: ddd80abd3f634326ffa8190a095db0015ea83713
parent: 71684703aa6e85f4b8f77c9cfcb4886abbcd5522
author: angiebird <[email protected]>
date: Mon Nov 4 14:22:10 EST 2019
Add vp9_lookahead_full/vp9_lookahead_next_show_idx vp9_lookahead_full - Check if lookahead is full vp9_lookahead_next_show_idx - Return the show_idx that will be assigned to the next frame pushed by vp9_lookahead_push() Keep track of the show_idx of each frame in the queue Change-Id: If7ec2c7250f52413e6ce00c5b96f026ebf60a403
--- a/vp9/encoder/vp9_lookahead.c
+++ b/vp9/encoder/vp9_lookahead.c
@@ -64,6 +64,7 @@
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,7 +82,14 @@
}
#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,
vpx_enc_frame_flags_t flags) {
@@ -103,7 +111,7 @@
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 @@
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;
}
--- a/vp9/encoder/vp9_lookahead.h
+++ b/vp9/encoder/vp9_lookahead.h
@@ -25,6 +25,7 @@
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 @@
#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 */
};
@@ -56,6 +59,23 @@
/**\brief Destroys the lookahead stage
*/
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
*