summaryrefslogtreecommitdiff
path: root/vp8/decoder/threading.c
diff options
context:
space:
mode:
authorJim Bankoski <jimbankoski@google.com>2016-07-21 09:20:10 -0700
committerJames Bankoski <jimbankoski@google.com>2016-07-23 00:50:55 +0000
commit0fff2fb34c7924aa59322518db41ee1953d813f9 (patch)
treefee030bb3663263e75a9cb3ffab9b81523c56fe2 /vp8/decoder/threading.c
parent930773a1ede62d8b29ab2f66361e6e59b11ea6b9 (diff)
downloadlibvpx-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.c97
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);
}
}