일반적으로 ffmpeg는 기본적으로 스레드로부터 안전하지 않습니다. 그러나 libswsscale은 각 sws 컨텍스트가 별도의 스레드에서 작성되는 한 안전합니다.
** 나는이 임의의 뮤텍스를 사용하는 것이 주 : avcodec 작업을 사용하는 경우
그러나, 당신이 당신의 디코딩 단계 (또는 다른 avcodec 관련 작업을) 스레드 safefy 수 있도록 에 사용할 수있는 콜백 메커니즘이 설명을 위해 클래스 :
int ffmpeg_lock_callback(void **mutex, enum AVLockOp op)
{
static Mutex m;
switch(op)
{
case AV_LOCK_CREATE:
{
*mutex = &m;
break;
}
case AV_LOCK_OBTAIN:
{
// TODO: Lock you mutex here
break;
}
case AV_LOCK_RELEASE:
{
// TODO: Unlock your mutex here
break;
}
case AV_LOCK_DESTROY:
{
*mutex = 0;
break;
}
}
return 0;
}
...
이 당신의 .H 파일에 간다 :
extern "C"{
#include "libavcodec/avcodec.h"
}
extern "C"
{
int ffmpeg_lock_callback(void **mutex, enum AVLockOp op);
}
출처
2013-04-23 22:38:25
Aki
swscale에는 거의 적용되지 않습니다. 잠금 관리자는 avcodec의 것입니다. –
그래, 나는 당신이 옳다고 말해야합니다. 나는 이것이 sws_context를 만드는 데에도 사용된다는 인상을 받았다. 하지만 난 그냥 ffmpeg의 소스 코드를 확인하고 그 사실이 나타나지 않습니다. 나는 그것을 반영하기 위해 나의 대답을 바꿀 것이다. – Aki