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 |