Index: media/gpu/dxva_video_decode_accelerator_win.cc |
diff --git a/media/gpu/dxva_video_decode_accelerator_win.cc b/media/gpu/dxva_video_decode_accelerator_win.cc |
index ce43d8713c650bd2109c259d0bd5a6335e3f84db..8f3f2575c3e7fa3feef923511a0ee269ac876fc8 100644 |
--- a/media/gpu/dxva_video_decode_accelerator_win.cc |
+++ b/media/gpu/dxva_video_decode_accelerator_win.cc |
@@ -39,6 +39,7 @@ |
#include "build/build_config.h" |
#include "gpu/command_buffer/service/gpu_preferences.h" |
#include "gpu/config/gpu_driver_bug_workarounds.h" |
+#include "media/base/win/mf_helpers.h" |
#include "media/base/win/mf_initializer.h" |
#include "media/gpu/dxva_picture_buffer_win.h" |
#include "media/video/video_decode_accelerator.h" |
@@ -187,42 +188,6 @@ static const DWORD g_IntelLegacyGPUList[] = { |
0x102, 0x106, 0x116, 0x126, |
}; |
-// Provides scoped access to the underlying buffer in an IMFMediaBuffer |
-// instance. |
-class MediaBufferScopedPointer { |
- public: |
- explicit MediaBufferScopedPointer(IMFMediaBuffer* media_buffer) |
- : media_buffer_(media_buffer), |
- buffer_(nullptr), |
- max_length_(0), |
- current_length_(0) { |
- HRESULT hr = media_buffer_->Lock(&buffer_, &max_length_, ¤t_length_); |
- CHECK(SUCCEEDED(hr)); |
- } |
- |
- ~MediaBufferScopedPointer() { |
- HRESULT hr = media_buffer_->Unlock(); |
- CHECK(SUCCEEDED(hr)); |
- } |
- |
- uint8_t* get() { return buffer_; } |
- |
- DWORD current_length() const { return current_length_; } |
- |
- private: |
- base::win::ScopedComPtr<IMFMediaBuffer> media_buffer_; |
- uint8_t* buffer_; |
- DWORD max_length_; |
- DWORD current_length_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MediaBufferScopedPointer); |
-}; |
- |
-void LogDXVAError(int line) { |
- LOG(ERROR) << "Error in dxva_video_decode_accelerator_win.cc on line " |
- << line; |
-} |
- |
} // namespace |
namespace media { |
@@ -235,34 +200,6 @@ static const VideoCodecProfile kSupportedProfiles[] = { |
CreateDXGIDeviceManager |
DXVAVideoDecodeAccelerator::create_dxgi_device_manager_ = NULL; |
-#define RETURN_ON_FAILURE(result, log, ret) \ |
- do { \ |
- if (!(result)) { \ |
- DLOG(ERROR) << log; \ |
- LogDXVAError(__LINE__); \ |
- return ret; \ |
- } \ |
- } while (0) |
- |
-#define RETURN_ON_HR_FAILURE(result, log, ret) \ |
- RETURN_ON_FAILURE(SUCCEEDED(result), \ |
- log << ", HRESULT: 0x" << std::hex << result, ret); |
- |
-#define RETURN_AND_NOTIFY_ON_FAILURE(result, log, error_code, ret) \ |
- do { \ |
- if (!(result)) { \ |
- DVLOG(1) << log; \ |
- LogDXVAError(__LINE__); \ |
- StopOnError(error_code); \ |
- return ret; \ |
- } \ |
- } while (0) |
- |
-#define RETURN_AND_NOTIFY_ON_HR_FAILURE(result, log, error_code, ret) \ |
- RETURN_AND_NOTIFY_ON_FAILURE(SUCCEEDED(result), \ |
- log << ", HRESULT: 0x" << std::hex << result, \ |
- error_code, ret); |
- |
enum { |
// Maximum number of iterations we allow before aborting the attempt to flush |
// the batched queries to the driver and allow torn/corrupt frames to be |
@@ -282,41 +219,6 @@ enum { |
kAcquireSyncWaitMs = 0, |
}; |
-static IMFSample* CreateEmptySample() { |
- base::win::ScopedComPtr<IMFSample> sample; |
- HRESULT hr = MFCreateSample(sample.Receive()); |
- RETURN_ON_HR_FAILURE(hr, "MFCreateSample failed", NULL); |
- return sample.Detach(); |
-} |
- |
-// Creates a Media Foundation sample with one buffer of length |buffer_length| |
-// on a |align|-byte boundary. Alignment must be a perfect power of 2 or 0. |
-static IMFSample* CreateEmptySampleWithBuffer(uint32_t buffer_length, |
- int align) { |
- CHECK_GT(buffer_length, 0U); |
- |
- base::win::ScopedComPtr<IMFSample> sample; |
- sample.Attach(CreateEmptySample()); |
- |
- base::win::ScopedComPtr<IMFMediaBuffer> buffer; |
- HRESULT hr = E_FAIL; |
- if (align == 0) { |
- // Note that MFCreateMemoryBuffer is same as MFCreateAlignedMemoryBuffer |
- // with the align argument being 0. |
- hr = MFCreateMemoryBuffer(buffer_length, buffer.Receive()); |
- } else { |
- hr = |
- MFCreateAlignedMemoryBuffer(buffer_length, align - 1, buffer.Receive()); |
- } |
- RETURN_ON_HR_FAILURE(hr, "Failed to create memory buffer for sample", NULL); |
- |
- hr = sample->AddBuffer(buffer.get()); |
- RETURN_ON_HR_FAILURE(hr, "Failed to add buffer to sample", NULL); |
- |
- buffer->SetCurrentLength(0); |
- return sample.Detach(); |
-} |
- |
// Creates a Media Foundation sample with one buffer containing a copy of the |
// given Annex B stream data. |
// If duration and sample time are not known, provide 0. |
@@ -330,7 +232,7 @@ static IMFSample* CreateInputSample(const uint8_t* stream, |
CHECK_GT(size, 0U); |
base::win::ScopedComPtr<IMFSample> sample; |
sample.Attach( |
- CreateEmptySampleWithBuffer(std::max(min_size, size), alignment)); |
+ mf::CreateEmptySampleWithBuffer(std::max(min_size, size), alignment)); |
RETURN_ON_FAILURE(sample.get(), "Failed to create empty sample", NULL); |
base::win::ScopedComPtr<IMFMediaBuffer> buffer; |
@@ -2751,7 +2653,7 @@ HRESULT DXVAVideoDecodeAccelerator::CheckConfigChanged(IMFSample* sample, |
HRESULT hr = sample->GetBufferByIndex(0, buffer.Receive()); |
RETURN_ON_HR_FAILURE(hr, "Failed to get buffer from input sample", hr); |
- MediaBufferScopedPointer scoped_media_buffer(buffer.get()); |
+ mf::MediaBufferScopedPointer scoped_media_buffer(buffer.get()); |
if (!config_change_detector_->DetectConfig( |
scoped_media_buffer.get(), scoped_media_buffer.current_length())) { |