summaryrefslogtreecommitdiffstats
path: root/media/ffmpeg
diff options
context:
space:
mode:
Diffstat (limited to 'media/ffmpeg')
-rw-r--r--media/ffmpeg/ffmpeg_common.cc10
-rw-r--r--media/ffmpeg/ffmpeg_common.h26
2 files changed, 33 insertions, 3 deletions
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
index 08228fd..5100b31 100644
--- a/media/ffmpeg/ffmpeg_common.cc
+++ b/media/ffmpeg/ffmpeg_common.cc
@@ -6,6 +6,16 @@
namespace media {
+FFmpegLock::FFmpegLock() {
+}
+
+FFmpegLock::~FFmpegLock() {
+}
+
+Lock& FFmpegLock::lock() {
+ return lock_;
+}
+
namespace mime_type {
const char kFFmpegAudio[] = "audio/x-ffmpeg";
diff --git a/media/ffmpeg/ffmpeg_common.h b/media/ffmpeg/ffmpeg_common.h
index 4b60046..9be245f 100644
--- a/media/ffmpeg/ffmpeg_common.h
+++ b/media/ffmpeg/ffmpeg_common.h
@@ -19,14 +19,34 @@ extern "C" {
// Temporarily disable possible loss of data warning.
// TODO(scherkus): fix and upstream the compiler warnings.
MSVC_PUSH_DISABLE_WARNING(4244);
-#include "third_party/ffmpeg/source/patched-ffmpeg-mt/libavcodec/avcodec.h"
-#include "third_party/ffmpeg/source/patched-ffmpeg-mt/libavformat/avformat.h"
-#include "third_party/ffmpeg/source/patched-ffmpeg-mt/libavutil/log.h"
+#include "third_party/ffmpeg/include/libavcodec/avcodec.h"
+#include "third_party/ffmpeg/include/libavformat/avformat.h"
+#include "third_party/ffmpeg/include/libavutil/log.h"
MSVC_POP_WARNING();
} // extern "C"
namespace media {
+// FFmpegLock is used to serialize calls to avcodec_open(), avcodec_close(),
+// and av_find_stream_info() for an entire process because for whatever reason
+// it does Very Bad Things to other FFmpeg instances.
+//
+// TODO(scherkus): track down and upstream a fix to FFmpeg, if possible.
+class FFmpegLock : public Singleton<FFmpegLock> {
+ public:
+ Lock& lock();
+
+ private:
+ // Only allow Singleton to create and delete FFmpegLock.
+ friend struct DefaultSingletonTraits<FFmpegLock>;
+ FFmpegLock();
+ virtual ~FFmpegLock();
+
+ Lock lock_;
+ DISALLOW_COPY_AND_ASSIGN(FFmpegLock);
+};
+
+
// Wraps FFmpeg's av_free() in a class that can be passed as a template argument
// to scoped_ptr_malloc.
class ScopedPtrAVFree {