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

Side by Side Diff: source/libvpx/vp9/encoder/vp9_ethread.c

Issue 800493003: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Keep vp9_iht8x8_add_neon disabled because of http://llvm.org/bugs/show_bug.cgi?id=22178 Created 5 years, 11 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
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_encoder.c ('k') | source/libvpx/vp9/encoder/vp9_picklpf.c » ('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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 const int num_workers = MIN(cpi->oxcf.max_threads, tile_cols); 160 const int num_workers = MIN(cpi->oxcf.max_threads, tile_cols);
161 int i; 161 int i;
162 162
163 vp9_init_tile_data(cpi); 163 vp9_init_tile_data(cpi);
164 164
165 // Only run once to create threads and allocate thread data. 165 // Only run once to create threads and allocate thread data.
166 if (cpi->num_workers == 0) { 166 if (cpi->num_workers == 0) {
167 CHECK_MEM_ERROR(cm, cpi->workers, 167 CHECK_MEM_ERROR(cm, cpi->workers,
168 vpx_malloc(num_workers * sizeof(*cpi->workers))); 168 vpx_malloc(num_workers * sizeof(*cpi->workers)));
169 169
170 CHECK_MEM_ERROR(cm, cpi->tile_thr_data,
171 vpx_calloc(num_workers, sizeof(*cpi->tile_thr_data)));
172
170 for (i = 0; i < num_workers; i++) { 173 for (i = 0; i < num_workers; i++) {
171 VP9Worker *const worker = &cpi->workers[i]; 174 VP9Worker *const worker = &cpi->workers[i];
172 EncWorkerData *thread_data; 175 EncWorkerData *thread_data = &cpi->tile_thr_data[i];
173 176
174 ++cpi->num_workers; 177 ++cpi->num_workers;
175
176 winterface->init(worker); 178 winterface->init(worker);
177 CHECK_MEM_ERROR(cm, worker->data1,
178 (EncWorkerData*)vpx_calloc(1, sizeof(EncWorkerData)));
179 thread_data = (EncWorkerData*)worker->data1;
180 179
181 if (i < num_workers - 1) { 180 if (i < num_workers - 1) {
182 thread_data->cpi = cpi; 181 thread_data->cpi = cpi;
183 182
184 // Allocate thread data. 183 // Allocate thread data.
185 CHECK_MEM_ERROR(cm, thread_data->td, 184 CHECK_MEM_ERROR(cm, thread_data->td,
186 vpx_calloc(1, sizeof(*thread_data->td))); 185 vpx_memalign(32, sizeof(*thread_data->td)));
186 vp9_zero(*thread_data->td);
187
187 // Set up pc_tree. 188 // Set up pc_tree.
188 thread_data->td->leaf_tree = NULL; 189 thread_data->td->leaf_tree = NULL;
189 thread_data->td->pc_tree = NULL; 190 thread_data->td->pc_tree = NULL;
190 vp9_setup_pc_tree(cm, thread_data->td); 191 vp9_setup_pc_tree(cm, thread_data->td);
191 192
192 // Allocate frame counters in thread data. 193 // Allocate frame counters in thread data.
193 CHECK_MEM_ERROR(cm, thread_data->td->counts, 194 CHECK_MEM_ERROR(cm, thread_data->td->counts,
194 vpx_calloc(1, sizeof(*thread_data->td->counts))); 195 vpx_calloc(1, sizeof(*thread_data->td->counts)));
195 196
196 // Create threads 197 // Create threads
197 if (!winterface->reset(worker)) 198 if (!winterface->reset(worker))
198 vpx_internal_error(&cm->error, VPX_CODEC_ERROR, 199 vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
199 "Tile encoder thread creation failed"); 200 "Tile encoder thread creation failed");
200 } else { 201 } else {
201 // Main thread acts as a worker and uses the thread data in cpi. 202 // Main thread acts as a worker and uses the thread data in cpi.
202 thread_data->cpi = cpi; 203 thread_data->cpi = cpi;
203 thread_data->td = &cpi->td; 204 thread_data->td = &cpi->td;
204 } 205 }
205 206
206 // data2 is unused.
207 worker->data2 = NULL;
208
209 winterface->sync(worker); 207 winterface->sync(worker);
210 worker->hook = (VP9WorkerHook)enc_worker_hook;
211 } 208 }
212 } 209 }
213 210
214 for (i = 0; i < num_workers; i++) { 211 for (i = 0; i < num_workers; i++) {
215 VP9Worker *const worker = &cpi->workers[i]; 212 VP9Worker *const worker = &cpi->workers[i];
216 EncWorkerData *const thread_data = (EncWorkerData*)worker->data1; 213 EncWorkerData *thread_data;
214
215 worker->hook = (VP9WorkerHook)enc_worker_hook;
216 worker->data1 = &cpi->tile_thr_data[i];
217 worker->data2 = NULL;
218 thread_data = (EncWorkerData*)worker->data1;
217 219
218 // Before encoding a frame, copy the thread data from cpi. 220 // Before encoding a frame, copy the thread data from cpi.
219 thread_data->td->mb = cpi->td.mb; 221 thread_data->td->mb = cpi->td.mb;
220 thread_data->td->rd_counts = cpi->td.rd_counts; 222 thread_data->td->rd_counts = cpi->td.rd_counts;
221 vpx_memcpy(thread_data->td->counts, &cpi->common.counts, 223 vpx_memcpy(thread_data->td->counts, &cpi->common.counts,
222 sizeof(cpi->common.counts)); 224 sizeof(cpi->common.counts));
223 225
224 // Handle use_nonrd_pick_mode case. 226 // Handle use_nonrd_pick_mode case.
225 if (cpi->sf.use_nonrd_pick_mode) { 227 if (cpi->sf.use_nonrd_pick_mode) {
226 MACROBLOCK *const x = &thread_data->td->mb; 228 MACROBLOCK *const x = &thread_data->td->mb;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 VP9Worker *const worker = &cpi->workers[i]; 265 VP9Worker *const worker = &cpi->workers[i];
264 EncWorkerData *const thread_data = (EncWorkerData*)worker->data1; 266 EncWorkerData *const thread_data = (EncWorkerData*)worker->data1;
265 267
266 // Accumulate counters. 268 // Accumulate counters.
267 if (i < num_workers - 1) { 269 if (i < num_workers - 1) {
268 accumulate_frame_counts(&cpi->common, thread_data->td); 270 accumulate_frame_counts(&cpi->common, thread_data->td);
269 accumulate_rd_opt(&cpi->td, thread_data->td); 271 accumulate_rd_opt(&cpi->td, thread_data->td);
270 } 272 }
271 } 273 }
272 } 274 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_encoder.c ('k') | source/libvpx/vp9/encoder/vp9_picklpf.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698