Index: media/base/win/mf_helpers.cc |
diff --git a/media/base/win/mf_helpers.cc b/media/base/win/mf_helpers.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e5df966ae2c029f9eb05437cec82f3b057a0f30e |
--- /dev/null |
+++ b/media/base/win/mf_helpers.cc |
@@ -0,0 +1,57 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "media/base/win/mf_helpers.h" |
+ |
+namespace media { |
+ |
+namespace mf { |
+ |
+void LogDXVAError(int line) { |
+ LOG(ERROR) << "Error in dxva_video_decode_accelerator_win.cc on line " |
+ << line; |
+} |
+ |
+IMFSample* CreateEmptySampleWithBuffer(uint32_t buffer_length, int align) { |
+ CHECK_GT(buffer_length, 0U); |
+ |
+ base::win::ScopedComPtr<IMFSample> sample; |
+ HRESULT hr = MFCreateSample(sample.Receive()); |
+ RETURN_ON_HR_FAILURE(hr, "MFCreateSample failed", NULL); |
+ |
+ base::win::ScopedComPtr<IMFMediaBuffer> buffer; |
+ 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(); |
+} |
+ |
+MediaBufferScopedPointer::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::~MediaBufferScopedPointer() { |
+ HRESULT hr = media_buffer_->Unlock(); |
+ CHECK(SUCCEEDED(hr)); |
+} |
+ |
+} // namespace mf |
+ |
+} // namespace media |