| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/media.h" | 5 #include "media/base/media.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include <dlfcn.h> | 9 #include <dlfcn.h> |
| 10 | 10 |
| 11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/native_library.h" | 13 #include "base/native_library.h" |
| 14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
| 15 #include "base/stringize_macros.h" | 15 #include "base/stringize_macros.h" |
| 16 #include "media/ffmpeg/ffmpeg_common.h" | 16 #include "media/ffmpeg/ffmpeg_common.h" |
| 17 #include "third_party/ffmpeg/ffmpeg_stubs.h" | 17 #include "third_party/ffmpeg/ffmpeg_stubs.h" |
| 18 #if defined(OS_LINUX) | 18 #if defined(OS_LINUX) |
| 19 // OpenMAX IL stub is generated only on Linux. | 19 // OpenMAX IL stub is generated only on Linux. |
| 20 #include "third_party/openmax/il_stubs.h" | 20 #include "third_party/openmax/il_stubs.h" |
| 21 #endif | 21 #endif |
| 22 | 22 |
| 23 namespace tp_ffmpeg = third_party_ffmpeg; | 23 namespace tp_ffmpeg = third_party_ffmpeg; |
| 24 | 24 |
| 25 namespace media { | 25 namespace media { |
| 26 | 26 |
| 27 namespace { | |
| 28 | |
| 29 // Handy to prevent shooting ourselves in the foot with macro wizardry. | 27 // Handy to prevent shooting ourselves in the foot with macro wizardry. |
| 30 #if !defined(LIBAVCODEC_VERSION_MAJOR) || \ | 28 #if !defined(LIBAVCODEC_VERSION_MAJOR) || \ |
| 31 !defined(LIBAVFORMAT_VERSION_MAJOR) || \ | 29 !defined(LIBAVFORMAT_VERSION_MAJOR) || \ |
| 32 !defined(LIBAVUTIL_VERSION_MAJOR) | 30 !defined(LIBAVUTIL_VERSION_MAJOR) |
| 33 #error FFmpeg headers not included! | 31 #error FFmpeg headers not included! |
| 34 #endif | 32 #endif |
| 35 | 33 |
| 36 #define AVCODEC_VERSION STRINGIZE(LIBAVCODEC_VERSION_MAJOR) | 34 #define AVCODEC_VERSION STRINGIZE(LIBAVCODEC_VERSION_MAJOR) |
| 37 #define AVFORMAT_VERSION STRINGIZE(LIBAVFORMAT_VERSION_MAJOR) | 35 #define AVFORMAT_VERSION STRINGIZE(LIBAVFORMAT_VERSION_MAJOR) |
| 38 #define AVUTIL_VERSION STRINGIZE(LIBAVUTIL_VERSION_MAJOR) | 36 #define AVUTIL_VERSION STRINGIZE(LIBAVUTIL_VERSION_MAJOR) |
| 39 | 37 |
| 40 #if defined(OS_MACOSX) | 38 #if defined(OS_MACOSX) |
| 41 #define DSO_NAME(MODULE, VERSION) ("lib" MODULE "." VERSION ".dylib") | 39 #define DSO_NAME(MODULE, VERSION) ("lib" MODULE "." VERSION ".dylib") |
| 42 const FilePath::CharType sumo_name[] = | 40 static const FilePath::CharType sumo_name[] = |
| 43 FILE_PATH_LITERAL("libffmpegsumo.dylib"); | 41 FILE_PATH_LITERAL("libffmpegsumo.dylib"); |
| 44 #elif defined(OS_POSIX) | 42 #elif defined(OS_POSIX) |
| 45 #define DSO_NAME(MODULE, VERSION) ("lib" MODULE ".so." VERSION) | 43 #define DSO_NAME(MODULE, VERSION) ("lib" MODULE ".so." VERSION) |
| 46 const FilePath::CharType sumo_name[] = FILE_PATH_LITERAL("libffmpegsumo.so"); | 44 static const FilePath::CharType sumo_name[] = |
| 45 FILE_PATH_LITERAL("libffmpegsumo.so"); |
| 47 #else | 46 #else |
| 48 #error "Do not know how to construct DSO name for this OS." | 47 #error "Do not know how to construct DSO name for this OS." |
| 49 #endif | 48 #endif |
| 50 const FilePath::CharType openmax_name[] = FILE_PATH_LITERAL("libOmxCore.so"); | 49 static const FilePath::CharType openmax_name[] = |
| 50 FILE_PATH_LITERAL("libOmxCore.so"); |
| 51 | 51 |
| 52 // Retrieves the DSOName for the given key. | 52 // Retrieves the DSOName for the given key. |
| 53 std::string GetDSOName(tp_ffmpeg::StubModules stub_key) { | 53 static std::string GetDSOName(tp_ffmpeg::StubModules stub_key) { |
| 54 // TODO(ajwong): Remove this once mac is migrated. Either that, or have GYP | 54 // TODO(ajwong): Remove this once mac is migrated. Either that, or have GYP |
| 55 // set a constant that we can switch implementations based off of. | 55 // set a constant that we can switch implementations based off of. |
| 56 switch (stub_key) { | 56 switch (stub_key) { |
| 57 case tp_ffmpeg::kModuleAvcodec52: | 57 case tp_ffmpeg::kModuleAvcodec52: |
| 58 return FILE_PATH_LITERAL(DSO_NAME("avcodec", AVCODEC_VERSION)); | 58 return FILE_PATH_LITERAL(DSO_NAME("avcodec", AVCODEC_VERSION)); |
| 59 case tp_ffmpeg::kModuleAvformat52: | 59 case tp_ffmpeg::kModuleAvformat52: |
| 60 return FILE_PATH_LITERAL(DSO_NAME("avformat", AVFORMAT_VERSION)); | 60 return FILE_PATH_LITERAL(DSO_NAME("avformat", AVFORMAT_VERSION)); |
| 61 case tp_ffmpeg::kModuleAvutil50: | 61 case tp_ffmpeg::kModuleAvutil50: |
| 62 return FILE_PATH_LITERAL(DSO_NAME("avutil", AVUTIL_VERSION)); | 62 return FILE_PATH_LITERAL(DSO_NAME("avutil", AVUTIL_VERSION)); |
| 63 default: | 63 default: |
| 64 LOG(DFATAL) << "Invalid stub module requested: " << stub_key; | 64 LOG(DFATAL) << "Invalid stub module requested: " << stub_key; |
| 65 return FILE_PATH_LITERAL(""); | 65 return FILE_PATH_LITERAL(""); |
| 66 } | 66 } |
| 67 } | 67 } |
| 68 | 68 |
| 69 } // namespace | |
| 70 | |
| 71 // Attempts to initialize the media library (loading DSOs, etc.). | 69 // Attempts to initialize the media library (loading DSOs, etc.). |
| 72 // Returns true if everything was successfully initialized, false otherwise. | 70 // Returns true if everything was successfully initialized, false otherwise. |
| 73 bool InitializeMediaLibrary(const FilePath& module_dir) { | 71 bool InitializeMediaLibrary(const FilePath& module_dir) { |
| 74 // TODO(ajwong): We need error resolution. | 72 // TODO(ajwong): We need error resolution. |
| 75 tp_ffmpeg::StubPathMap paths; | 73 tp_ffmpeg::StubPathMap paths; |
| 76 for (int i = 0; i < static_cast<int>(tp_ffmpeg::kNumStubModules); ++i) { | 74 for (int i = 0; i < static_cast<int>(tp_ffmpeg::kNumStubModules); ++i) { |
| 77 tp_ffmpeg::StubModules module = static_cast<tp_ffmpeg::StubModules>(i); | 75 tp_ffmpeg::StubModules module = static_cast<tp_ffmpeg::StubModules>(i); |
| 78 | 76 |
| 79 // Add the sumo library first so it takes precedence. | 77 // Add the sumo library first so it takes precedence. |
| 80 paths[module].push_back(module_dir.Append(sumo_name).value()); | 78 paths[module].push_back(module_dir.Append(sumo_name).value()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 108 return result; | 106 return result; |
| 109 } | 107 } |
| 110 #else | 108 #else |
| 111 bool InitializeOpenMaxLibrary(const FilePath& module_dir) { | 109 bool InitializeOpenMaxLibrary(const FilePath& module_dir) { |
| 112 NOTIMPLEMENTED() << "OpenMAX is only used in Linux."; | 110 NOTIMPLEMENTED() << "OpenMAX is only used in Linux."; |
| 113 return false; | 111 return false; |
| 114 } | 112 } |
| 115 #endif | 113 #endif |
| 116 | 114 |
| 117 } // namespace media | 115 } // namespace media |
| OLD | NEW |