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

Unified Diff: content/common/gpu/media/vaapi_h264_decoder.cc

Issue 10827173: Only dlopen() OMX/VAAPI libs in the GPU process, and only lazily dlsym() their symbols. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add include_dirs for new gpu_main.cc deps. Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/media/vaapi_h264_decoder.cc
diff --git a/content/common/gpu/media/vaapi_h264_decoder.cc b/content/common/gpu/media/vaapi_h264_decoder.cc
index cb716b29fb75c32969b160cbd644919ceb60394d..63cb4ca15232d3399753d10a14abe62287fa61c4 100644
--- a/content/common/gpu/media/vaapi_h264_decoder.cc
+++ b/content/common/gpu/media/vaapi_h264_decoder.cc
@@ -33,8 +33,8 @@
namespace content {
-void *vaapi_handle = dlopen("libva.so", RTLD_NOW);
-void *vaapi_x11_handle = dlopen("libva-x11.so", RTLD_NOW);
+void *vaapi_handle = NULL;
+void *vaapi_x11_handle = NULL;
typedef VADisplay (*VaapiGetDisplay)(Display *dpy);
typedef int (*VaapiDisplayIsValid)(VADisplay dpy);
@@ -105,51 +105,30 @@ typedef VAStatus (*VaapiCreateBuffer)(VADisplay dpy,
typedef VAStatus (*VaapiDestroyBuffer)(VADisplay dpy, VABufferID buffer_id);
typedef const char* (*VaapiErrorStr)(VAStatus error_status);
-#define VAAPI_DLSYM(name, handle) \
- Vaapi##name VAAPI_##name = \
- reinterpret_cast<Vaapi##name>(dlsym((handle), "va"#name))
-
-VAAPI_DLSYM(GetDisplay, vaapi_x11_handle);
-VAAPI_DLSYM(DisplayIsValid, vaapi_handle);
-VAAPI_DLSYM(Initialize, vaapi_handle);
-VAAPI_DLSYM(Terminate, vaapi_handle);
-VAAPI_DLSYM(GetConfigAttributes, vaapi_handle);
-VAAPI_DLSYM(CreateConfig, vaapi_handle);
-VAAPI_DLSYM(DestroyConfig, vaapi_handle);
-VAAPI_DLSYM(CreateSurfaces, vaapi_handle);
-VAAPI_DLSYM(DestroySurfaces, vaapi_handle);
-VAAPI_DLSYM(CreateContext, vaapi_handle);
-VAAPI_DLSYM(DestroyContext, vaapi_handle);
-VAAPI_DLSYM(PutSurface, vaapi_x11_handle);
-VAAPI_DLSYM(SyncSurface, vaapi_x11_handle);
-VAAPI_DLSYM(BeginPicture, vaapi_handle);
-VAAPI_DLSYM(RenderPicture, vaapi_handle);
-VAAPI_DLSYM(EndPicture, vaapi_handle);
-VAAPI_DLSYM(CreateBuffer, vaapi_handle);
-VAAPI_DLSYM(DestroyBuffer, vaapi_handle);
-VAAPI_DLSYM(ErrorStr, vaapi_handle);
-
-static bool AreVaapiFunctionPointersInitialized() {
- return VAAPI_GetDisplay &&
- VAAPI_DisplayIsValid &&
- VAAPI_Initialize &&
- VAAPI_Terminate &&
- VAAPI_GetConfigAttributes &&
- VAAPI_CreateConfig &&
- VAAPI_DestroyConfig &&
- VAAPI_CreateSurfaces &&
- VAAPI_DestroySurfaces &&
- VAAPI_CreateContext &&
- VAAPI_DestroyContext &&
- VAAPI_PutSurface &&
- VAAPI_SyncSurface &&
- VAAPI_BeginPicture &&
- VAAPI_RenderPicture &&
- VAAPI_EndPicture &&
- VAAPI_CreateBuffer &&
- VAAPI_DestroyBuffer &&
- VAAPI_ErrorStr;
-}
+#define VAAPI_SYM(name, handle) Vaapi##name VAAPI_##name = NULL
+
+VAAPI_SYM(GetDisplay, vaapi_x11_handle);
+VAAPI_SYM(DisplayIsValid, vaapi_handle);
+VAAPI_SYM(Initialize, vaapi_handle);
+VAAPI_SYM(Terminate, vaapi_handle);
+VAAPI_SYM(GetConfigAttributes, vaapi_handle);
+VAAPI_SYM(CreateConfig, vaapi_handle);
+VAAPI_SYM(DestroyConfig, vaapi_handle);
+VAAPI_SYM(CreateSurfaces, vaapi_handle);
+VAAPI_SYM(DestroySurfaces, vaapi_handle);
+VAAPI_SYM(CreateContext, vaapi_handle);
+VAAPI_SYM(DestroyContext, vaapi_handle);
+VAAPI_SYM(PutSurface, vaapi_x11_handle);
+VAAPI_SYM(SyncSurface, vaapi_x11_handle);
+VAAPI_SYM(BeginPicture, vaapi_handle);
+VAAPI_SYM(RenderPicture, vaapi_handle);
+VAAPI_SYM(EndPicture, vaapi_handle);
+VAAPI_SYM(CreateBuffer, vaapi_handle);
+VAAPI_SYM(DestroyBuffer, vaapi_handle);
+VAAPI_SYM(ErrorStr, vaapi_handle);
+
+// static
+bool VaapiH264Decoder::pre_sandbox_init_done_ = false;
class VaapiH264Decoder::DecodeSurface {
public:
@@ -496,11 +475,6 @@ bool VaapiH264Decoder::Initialize(
return false;
}
- if (!AreVaapiFunctionPointersInitialized()) {
- DVLOG(1) << "Could not load libva";
- return false;
- }
-
if (!InitializeFBConfig()) {
DVLOG(1) << "Could not get a usable FBConfig";
return false;
@@ -2098,4 +2072,61 @@ size_t VaapiH264Decoder::GetRequiredNumOfPictures() {
return kNumReqPictures;
}
+// static
+void VaapiH264Decoder::PreSandboxInitialization() {
+ DCHECK(!pre_sandbox_init_done_);
+ vaapi_handle = dlopen("libva.so", RTLD_NOW);
+ vaapi_x11_handle = dlopen("libva-x11.so", RTLD_NOW);
+ pre_sandbox_init_done_ = vaapi_handle && vaapi_x11_handle;
+}
+
+// static
+bool VaapiH264Decoder::PostSandboxInitialization() {
+ if (!pre_sandbox_init_done_)
+ return false;
+#define VAAPI_DLSYM(name, handle) \
+ VAAPI_##name = reinterpret_cast<Vaapi##name>(dlsym((handle), "va"#name)) \
+
+ VAAPI_DLSYM(GetDisplay, vaapi_x11_handle);
+ VAAPI_DLSYM(DisplayIsValid, vaapi_handle);
+ VAAPI_DLSYM(Initialize, vaapi_handle);
+ VAAPI_DLSYM(Terminate, vaapi_handle);
+ VAAPI_DLSYM(GetConfigAttributes, vaapi_handle);
+ VAAPI_DLSYM(CreateConfig, vaapi_handle);
+ VAAPI_DLSYM(DestroyConfig, vaapi_handle);
+ VAAPI_DLSYM(CreateSurfaces, vaapi_handle);
+ VAAPI_DLSYM(DestroySurfaces, vaapi_handle);
+ VAAPI_DLSYM(CreateContext, vaapi_handle);
+ VAAPI_DLSYM(DestroyContext, vaapi_handle);
+ VAAPI_DLSYM(PutSurface, vaapi_x11_handle);
+ VAAPI_DLSYM(SyncSurface, vaapi_x11_handle);
+ VAAPI_DLSYM(BeginPicture, vaapi_handle);
+ VAAPI_DLSYM(RenderPicture, vaapi_handle);
+ VAAPI_DLSYM(EndPicture, vaapi_handle);
+ VAAPI_DLSYM(CreateBuffer, vaapi_handle);
+ VAAPI_DLSYM(DestroyBuffer, vaapi_handle);
+ VAAPI_DLSYM(ErrorStr, vaapi_handle);
+#undef VAAPI_DLSYM
+
+ return VAAPI_GetDisplay &&
+ VAAPI_DisplayIsValid &&
+ VAAPI_Initialize &&
+ VAAPI_Terminate &&
+ VAAPI_GetConfigAttributes &&
+ VAAPI_CreateConfig &&
+ VAAPI_DestroyConfig &&
+ VAAPI_CreateSurfaces &&
+ VAAPI_DestroySurfaces &&
+ VAAPI_CreateContext &&
+ VAAPI_DestroyContext &&
+ VAAPI_PutSurface &&
+ VAAPI_SyncSurface &&
+ VAAPI_BeginPicture &&
+ VAAPI_RenderPicture &&
+ VAAPI_EndPicture &&
+ VAAPI_CreateBuffer &&
+ VAAPI_DestroyBuffer &&
+ VAAPI_ErrorStr;
+}
+
} // namespace content
« no previous file with comments | « content/common/gpu/media/vaapi_h264_decoder.h ('k') | content/common/gpu/media/vaapi_video_decode_accelerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698