Create buffer pool and compressor context together
Moved creation of buffer pool (BufferPool )and compressor
context (AV1_COMP) into a single function.
Moved deletion of buffer pool and compressor context
into a single function.
Change-Id: I53b6a43809977774975dde942401cfc167f2f474
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 37b2dac..f235c70 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -1720,6 +1720,28 @@
return update_extra_cfg(ctx, &extra_cfg);
}
+static aom_codec_err_t create_context_and_bufferpool(
+ AV1_COMP **p_cpi, BufferPool **p_buffer_pool, AV1EncoderConfig *oxcf,
+ struct aom_codec_pkt_list *pkt_list_head) {
+ aom_codec_err_t res = AOM_CODEC_OK;
+
+ *p_buffer_pool = (BufferPool *)aom_calloc(1, sizeof(BufferPool));
+ if (*p_buffer_pool == NULL) return AOM_CODEC_MEM_ERROR;
+
+#if CONFIG_MULTITHREAD
+ if (pthread_mutex_init(&((*p_buffer_pool)->pool_mutex), NULL)) {
+ return AOM_CODEC_MEM_ERROR;
+ }
+#endif
+ *p_cpi = av1_create_compressor(oxcf, *p_buffer_pool);
+ if (*p_cpi == NULL)
+ res = AOM_CODEC_MEM_ERROR;
+ else
+ (*p_cpi)->output_pkt_list = pkt_list_head;
+
+ return res;
+}
+
static aom_codec_err_t encoder_init(aom_codec_ctx_t *ctx,
aom_codec_priv_enc_mr_cfg_t *data) {
aom_codec_err_t res = AOM_CODEC_OK;
@@ -1732,14 +1754,6 @@
ctx->priv = (aom_codec_priv_t *)priv;
ctx->priv->init_flags = ctx->init_flags;
ctx->priv->enc.total_encoders = 1;
- priv->buffer_pool = (BufferPool *)aom_calloc(1, sizeof(BufferPool));
- if (priv->buffer_pool == NULL) return AOM_CODEC_MEM_ERROR;
-
-#if CONFIG_MULTITHREAD
- if (pthread_mutex_init(&priv->buffer_pool->pool_mutex, NULL)) {
- return AOM_CODEC_MEM_ERROR;
- }
-#endif
if (ctx->config.enc) {
// Update the reference to the config structure to an internal copy.
@@ -1761,24 +1775,27 @@
set_encoder_config(&priv->oxcf, &priv->cfg, &priv->extra_cfg);
priv->oxcf.use_highbitdepth =
(ctx->init_flags & AOM_CODEC_USE_HIGHBITDEPTH) ? 1 : 0;
- priv->cpi = av1_create_compressor(&priv->oxcf, priv->buffer_pool);
- if (priv->cpi == NULL)
- res = AOM_CODEC_MEM_ERROR;
- else
- priv->cpi->output_pkt_list = &priv->pkt_list.head;
+
+ res = create_context_and_bufferpool(&priv->cpi, &priv->buffer_pool,
+ &priv->oxcf, &priv->pkt_list.head);
}
}
return res;
}
+static void destroy_context_and_bufferpool(AV1_COMP *cpi,
+ BufferPool *buffer_pool) {
+ av1_remove_compressor(cpi);
+#if CONFIG_MULTITHREAD
+ pthread_mutex_destroy(&buffer_pool->pool_mutex);
+#endif
+ aom_free(buffer_pool);
+}
+
static aom_codec_err_t encoder_destroy(aom_codec_alg_priv_t *ctx) {
free(ctx->cx_data);
- av1_remove_compressor(ctx->cpi);
-#if CONFIG_MULTITHREAD
- pthread_mutex_destroy(&ctx->buffer_pool->pool_mutex);
-#endif
- aom_free(ctx->buffer_pool);
+ destroy_context_and_bufferpool(ctx->cpi, ctx->buffer_pool);
aom_free(ctx);
return AOM_CODEC_OK;
}