Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: source/libvpx/vp9/decoder/vp9_dthread.c

Issue 554673004: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_dthread.h ('k') | source/libvpx/vp9/encoder/vp9_bitstream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 VP9LfSync *const lf_sync = &pbi->lf_row_sync; 140 VP9LfSync *const lf_sync = &pbi->lf_row_sync;
141 const VP9WorkerInterface *const winterface = vp9_get_worker_interface(); 141 const VP9WorkerInterface *const winterface = vp9_get_worker_interface();
142 // Number of superblock rows and cols 142 // Number of superblock rows and cols
143 const int sb_rows = mi_cols_aligned_to_sb(cm->mi_rows) >> MI_BLOCK_SIZE_LOG2; 143 const int sb_rows = mi_cols_aligned_to_sb(cm->mi_rows) >> MI_BLOCK_SIZE_LOG2;
144 const int tile_cols = 1 << cm->log2_tile_cols; 144 const int tile_cols = 1 << cm->log2_tile_cols;
145 const int num_workers = MIN(pbi->max_threads & ~1, tile_cols); 145 const int num_workers = MIN(pbi->max_threads & ~1, tile_cols);
146 int i; 146 int i;
147 147
148 // Allocate memory used in thread synchronization. 148 // Allocate memory used in thread synchronization.
149 // This always needs to be done even if frame_filter_level is 0. 149 // This always needs to be done even if frame_filter_level is 0.
150 if (!cm->current_video_frame || cm->last_height != cm->height) { 150 if (!lf_sync->sync_range || cm->last_height != cm->height) {
151 if (cm->last_height != cm->height) { 151 vp9_loop_filter_dealloc(lf_sync);
152 const int aligned_last_height =
153 ALIGN_POWER_OF_TWO(cm->last_height, MI_SIZE_LOG2);
154 const int last_sb_rows =
155 mi_cols_aligned_to_sb(aligned_last_height >> MI_SIZE_LOG2) >>
156 MI_BLOCK_SIZE_LOG2;
157
158 vp9_loop_filter_dealloc(lf_sync, last_sb_rows);
159 }
160
161 vp9_loop_filter_alloc(cm, lf_sync, sb_rows, cm->width); 152 vp9_loop_filter_alloc(cm, lf_sync, sb_rows, cm->width);
162 } 153 }
163 154
164 if (!frame_filter_level) return; 155 if (!frame_filter_level) return;
165 156
166 vp9_loop_filter_frame_init(cm, frame_filter_level); 157 vp9_loop_filter_frame_init(cm, frame_filter_level);
167 158
168 // Initialize cur_sb_col to -1 for all SB rows. 159 // Initialize cur_sb_col to -1 for all SB rows.
169 vpx_memset(lf_sync->cur_sb_col, -1, sizeof(*lf_sync->cur_sb_col) * sb_rows); 160 vpx_memset(lf_sync->cur_sb_col, -1, sizeof(*lf_sync->cur_sb_col) * sb_rows);
170 161
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 return 2; 211 return 2;
221 else if (width <= 4096) 212 else if (width <= 4096)
222 return 4; 213 return 4;
223 else 214 else
224 return 8; 215 return 8;
225 } 216 }
226 217
227 // Allocate memory for lf row synchronization 218 // Allocate memory for lf row synchronization
228 void vp9_loop_filter_alloc(VP9_COMMON *cm, VP9LfSync *lf_sync, int rows, 219 void vp9_loop_filter_alloc(VP9_COMMON *cm, VP9LfSync *lf_sync, int rows,
229 int width) { 220 int width) {
221 lf_sync->rows = rows;
230 #if CONFIG_MULTITHREAD 222 #if CONFIG_MULTITHREAD
231 int i; 223 {
224 int i;
232 225
233 CHECK_MEM_ERROR(cm, lf_sync->mutex_, 226 CHECK_MEM_ERROR(cm, lf_sync->mutex_,
234 vpx_malloc(sizeof(*lf_sync->mutex_) * rows)); 227 vpx_malloc(sizeof(*lf_sync->mutex_) * rows));
235 for (i = 0; i < rows; ++i) { 228 for (i = 0; i < rows; ++i) {
236 pthread_mutex_init(&lf_sync->mutex_[i], NULL); 229 pthread_mutex_init(&lf_sync->mutex_[i], NULL);
237 } 230 }
238 231
239 CHECK_MEM_ERROR(cm, lf_sync->cond_, 232 CHECK_MEM_ERROR(cm, lf_sync->cond_,
240 vpx_malloc(sizeof(*lf_sync->cond_) * rows)); 233 vpx_malloc(sizeof(*lf_sync->cond_) * rows));
241 for (i = 0; i < rows; ++i) { 234 for (i = 0; i < rows; ++i) {
242 pthread_cond_init(&lf_sync->cond_[i], NULL); 235 pthread_cond_init(&lf_sync->cond_[i], NULL);
236 }
243 } 237 }
244 #endif // CONFIG_MULTITHREAD 238 #endif // CONFIG_MULTITHREAD
245 239
246 CHECK_MEM_ERROR(cm, lf_sync->cur_sb_col, 240 CHECK_MEM_ERROR(cm, lf_sync->cur_sb_col,
247 vpx_malloc(sizeof(*lf_sync->cur_sb_col) * rows)); 241 vpx_malloc(sizeof(*lf_sync->cur_sb_col) * rows));
248 242
249 // Set up nsync. 243 // Set up nsync.
250 lf_sync->sync_range = get_sync_range(width); 244 lf_sync->sync_range = get_sync_range(width);
251 } 245 }
252 246
253 // Deallocate lf synchronization related mutex and data 247 // Deallocate lf synchronization related mutex and data
254 void vp9_loop_filter_dealloc(VP9LfSync *lf_sync, int rows) { 248 void vp9_loop_filter_dealloc(VP9LfSync *lf_sync) {
255 #if !CONFIG_MULTITHREAD
256 (void)rows;
257 #endif // !CONFIG_MULTITHREAD
258
259 if (lf_sync != NULL) { 249 if (lf_sync != NULL) {
260 #if CONFIG_MULTITHREAD 250 #if CONFIG_MULTITHREAD
261 int i; 251 int i;
262 252
263 if (lf_sync->mutex_ != NULL) { 253 if (lf_sync->mutex_ != NULL) {
264 for (i = 0; i < rows; ++i) { 254 for (i = 0; i < lf_sync->rows; ++i) {
265 pthread_mutex_destroy(&lf_sync->mutex_[i]); 255 pthread_mutex_destroy(&lf_sync->mutex_[i]);
266 } 256 }
267 vpx_free(lf_sync->mutex_); 257 vpx_free(lf_sync->mutex_);
268 } 258 }
269 if (lf_sync->cond_ != NULL) { 259 if (lf_sync->cond_ != NULL) {
270 for (i = 0; i < rows; ++i) { 260 for (i = 0; i < lf_sync->rows; ++i) {
271 pthread_cond_destroy(&lf_sync->cond_[i]); 261 pthread_cond_destroy(&lf_sync->cond_[i]);
272 } 262 }
273 vpx_free(lf_sync->cond_); 263 vpx_free(lf_sync->cond_);
274 } 264 }
275 #endif // CONFIG_MULTITHREAD 265 #endif // CONFIG_MULTITHREAD
276 vpx_free(lf_sync->cur_sb_col); 266 vpx_free(lf_sync->cur_sb_col);
277 // clear the structure as the source of this call may be a resize in which 267 // clear the structure as the source of this call may be a resize in which
278 // case this call will be followed by an _alloc() which may fail. 268 // case this call will be followed by an _alloc() which may fail.
279 vp9_zero(*lf_sync); 269 vp9_zero(*lf_sync);
280 } 270 }
281 } 271 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/decoder/vp9_dthread.h ('k') | source/libvpx/vp9/encoder/vp9_bitstream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698