Dear All,

For an academic project, I have recently wrote a wrapper function around
ffmpeg.c's main, and has created dll's, and .libs under mingw, and I am
using this function under MSVC++.

In the normal cases nothing is wrong. I can call the function in my code,
and decode/encdoe any video just as ffmpeg's command line does.

But in a more complicated case, I launch two threads (using POSIX Pthreads)
each of them just change the format of a different file.

When I run the program, the behavior is strange, and threads mess up each
others work.

To me, it seems ffmpeg.c is not thread safe.

I did some searches, and saw that these function in ffmpeg.c are not thread
safe:

    avcodec_register_all();
    avdevice_register_all();
    av_register_all();
    avcodec_open();

I put a mutex over each of them, wherever they were used (I used SDL Mutexes
for this purpose, as I saw ffmpeg developers already use them in ffplay.c)
I also put tricks to make sure the library iniltialization functions (the
first three of the list above) are performed only once.


Though I did all of these, still in the multithread case, my function (which
is nothing but a call to ffmpeg.c' main) still behaves strangely, and
threads mess up each other.

Can any of you help in this case, and instruct me how can I make all my
operations completely thread-safe?
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to