summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2023-05-08 20:52:31 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-05-08 20:52:31 +0000
commit2108b7a26f8a8ed0aadcdd57d118cdf9bb598ec6 (patch)
tree883ef907dac30abdd694d1cdae9d17c3bc21b8fb
parentf5f3a6486200a76a1e22de5554ad0377237326fb (diff)
parent851a76ff65905ea8961d8221a358ffb91c1f5f98 (diff)
downloadlibvpx-2108b7a26f8a8ed0aadcdd57d118cdf9bb598ec6.tar.gz
Merge changes Ie165d410,I6d9bb8da,I6858e574 into main
* changes: vp8_[cd]x_iface: clear setjmp flag on function exit vp9_decodeframe,tile_worker_hook: relocate setjmp=1 vp9,encoder_set_config: set setjmp flag after setjmp()
-rw-r--r--vp8/vp8_cx_iface.c16
-rw-r--r--vp8/vp8_dx_iface.c2
-rw-r--r--vp9/decoder/vp9_decodeframe.c3
-rw-r--r--vp9/vp9_cx_iface.c1
4 files changed, 12 insertions, 10 deletions
diff --git a/vp8/vp8_cx_iface.c b/vp8/vp8_cx_iface.c
index a9d1f8005..0821eef02 100644
--- a/vp8/vp8_cx_iface.c
+++ b/vp8/vp8_cx_iface.c
@@ -911,12 +911,6 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx,
}
}
- if (setjmp(ctx->cpi->common.error.jmp)) {
- ctx->cpi->common.error.setjmp = 0;
- vpx_clear_system_state();
- return VPX_CODEC_CORRUPT_FRAME;
- }
-
/* Initialize the encoder instance on the first frame*/
if (!res && ctx->cpi) {
unsigned int lib_flags;
@@ -927,6 +921,13 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx,
unsigned char *cx_data_end;
int comp_data_state = 0;
+ if (setjmp(ctx->cpi->common.error.jmp)) {
+ ctx->cpi->common.error.setjmp = 0;
+ vpx_clear_system_state();
+ return VPX_CODEC_CORRUPT_FRAME;
+ }
+ ctx->cpi->common.error.setjmp = 1;
+
/* Set up internal flags */
if (ctx->base.init_flags & VPX_CODEC_USE_PSNR) {
((VP8_COMP *)ctx->cpi)->b_calculate_psnr = 1;
@@ -962,8 +963,6 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx,
cx_data_end = ctx->cx_data + cx_data_sz;
lib_flags = 0;
- ctx->cpi->common.error.setjmp = 1;
-
while (cx_data_sz >= ctx->cx_data_sz / 2) {
comp_data_state = vp8_get_compressed_data(
ctx->cpi, &lib_flags, &size, cx_data, cx_data_end, &dst_time_stamp,
@@ -1059,6 +1058,7 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t *ctx,
}
}
}
+ ctx->cpi->common.error.setjmp = 0;
}
return res;
diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c
index 55a77ba7e..fdc0b35dd 100644
--- a/vp8/vp8_dx_iface.c
+++ b/vp8/vp8_dx_iface.c
@@ -310,6 +310,7 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
VP8D_COMP *pbi = ctx->yv12_frame_buffers.pbi[0];
VP8_COMMON *const pc = &pbi->common;
if (setjmp(pbi->common.error.jmp)) {
+ pbi->common.error.setjmp = 0;
vp8_remove_decoder_instances(fb);
vp8_zero(fb->pbi);
vpx_clear_system_state();
@@ -494,6 +495,7 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
/* get ready for the next series of fragments */
ctx->fragments.count = 0;
+ pbi->common.error.setjmp = 0;
}
return res;
diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c
index 10a7f9b12..6ec1d9f66 100644
--- a/vp9/decoder/vp9_decodeframe.c
+++ b/vp9/decoder/vp9_decodeframe.c
@@ -2193,8 +2193,6 @@ static int tile_worker_hook(void *arg1, void *arg2) {
volatile int mi_row = 0;
volatile int n = tile_data->buf_start;
- tile_data->error_info.setjmp = 1;
-
if (setjmp(tile_data->error_info.jmp)) {
tile_data->error_info.setjmp = 0;
tile_data->xd.corrupted = 1;
@@ -2207,6 +2205,7 @@ static int tile_worker_hook(void *arg1, void *arg2) {
}
return 0;
}
+ tile_data->error_info.setjmp = 1;
tile_data->xd.corrupted = 0;
diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c
index 62128ff28..8f157274f 100644
--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -815,6 +815,7 @@ static vpx_codec_err_t encoder_set_config(vpx_codec_alg_priv_t *ctx,
assert(codec_err != VPX_CODEC_OK);
return codec_err;
}
+ ctx->cpi->common.error.setjmp = 1;
ctx->cfg = *cfg;
set_encoder_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg);