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

Side by Side Diff: content/common/gpu/media/vaapi_wrapper.cc

Issue 1432963003: [Ozone] Extends the lifetime of VaapiWrapper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: NOT for upstream Created 5 years, 1 month 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/common/gpu/media/vaapi_wrapper.h" 5 #include "content/common/gpu/media/vaapi_wrapper.h"
6 6
7 #include <dlfcn.h> 7 #include <dlfcn.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 135
136 VaapiWrapper::~VaapiWrapper() { 136 VaapiWrapper::~VaapiWrapper() {
137 DestroyPendingBuffers(); 137 DestroyPendingBuffers();
138 DestroyCodedBuffers(); 138 DestroyCodedBuffers();
139 DestroySurfaces(); 139 DestroySurfaces();
140 DeinitializeVpp(); 140 DeinitializeVpp();
141 Deinitialize(); 141 Deinitialize();
142 } 142 }
143 143
144 // static 144 // static
145 scoped_ptr<VaapiWrapper> VaapiWrapper::Create( 145 scoped_refptr<VaapiWrapper> VaapiWrapper::Create(
146 CodecMode mode, 146 CodecMode mode,
147 VAProfile va_profile, 147 VAProfile va_profile,
148 const base::Closure& report_error_to_uma_cb) { 148 const base::Closure& report_error_to_uma_cb) {
149 if (!profile_infos_.Get().IsProfileSupported(mode, va_profile)) { 149 if (!profile_infos_.Get().IsProfileSupported(mode, va_profile)) {
150 DVLOG(1) << "Unsupported va_profile: " << va_profile; 150 DVLOG(1) << "Unsupported va_profile: " << va_profile;
151 return nullptr; 151 return nullptr;
152 } 152 }
153 153
154 scoped_ptr<VaapiWrapper> vaapi_wrapper(new VaapiWrapper()); 154 scoped_refptr<VaapiWrapper> vaapi_wrapper(new VaapiWrapper());
155 if (vaapi_wrapper->VaInitialize(report_error_to_uma_cb)) { 155 if (vaapi_wrapper->VaInitialize(report_error_to_uma_cb)) {
156 if (vaapi_wrapper->Initialize(mode, va_profile)) 156 if (vaapi_wrapper->Initialize(mode, va_profile))
157 return vaapi_wrapper.Pass(); 157 return vaapi_wrapper.Pass();
158 } 158 }
159 LOG(ERROR) << "Failed to create VaapiWrapper for va_profile: " << va_profile; 159 LOG(ERROR) << "Failed to create VaapiWrapper for va_profile: " << va_profile;
160 return nullptr; 160 return nullptr;
161 } 161 }
162 162
163 // static 163 // static
164 scoped_ptr<VaapiWrapper> VaapiWrapper::CreateForVideoCodec( 164 scoped_refptr<VaapiWrapper> VaapiWrapper::CreateForVideoCodec(
165 CodecMode mode, 165 CodecMode mode,
166 media::VideoCodecProfile profile, 166 media::VideoCodecProfile profile,
167 const base::Closure& report_error_to_uma_cb) { 167 const base::Closure& report_error_to_uma_cb) {
168 VAProfile va_profile = ProfileToVAProfile(profile, mode); 168 VAProfile va_profile = ProfileToVAProfile(profile, mode);
169 scoped_ptr<VaapiWrapper> vaapi_wrapper = 169 scoped_refptr<VaapiWrapper> vaapi_wrapper =
170 Create(mode, va_profile, report_error_to_uma_cb); 170 Create(mode, va_profile, report_error_to_uma_cb);
171 return vaapi_wrapper.Pass(); 171 return vaapi_wrapper.Pass();
172 } 172 }
173 173
174 // static 174 // static
175 media::VideoEncodeAccelerator::SupportedProfiles 175 media::VideoEncodeAccelerator::SupportedProfiles
176 VaapiWrapper::GetSupportedEncodeProfiles() { 176 VaapiWrapper::GetSupportedEncodeProfiles() {
177 media::VideoEncodeAccelerator::SupportedProfiles profiles; 177 media::VideoEncodeAccelerator::SupportedProfiles profiles;
178 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); 178 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
179 if (cmd_line->HasSwitch(switches::kDisableVaapiAcceleratedVideoEncode)) 179 if (cmd_line->HasSwitch(switches::kDisableVaapiAcceleratedVideoEncode))
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1056 #elif defined(USE_OZONE) 1056 #elif defined(USE_OZONE)
1057 paths[kModuleVa_drm].push_back("libva-drm.so.1"); 1057 paths[kModuleVa_drm].push_back("libva-drm.so.1");
1058 #endif 1058 #endif
1059 1059
1060 return InitializeStubs(paths); 1060 return InitializeStubs(paths);
1061 } 1061 }
1062 1062
1063 VaapiWrapper::LazyProfileInfos::LazyProfileInfos() { 1063 VaapiWrapper::LazyProfileInfos::LazyProfileInfos() {
1064 static_assert(arraysize(supported_profiles_) == kCodecModeMax, 1064 static_assert(arraysize(supported_profiles_) == kCodecModeMax,
1065 "The array size of supported profile is incorrect."); 1065 "The array size of supported profile is incorrect.");
1066 scoped_ptr<VaapiWrapper> vaapi_wrapper(new VaapiWrapper()); 1066 scoped_refptr<VaapiWrapper> vaapi_wrapper(new VaapiWrapper());
1067 if (!vaapi_wrapper->VaInitialize(base::Bind(&base::DoNothing))) 1067 if (!vaapi_wrapper->VaInitialize(base::Bind(&base::DoNothing)))
1068 return; 1068 return;
1069 for (size_t i = 0; i < kCodecModeMax; ++i) { 1069 for (size_t i = 0; i < kCodecModeMax; ++i) {
1070 supported_profiles_[i] = 1070 supported_profiles_[i] =
1071 vaapi_wrapper->GetSupportedProfileInfosForCodecModeInternal( 1071 vaapi_wrapper->GetSupportedProfileInfosForCodecModeInternal(
1072 static_cast<CodecMode>(i)); 1072 static_cast<CodecMode>(i));
1073 } 1073 }
1074 } 1074 }
1075 1075
1076 VaapiWrapper::LazyProfileInfos::~LazyProfileInfos() { 1076 VaapiWrapper::LazyProfileInfos::~LazyProfileInfos() {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 drm_fd_.reset(HANDLE_EINTR(dup(fd))); 1151 drm_fd_.reset(HANDLE_EINTR(dup(fd)));
1152 } 1152 }
1153 #endif // USE_OZONE 1153 #endif // USE_OZONE
1154 1154
1155 bool VaapiWrapper::VADisplayState::VAAPIVersionLessThan(int major, int minor) { 1155 bool VaapiWrapper::VADisplayState::VAAPIVersionLessThan(int major, int minor) {
1156 return (major_version_ < major) || 1156 return (major_version_ < major) ||
1157 (major_version_ == major && minor_version_ < minor); 1157 (major_version_ == major && minor_version_ < minor);
1158 } 1158 }
1159 1159
1160 } // namespace content 1160 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698