diff options
author | Marco Nelissen <marcone@google.com> | 2016-11-15 17:03:40 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-11-15 17:03:40 +0000 |
commit | 18ed9d5d0ca9861f7ea23acde2747552a8213298 (patch) | |
tree | 6a4919a9fe3f879ac71a5faea9d48c70da01f103 /libvpx/vp8/decoder/threading.c | |
parent | 5ef29769fc4acc91a22bf018c62770ed42cb2320 (diff) | |
parent | 04d330af88583cdf5f50f05b9a18cf8153b56bd3 (diff) | |
download | libvpx-18ed9d5d0ca9861f7ea23acde2747552a8213298.tar.gz |
vp8:fix threading issues am: 70cca742ef am: 2a5398ad19
am: 04d330af88
Change-Id: I2ab48ed0526672609e14b9ea5f02fdfe124d0dea
Diffstat (limited to 'libvpx/vp8/decoder/threading.c')
-rw-r--r-- | libvpx/vp8/decoder/threading.c | 183 |
1 files changed, 82 insertions, 101 deletions
diff --git a/libvpx/vp8/decoder/threading.c b/libvpx/vp8/decoder/threading.c index 6801532f1..a5ac33ac4 100644 --- a/libvpx/vp8/decoder/threading.c +++ b/libvpx/vp8/decoder/threading.c @@ -694,83 +694,67 @@ 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 ; - } - - 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 ; - } - - /* 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 ; - } +void vp8mt_de_alloc_temp_buffers(VP8D_COMP *pbi, int mb_rows) { + int i; - 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 ; - } + vpx_free(pbi->mt_current_mb_col); + pbi->mt_current_mb_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 ; - } + /* 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_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; + } + + 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; + } } @@ -827,41 +811,38 @@ void vp8mt_alloc_temp_buffers(VP8D_COMP *pbi, int width, int prev_mb_rows) } -void vp8_decoder_remove_threads(VP8D_COMP *pbi) -{ - /* shutdown MB Decoding thread; */ - if (pbi->b_multithreaded_rd) - { - int i; +void vp8_decoder_remove_threads(VP8D_COMP *pbi) { + /* shutdown MB Decoding thread; */ + if (pbi->b_multithreaded_rd) { + int i; + pbi->b_multithreaded_rd = 0; - pbi->b_multithreaded_rd = 0; + /* allow all threads to exit */ + for (i = 0; i < pbi->allocated_decoding_thread_count; ++i) { + sem_post(&pbi->h_event_start_decoding[i]); + pthread_join(pbi->h_decoding_thread[i], NULL); + } - /* allow all threads to exit */ - for (i = 0; i < pbi->allocated_decoding_thread_count; i++) - { - sem_post(&pbi->h_event_start_decoding[i]); - pthread_join(pbi->h_decoding_thread[i], NULL); - } + for (i = 0; i < pbi->allocated_decoding_thread_count; ++i) { + sem_destroy(&pbi->h_event_start_decoding[i]); + } - for (i = 0; i < pbi->allocated_decoding_thread_count; i++) - { - sem_destroy(&pbi->h_event_start_decoding[i]); - } + sem_destroy(&pbi->h_event_end_decoding); - sem_destroy(&pbi->h_event_end_decoding); + vpx_free(pbi->h_decoding_thread); + pbi->h_decoding_thread = NULL; - vpx_free(pbi->h_decoding_thread); - pbi->h_decoding_thread = NULL; + vpx_free(pbi->h_event_start_decoding); + pbi->h_event_start_decoding = NULL; - vpx_free(pbi->h_event_start_decoding); - pbi->h_event_start_decoding = NULL; + vpx_free(pbi->mb_row_di); + pbi->mb_row_di = NULL; - vpx_free(pbi->mb_row_di); - pbi->mb_row_di = NULL ; + vpx_free(pbi->de_thread_data); + pbi->de_thread_data = NULL; - vpx_free(pbi->de_thread_data); - pbi->de_thread_data = NULL; - } + vp8mt_de_alloc_temp_buffers(pbi, pbi->common.mb_rows); + } } void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd) |