diff options
author | Jim Bankoski <jimbankoski@google.com> | 2016-07-21 09:20:10 -0700 |
---|---|---|
committer | James Bankoski <jimbankoski@google.com> | 2016-07-23 00:50:55 +0000 |
commit | 0fff2fb34c7924aa59322518db41ee1953d813f9 (patch) | |
tree | fee030bb3663263e75a9cb3ffab9b81523c56fe2 /vp8/decoder/threading.c | |
parent | 930773a1ede62d8b29ab2f66361e6e59b11ea6b9 (diff) | |
download | libvpx-0fff2fb34c7924aa59322518db41ee1953d813f9.tar libvpx-0fff2fb34c7924aa59322518db41ee1953d813f9.tar.gz libvpx-0fff2fb34c7924aa59322518db41ee1953d813f9.tar.bz2 libvpx-0fff2fb34c7924aa59322518db41ee1953d813f9.zip |
vp8:fix threading issues
1 - stops de allocating before threads are closed.
2 - limits threads to mb_rows when mb_rows < partitions
BUG=webm:851
Change-Id: I7ead53e80cc0f8c2e4c1c53506eff8431de2a37e
Diffstat (limited to 'vp8/decoder/threading.c')
-rw-r--r-- | vp8/decoder/threading.c | 97 |
1 files changed, 48 insertions, 49 deletions
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); } } |