On date Saturday 2009-04-11 20:45:20 -0400, AliReza Khoshgoftar Monfared 
encoded:
> Dear All,
> 
> I have written a wrapper function around ffmpeg.c's main to use it for some
> decoding/encoding function.
> As I am using it in  MultiThreaded environment, I have done these changes to
> make ffmpeg.c threadsafe:
> 
> 1) I have made all global variables, local by putting them inside a big
> structure, and passing it to all functions
> 2) I have put mutexes around these functions:
> *
> *
> >
> > *    avcodec_register_all();
> >     avdevice_register_all();
> >     av_register_all();
> >     avcodec_open();
> >     avcodec_close();*
> >
> 
> though doing this, If I use my wrapper function in two threads, I get the
> following error:
> 
> *[NULL @ 0x20ef360]insufficient thread locking around avcodec_open/close()*
> >
> 
> So, does anybody have an idea what is wrong with my actions that I still
> have these errors.
> 
> Just for your reference, I have built ffmpeg under MinGW (in Windows).
> And I have put the mutexes using pthreads, here is an example of how I put a
> mutex around avcodec_open()
> 
>             *pthread_mutex_lock (&mutex_avcodec_open1);*
> >             if (avcodec_open(ost->st->codec, codec) < 0) {
> >                 fprintf(stderr, "Error while opening codec for output
> > stream #%d.%d - maybe incorrect parameters such as bit_rate, rate, width or
> > height\n",
> >                         ost->file_index, ost->index);
> >                 av_exit(1,global_var);
> >             }
> >             *pthread_mutex_unlock (&mutex_avcodec_open1);*

This is not sufficient. You need a *unique* lock for both
avcodec_open() and avcodec_close().

Regards.
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to