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..96fbb740907284f528ea755ad2ed5d2d825a3a34 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() { |
+ static_assert(sizeof(State) == sizeof(long), "mismatched type sizes"); |
+ 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; |
+ } |
+ |
+ static_assert(sizeof(State) == sizeof(long), "mismatched type sizes"); |
+ ::InterlockedExchange(reinterpret_cast<volatile long*>(&state_), |
+ new_state); |
+ DCHECK_EQ(state_, new_state); |
} |
void DXVAVideoDecodeAccelerator::StartDecoderThread() { |