Commit a1ef75bb authored by Hangyu Kuang's avatar Hangyu Kuang Committed by Gerrit Code Review
Browse files

Merge "Only wait for previous frame's motion vector if needed."

parents 274af39e d5fa786b
...@@ -69,13 +69,23 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd, ...@@ -69,13 +69,23 @@ static void find_mv_refs_idx(const VP9_COMMON *cm, const MACROBLOCKD *xd,
} }
} }
// Synchronize here for frame parallel decode if sync function is provided. // TODO(hkuang): Remove this sync after fixing pthread_cond_broadcast
if (sync != NULL) { // on windows platform. The sync here is unncessary if use_perv_frame_mvs
// is 0. But after removing it, there will be hang in the unit test on windows
// due to several threads waiting for a thread's signal.
#if defined(_WIN32) && !HAVE_PTHREAD_H
if (cm->frame_parallel_decode && sync != NULL) {
sync(data, mi_row); sync(data, mi_row);
} }
#endif
// Check the last frame's mode and mv info. // Check the last frame's mode and mv info.
if (cm->use_prev_frame_mvs) { if (cm->use_prev_frame_mvs) {
// Synchronize here for frame parallel decode if sync function is provided.
if (cm->frame_parallel_decode && sync != NULL) {
sync(data, mi_row);
}
if (prev_frame_mvs->ref_frame[0] == ref_frame) { if (prev_frame_mvs->ref_frame[0] == ref_frame) {
ADD_MV_REF_LIST(prev_frame_mvs->mv[0], refmv_count, mv_ref_list, Done); ADD_MV_REF_LIST(prev_frame_mvs->mv[0], refmv_count, mv_ref_list, Done);
} else if (prev_frame_mvs->ref_frame[1] == ref_frame) { } else if (prev_frame_mvs->ref_frame[1] == ref_frame) {
......
...@@ -38,8 +38,14 @@ void vp9_frameworker_unlock_stats(VP9Worker *const worker) { ...@@ -38,8 +38,14 @@ void vp9_frameworker_unlock_stats(VP9Worker *const worker) {
void vp9_frameworker_signal_stats(VP9Worker *const worker) { void vp9_frameworker_signal_stats(VP9Worker *const worker) {
#if CONFIG_MULTITHREAD #if CONFIG_MULTITHREAD
FrameWorkerData *const worker_data = worker->data1; FrameWorkerData *const worker_data = worker->data1;
// TODO(hkuang): Investigate using broadcast or signal.
// TODO(hkuang): Fix the pthread_cond_broadcast in windows wrapper.
#if defined(_WIN32) && !HAVE_PTHREAD_H
pthread_cond_signal(&worker_data->stats_cond); pthread_cond_signal(&worker_data->stats_cond);
#else
pthread_cond_broadcast(&worker_data->stats_cond);
#endif
#else #else
(void)worker; (void)worker;
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment