18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// found in the LICENSE file.
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "media/base/media.h"
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <windows.h>
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(_WIN32_WINNT_WIN8)
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// The Windows 8 SDK defines FACILITY_VISUALCPP in winerror.h.
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef FACILITY_VISUALCPP
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <delayimp.h>
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/files/file_path.h"
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#pragma comment(lib, "delayimp.lib")
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectnamespace media {
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectnamespace internal {
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectbool InitializeMediaLibraryInternal(const base::FilePath& module_dir) {
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  // LoadLibraryEx(..., LOAD_WITH_ALTERED_SEARCH_PATH) cannot handle
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  // relative path.
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (!module_dir.IsAbsolute())
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return false;
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  // Use alternate DLL search path so we don't load dependencies from the
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  // system path.  Refer to http://crbug.com/35857
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  static const char kFFmpegDLL[] = "ffmpegsumo.dll";
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  HMODULE lib = ::LoadLibraryEx(
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      module_dir.AppendASCII(kFFmpegDLL).value().c_str(), NULL,
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      LOAD_WITH_ALTERED_SEARCH_PATH);
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  // Check that we loaded the library successfully.
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  return lib != NULL;
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3820894ae3fa98f82da925fbeb72e616eef509758aDavid 'Digit' Turner}  // namespace internal
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}  // namespace media
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project