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 c99121ccaf95553e2bbb75cd2d95a31435f9a2ec..fb019ca1cc761c121ccc92fb8e9c35c20384f774 100644 |
--- a/content/common/gpu/media/dxva_video_decode_accelerator.cc |
+++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc |
@@ -391,10 +391,11 @@ bool DXVAVideoDecodeAccelerator::DXVAPictureBuffer:: |
// Ideally, this should be done immediately before the draw call that uses |
// the texture. Flush it once here though. |
hr = query_->Issue(D3DISSUE_END); |
+ RETURN_ON_HR_FAILURE(hr, "Failed to issue END", false); |
do { |
hr = query_->GetData(NULL, 0, D3DGETDATA_FLUSH); |
if (hr == S_FALSE) |
- Sleep(0); |
+ Sleep(1); // Poor-man's Yield(). |
} while (hr == S_FALSE); |
eglBindTexImage( |
@@ -489,6 +490,10 @@ bool DXVAVideoDecodeAccelerator::CreateD3DDevManager() { |
hr = device_->CreateQuery(D3DQUERYTYPE_EVENT, &query_); |
RETURN_ON_HR_FAILURE(hr, "Failed to create D3D device query", false); |
+ // Ensure query_ API works (to avoid an infinite loop later in |
+ // CopyOutputSampleDataToPictureBuffer). |
+ hr = query_->Issue(D3DISSUE_END); |
+ RETURN_ON_HR_FAILURE(hr, "Failed to issue END test query", false); |
return true; |
} |