aboutsummaryrefslogtreecommitdiff
path: root/libvpx/vp8/decoder/threading.c
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2016-11-15 17:03:40 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-11-15 17:03:40 +0000
commit18ed9d5d0ca9861f7ea23acde2747552a8213298 (patch)
tree6a4919a9fe3f879ac71a5faea9d48c70da01f103 /libvpx/vp8/decoder/threading.c
parent5ef29769fc4acc91a22bf018c62770ed42cb2320 (diff)
parent04d330af88583cdf5f50f05b9a18cf8153b56bd3 (diff)
downloadlibvpx-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.c183
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)