From: Rémi Denis-Courmont Date: Thu, 12 Mar 2009 15:27:37 +0000 (+0200) Subject: Add a centralized avcodec lock X-Git-Tag: 1.0.0-pre1~123 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=6f037fa47876b4270133259f2d5f5ae545b2689a;p=vlc Add a centralized avcodec lock avcodec is used from at least three different plugins: avcodec, switcher (which seems dead though) and indirectly in avformat. We need to have a common interlock for all of these. --- diff --git a/include/vlc_avcodec.h b/include/vlc_avcodec.h new file mode 100644 index 0000000000..fc5a3a99bd --- /dev/null +++ b/include/vlc_avcodec.h @@ -0,0 +1,36 @@ +/***************************************************************************** + * vlc_avcodec.h: VLC thread support for FFMPEG/libavcodec + ***************************************************************************** + * Copyright (C) 2009 Rémi Denis-Courmont + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_AVCODEC_H +# define VLC_AVCODEC_H 1 + +VLC_EXPORT( void, vlc_avcodec_mutex, (bool) ); + +static inline void vlc_avcodec_lock (void) +{ + vlc_avcodec_mutex (true); +} + +static inline void vlc_avcodec_unlock (void) +{ + vlc_avcodec_mutex (false); +} + +#endif diff --git a/src/Makefile.am b/src/Makefile.am index ef2f3e36b9..eabdb6c909 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -41,6 +41,7 @@ pluginsinclude_HEADERS = \ ../include/vlc_acl.h \ ../include/vlc_aout.h \ ../include/vlc_arrays.h \ + ../include/vlc_avcodec.h \ ../include/vlc_bits.h \ ../include/vlc_block.h \ ../include/vlc_block_helper.h \ diff --git a/src/libvlc.c b/src/libvlc.c index 2f1e641102..e4a1a8e780 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -2130,3 +2130,15 @@ static void InitDeviceValues( libvlc_int_t *p_vlc ) (void)p_vlc; #endif /* HAVE_HAL */ } + +#include + +void vlc_avcodec_mutex (bool acquire) +{ + static vlc_mutex_t lock = VLC_STATIC_MUTEX; + + if (acquire) + vlc_mutex_lock (&lock); + else + vlc_mutex_unlock (&lock); +} diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 2419796a56..db21b469b3 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -409,6 +409,7 @@ var_SetChecked __var_TriggerCallback __var_Type video_format_FixRgb +vlc_avcodec_mutex vlc_b64_decode vlc_b64_decode_binary vlc_b64_decode_binary_to_buffer