diff options
Diffstat (limited to 'vp8')
-rw-r--r-- | vp8/decoder/decodeframe.c | 3 | ||||
-rw-r--r-- | vp8/decoder/onyxd_if.c | 4 | ||||
-rw-r--r-- | vp8/decoder/threading.c | 97 |
3 files changed, 51 insertions, 53 deletions
diff --git a/vp8/decoder/decodeframe.c b/vp8/decoder/decodeframe.c index affe4533b..c76418ef0 100644 --- a/vp8/decoder/decodeframe.c +++ b/vp8/decoder/decodeframe.c @@ -798,6 +798,9 @@ static void setup_token_decoder(VP8D_COMP *pbi, if (pbi->decoding_thread_count > num_token_partitions - 1) { pbi->decoding_thread_count = num_token_partitions - 1; } + if (pbi->decoding_thread_count > pbi->common.mb_rows - 1) { + pbi->decoding_thread_count = pbi->common.mb_rows - 1; + } #endif } diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c index 62b4cb0a5..dff53dc17 100644 --- a/vp8/decoder/onyxd_if.c +++ b/vp8/decoder/onyxd_if.c @@ -331,7 +331,6 @@ int vp8dx_receive_compressed_data(VP8D_COMP *pbi, size_t size, if (cm->fb_idx_ref_cnt[cm->new_fb_idx] > 0) { cm->fb_idx_ref_cnt[cm->new_fb_idx]--; } - goto decode_exit; } @@ -464,9 +463,6 @@ int vp8_remove_decoder_instances(struct frame_buffers *fb) { if (!pbi) return VPX_CODEC_ERROR; #if CONFIG_MULTITHREAD - if (pbi->b_multithreaded_rd) { - vp8mt_de_alloc_temp_buffers(pbi, pbi->common.mb_rows); - } vp8_decoder_remove_threads(pbi); #endif diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c index 3f24b4447..e9d391dfb 100644 --- a/vp8/decoder/threading.c +++ b/vp8/decoder/threading.c @@ -631,65 +631,63 @@ void vp8_decoder_create_threads(VP8D_COMP *pbi) { void vp8mt_de_alloc_temp_buffers(VP8D_COMP *pbi, int mb_rows) { int i; - if (pbi->b_multithreaded_rd) { - vpx_free(pbi->mt_current_mb_col); - pbi->mt_current_mb_col = NULL; - - /* Free above_row buffers. */ - if (pbi->mt_yabove_row) { - for (i = 0; i < mb_rows; ++i) { - vpx_free(pbi->mt_yabove_row[i]); - pbi->mt_yabove_row[i] = NULL; - } - vpx_free(pbi->mt_yabove_row); - pbi->mt_yabove_row = NULL; + vpx_free(pbi->mt_current_mb_col); + pbi->mt_current_mb_col = NULL; + + /* Free above_row buffers. */ + if (pbi->mt_yabove_row) { + for (i = 0; i < mb_rows; ++i) { + vpx_free(pbi->mt_yabove_row[i]); + pbi->mt_yabove_row[i] = NULL; } + vpx_free(pbi->mt_yabove_row); + pbi->mt_yabove_row = NULL; + } - if (pbi->mt_uabove_row) { - for (i = 0; i < mb_rows; ++i) { - vpx_free(pbi->mt_uabove_row[i]); - pbi->mt_uabove_row[i] = NULL; - } - vpx_free(pbi->mt_uabove_row); - pbi->mt_uabove_row = NULL; + if (pbi->mt_uabove_row) { + for (i = 0; i < mb_rows; ++i) { + vpx_free(pbi->mt_uabove_row[i]); + pbi->mt_uabove_row[i] = NULL; } + vpx_free(pbi->mt_uabove_row); + pbi->mt_uabove_row = NULL; + } - if (pbi->mt_vabove_row) { - for (i = 0; i < mb_rows; ++i) { - vpx_free(pbi->mt_vabove_row[i]); - pbi->mt_vabove_row[i] = NULL; - } - vpx_free(pbi->mt_vabove_row); - pbi->mt_vabove_row = NULL; + if (pbi->mt_vabove_row) { + for (i = 0; i < mb_rows; ++i) { + vpx_free(pbi->mt_vabove_row[i]); + pbi->mt_vabove_row[i] = NULL; } + vpx_free(pbi->mt_vabove_row); + pbi->mt_vabove_row = NULL; + } - /* Free left_col buffers. */ - if (pbi->mt_yleft_col) { - for (i = 0; i < mb_rows; ++i) { - vpx_free(pbi->mt_yleft_col[i]); - pbi->mt_yleft_col[i] = NULL; - } - vpx_free(pbi->mt_yleft_col); - pbi->mt_yleft_col = NULL; + /* Free left_col buffers. */ + if (pbi->mt_yleft_col) { + for (i = 0; i < mb_rows; ++i) { + vpx_free(pbi->mt_yleft_col[i]); + pbi->mt_yleft_col[i] = NULL; } + vpx_free(pbi->mt_yleft_col); + pbi->mt_yleft_col = NULL; + } - if (pbi->mt_uleft_col) { - for (i = 0; i < mb_rows; ++i) { - vpx_free(pbi->mt_uleft_col[i]); - pbi->mt_uleft_col[i] = NULL; - } - vpx_free(pbi->mt_uleft_col); - pbi->mt_uleft_col = NULL; + if (pbi->mt_uleft_col) { + for (i = 0; i < mb_rows; ++i) { + vpx_free(pbi->mt_uleft_col[i]); + pbi->mt_uleft_col[i] = NULL; } + vpx_free(pbi->mt_uleft_col); + pbi->mt_uleft_col = NULL; + } - if (pbi->mt_vleft_col) { - for (i = 0; i < mb_rows; ++i) { - vpx_free(pbi->mt_vleft_col[i]); - pbi->mt_vleft_col[i] = NULL; - } - vpx_free(pbi->mt_vleft_col); - pbi->mt_vleft_col = NULL; + if (pbi->mt_vleft_col) { + for (i = 0; i < mb_rows; ++i) { + vpx_free(pbi->mt_vleft_col[i]); + pbi->mt_vleft_col[i] = NULL; } + vpx_free(pbi->mt_vleft_col); + pbi->mt_vleft_col = NULL; } } @@ -760,7 +758,6 @@ void vp8_decoder_remove_threads(VP8D_COMP *pbi) { /* shutdown MB Decoding thread; */ if (pbi->b_multithreaded_rd) { int i; - pbi->b_multithreaded_rd = 0; /* allow all threads to exit */ @@ -786,6 +783,8 @@ void vp8_decoder_remove_threads(VP8D_COMP *pbi) { vpx_free(pbi->de_thread_data); pbi->de_thread_data = NULL; + + vp8mt_de_alloc_temp_buffers(pbi, pbi->common.mb_rows); } } |