Chromium Code Reviews| Index: content/common/gpu/media/dxva_video_decode_accelerator.cc |
| diff --git a/content/common/gpu/media/dxva_video_decode_accelerator.cc b/content/common/gpu/media/dxva_video_decode_accelerator.cc |
| index 9ac0f0defdebee4185e213c55add706bc2b9b3b5..428219e6267bf6d39c8f606d3af70e2477f1ba5b 100644 |
| --- a/content/common/gpu/media/dxva_video_decode_accelerator.cc |
| +++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc |
| @@ -1456,27 +1456,28 @@ void DXVAVideoDecodeAccelerator::DeferredDismissStaleBuffer( |
| stale_output_picture_buffers_.erase(it); |
| } |
| -DXVAVideoDecodeAccelerator::State |
| -DXVAVideoDecodeAccelerator::GetState() const { |
| - State state = kUninitialized; |
| - ::InterlockedExchange(reinterpret_cast<long*>(&state), |
| - state_); |
| - return state; |
| -} |
| - |
| -void DXVAVideoDecodeAccelerator::SetState(State new_state) { |
| - if (!main_thread_task_runner_->BelongsToCurrentThread()) { |
| - main_thread_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&DXVAVideoDecodeAccelerator::SetState, |
| - weak_this_factory_.GetWeakPtr(), |
| - new_state)); |
| - return; |
| - } |
| - ::InterlockedCompareExchange(reinterpret_cast<long*>(&state_), |
| - new_state, |
| - state_); |
| - DCHECK_EQ(state_, new_state); |
| +DXVAVideoDecodeAccelerator::State |
| +DXVAVideoDecodeAccelerator::GetState() { |
| + DCHECK(sizeof(State) == sizeof(long)); |
|
brucedawson
2014/12/12 20:50:18
You shouldn't use DCHECK here -- use static_assert
ananta
2014/12/12 20:58:58
Thanks. done.
|
| + State state = static_cast<State>( |
| + InterlockedAdd(reinterpret_cast<volatile long*>(&state_), 0)); |
| + return state; |
| +} |
| + |
| +void DXVAVideoDecodeAccelerator::SetState(State new_state) { |
| + if (!main_thread_task_runner_->BelongsToCurrentThread()) { |
| + main_thread_task_runner_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&DXVAVideoDecodeAccelerator::SetState, |
| + weak_this_factory_.GetWeakPtr(), |
| + new_state)); |
| + return; |
| + } |
| + |
| + DCHECK(sizeof(State) == sizeof(long)); |
| + ::InterlockedExchange(reinterpret_cast<volatile long*>(&state_), |
| + new_state); |
| + DCHECK_EQ(state_, new_state); |
| } |
| void DXVAVideoDecodeAccelerator::StartDecoderThread() { |