OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "media/base/win/mf_helpers.h" |
| 6 |
| 7 namespace media { |
| 8 |
| 9 namespace mf { |
| 10 |
| 11 void LogDXVAError(int line) { |
| 12 LOG(ERROR) << "Error in dxva_video_decode_accelerator_win.cc on line " |
| 13 << line; |
| 14 } |
| 15 |
| 16 IMFSample* CreateEmptySampleWithBuffer(uint32_t buffer_length, int align) { |
| 17 CHECK_GT(buffer_length, 0U); |
| 18 |
| 19 base::win::ScopedComPtr<IMFSample> sample; |
| 20 HRESULT hr = MFCreateSample(sample.Receive()); |
| 21 RETURN_ON_HR_FAILURE(hr, "MFCreateSample failed", NULL); |
| 22 |
| 23 base::win::ScopedComPtr<IMFMediaBuffer> buffer; |
| 24 if (align == 0) { |
| 25 // Note that MFCreateMemoryBuffer is same as MFCreateAlignedMemoryBuffer |
| 26 // with the align argument being 0. |
| 27 hr = MFCreateMemoryBuffer(buffer_length, buffer.Receive()); |
| 28 } else { |
| 29 hr = |
| 30 MFCreateAlignedMemoryBuffer(buffer_length, align - 1, buffer.Receive()); |
| 31 } |
| 32 RETURN_ON_HR_FAILURE(hr, "Failed to create memory buffer for sample", NULL); |
| 33 |
| 34 hr = sample->AddBuffer(buffer.get()); |
| 35 RETURN_ON_HR_FAILURE(hr, "Failed to add buffer to sample", NULL); |
| 36 |
| 37 buffer->SetCurrentLength(0); |
| 38 return sample.Detach(); |
| 39 } |
| 40 |
| 41 MediaBufferScopedPointer::MediaBufferScopedPointer(IMFMediaBuffer* media_buffer) |
| 42 : media_buffer_(media_buffer), |
| 43 buffer_(nullptr), |
| 44 max_length_(0), |
| 45 current_length_(0) { |
| 46 HRESULT hr = media_buffer_->Lock(&buffer_, &max_length_, ¤t_length_); |
| 47 CHECK(SUCCEEDED(hr)); |
| 48 } |
| 49 |
| 50 MediaBufferScopedPointer::~MediaBufferScopedPointer() { |
| 51 HRESULT hr = media_buffer_->Unlock(); |
| 52 CHECK(SUCCEEDED(hr)); |
| 53 } |
| 54 |
| 55 } // namespace mf |
| 56 |
| 57 } // namespace media |
OLD | NEW |