Index: media/filters/ffmpeg_glue.cc |
diff --git a/media/filters/ffmpeg_glue.cc b/media/filters/ffmpeg_glue.cc |
index 0b2ee4b7470630bd7ccae8da144abcaa9e4271b3..a920f58a3471524bf4784bc12f941c8a6cb6f697 100644 |
--- a/media/filters/ffmpeg_glue.cc |
+++ b/media/filters/ffmpeg_glue.cc |
@@ -81,6 +81,30 @@ int CloseContext(URLContext* h) { |
return 0; |
} |
+int LockManagerOperation(void** lock, enum AVLockOp op) { |
+ switch (op) { |
+ case AV_LOCK_CREATE: |
+ *lock = new Lock(); |
+ if (!*lock) |
+ return 1; |
+ return 0; |
+ |
+ case AV_LOCK_OBTAIN: |
+ static_cast<Lock*>(*lock)->Acquire(); |
+ return 0; |
+ |
+ case AV_LOCK_RELEASE: |
+ static_cast<Lock*>(*lock)->Release(); |
+ return 0; |
+ |
+ case AV_LOCK_DESTROY: |
+ delete static_cast<Lock*>(*lock); |
+ *lock = NULL; |
+ return 0; |
+ } |
+ return 1; |
+} |
+ |
} // namespace |
//------------------------------------------------------------------------------ |
@@ -107,12 +131,14 @@ FFmpegGlue::FFmpegGlue() { |
// Register our protocol glue code with FFmpeg. |
avcodec_init(); |
av_register_protocol(&kFFmpegURLProtocol); |
+ av_lockmgr_register(&LockManagerOperation); |
// Now register the rest of FFmpeg. |
av_register_all(); |
} |
FFmpegGlue::~FFmpegGlue() { |
+ av_lockmgr_register(NULL); |
} |
std::string FFmpegGlue::AddProtocol(FFmpegURLProtocol* protocol) { |