Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: media/base/win/mf_helpers.cc

Issue 2693923003: Fix IMFSample leak in DXVAVideoDecodeAccelerator (Closed)
Patch Set: fix explicit initialization Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/base/win/mf_helpers.h ('k') | media/gpu/media_foundation_video_encode_accelerator_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/base/win/mf_helpers.h" 5 #include "media/base/win/mf_helpers.h"
6 6
7 namespace media { 7 namespace media {
8 8
9 namespace mf { 9 namespace mf {
10 10
11 void LogDXVAError(int line) { 11 void LogDXVAError(int line) {
12 LOG(ERROR) << "Error in dxva_video_decode_accelerator_win.cc on line " 12 LOG(ERROR) << "Error in dxva_video_decode_accelerator_win.cc on line "
13 << line; 13 << line;
14 } 14 }
15 15
16 IMFSample* CreateEmptySampleWithBuffer(uint32_t buffer_length, int align) { 16 base::win::ScopedComPtr<IMFSample> CreateEmptySampleWithBuffer(
17 uint32_t buffer_length,
18 int align) {
17 CHECK_GT(buffer_length, 0U); 19 CHECK_GT(buffer_length, 0U);
18 20
19 base::win::ScopedComPtr<IMFSample> sample; 21 base::win::ScopedComPtr<IMFSample> sample;
20 HRESULT hr = MFCreateSample(sample.Receive()); 22 HRESULT hr = MFCreateSample(sample.Receive());
21 RETURN_ON_HR_FAILURE(hr, "MFCreateSample failed", NULL); 23 RETURN_ON_HR_FAILURE(hr, "MFCreateSample failed",
24 base::win::ScopedComPtr<IMFSample>());
22 25
23 base::win::ScopedComPtr<IMFMediaBuffer> buffer; 26 base::win::ScopedComPtr<IMFMediaBuffer> buffer;
24 if (align == 0) { 27 if (align == 0) {
25 // Note that MFCreateMemoryBuffer is same as MFCreateAlignedMemoryBuffer 28 // Note that MFCreateMemoryBuffer is same as MFCreateAlignedMemoryBuffer
26 // with the align argument being 0. 29 // with the align argument being 0.
27 hr = MFCreateMemoryBuffer(buffer_length, buffer.Receive()); 30 hr = MFCreateMemoryBuffer(buffer_length, buffer.Receive());
28 } else { 31 } else {
29 hr = 32 hr =
30 MFCreateAlignedMemoryBuffer(buffer_length, align - 1, buffer.Receive()); 33 MFCreateAlignedMemoryBuffer(buffer_length, align - 1, buffer.Receive());
31 } 34 }
32 RETURN_ON_HR_FAILURE(hr, "Failed to create memory buffer for sample", NULL); 35 RETURN_ON_HR_FAILURE(hr, "Failed to create memory buffer for sample",
36 base::win::ScopedComPtr<IMFSample>());
33 37
34 hr = sample->AddBuffer(buffer.get()); 38 hr = sample->AddBuffer(buffer.get());
35 RETURN_ON_HR_FAILURE(hr, "Failed to add buffer to sample", NULL); 39 RETURN_ON_HR_FAILURE(hr, "Failed to add buffer to sample",
40 base::win::ScopedComPtr<IMFSample>());
36 41
37 buffer->SetCurrentLength(0); 42 buffer->SetCurrentLength(0);
38 return sample.Detach(); 43 return sample;
39 } 44 }
40 45
41 MediaBufferScopedPointer::MediaBufferScopedPointer(IMFMediaBuffer* media_buffer) 46 MediaBufferScopedPointer::MediaBufferScopedPointer(IMFMediaBuffer* media_buffer)
42 : media_buffer_(media_buffer), 47 : media_buffer_(media_buffer),
43 buffer_(nullptr), 48 buffer_(nullptr),
44 max_length_(0), 49 max_length_(0),
45 current_length_(0) { 50 current_length_(0) {
46 HRESULT hr = media_buffer_->Lock(&buffer_, &max_length_, &current_length_); 51 HRESULT hr = media_buffer_->Lock(&buffer_, &max_length_, &current_length_);
47 CHECK(SUCCEEDED(hr)); 52 CHECK(SUCCEEDED(hr));
48 } 53 }
49 54
50 MediaBufferScopedPointer::~MediaBufferScopedPointer() { 55 MediaBufferScopedPointer::~MediaBufferScopedPointer() {
51 HRESULT hr = media_buffer_->Unlock(); 56 HRESULT hr = media_buffer_->Unlock();
52 CHECK(SUCCEEDED(hr)); 57 CHECK(SUCCEEDED(hr));
53 } 58 }
54 59
55 } // namespace mf 60 } // namespace mf
56 61
57 } // namespace media 62 } // namespace media
OLDNEW
« no previous file with comments | « media/base/win/mf_helpers.h ('k') | media/gpu/media_foundation_video_encode_accelerator_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698