* Move the global initialization of the xvid core to a static initializer,
only the decoder structure is now initialized per instance, this should be better (thread safe). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25925 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -8,7 +8,7 @@ Addon xvid.decoder :
|
|||||||
XvidDecoder.cpp
|
XvidDecoder.cpp
|
||||||
supported_codecs.cpp
|
supported_codecs.cpp
|
||||||
:
|
:
|
||||||
libxvid.a
|
libxvidcore.a
|
||||||
be
|
be
|
||||||
libmedia.so
|
libmedia.so
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -378,7 +378,7 @@ XvidDecoder::NegotiateOutputFormat(media_format* _inoutFormat)
|
|||||||
PRINT(("%p->XvidDecoder: out_format=%s\n", this, buffer));
|
PRINT(("%p->XvidDecoder: out_format=%s\n", this, buffer));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return _XvidInit(true, 0) == 0 ? B_OK : B_ERROR;
|
return _XvidInit() == 0 ? B_OK : B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -622,21 +622,14 @@ this, inRequiredFrame, *_inOutFrame, inRequiredTime, *_inOutTime);
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
// _XvidInit
|
static bool
|
||||||
int
|
init_xvid(bool useAssembler, int debugLevel)
|
||||||
XvidDecoder::_XvidInit(int useAssembler, int debugLevel)
|
|
||||||
{
|
{
|
||||||
if (fXvidDecoderHandle != NULL)
|
// XviD core initialization
|
||||||
return 0;
|
|
||||||
|
|
||||||
xvid_gbl_init_t xvidGlobalInit;
|
xvid_gbl_init_t xvidGlobalInit;
|
||||||
xvid_dec_create_t xvidDecoderCreate;
|
|
||||||
|
|
||||||
// reset the structure with zeros
|
// reset the structure with zeros
|
||||||
memset(&xvidGlobalInit, 0, sizeof(xvid_gbl_init_t));
|
memset(&xvidGlobalInit, 0, sizeof(xvid_gbl_init_t));
|
||||||
memset(&xvidDecoderCreate, 0, sizeof(xvid_dec_create_t));
|
|
||||||
|
|
||||||
// XviD core initialization
|
|
||||||
|
|
||||||
// version
|
// version
|
||||||
xvidGlobalInit.version = XVID_VERSION;
|
xvidGlobalInit.version = XVID_VERSION;
|
||||||
@@ -647,11 +640,30 @@ XvidDecoder::_XvidInit(int useAssembler, int debugLevel)
|
|||||||
else
|
else
|
||||||
xvidGlobalInit.cpu_flags = XVID_CPU_FORCE;
|
xvidGlobalInit.cpu_flags = XVID_CPU_FORCE;
|
||||||
|
|
||||||
|
// debug level
|
||||||
xvidGlobalInit.debug = debugLevel;
|
xvidGlobalInit.debug = debugLevel;
|
||||||
|
|
||||||
xvid_global(NULL, 0, &xvidGlobalInit, NULL);
|
xvid_global(NULL, 0, &xvidGlobalInit, NULL);
|
||||||
|
|
||||||
// XviD encoder initialization
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool sXvidInitialized = init_xvid(true, 0);
|
||||||
|
|
||||||
|
|
||||||
|
// _XvidInit
|
||||||
|
int
|
||||||
|
XvidDecoder::_XvidInit()
|
||||||
|
{
|
||||||
|
if (fXvidDecoderHandle != NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// XviD decoder initialization
|
||||||
|
xvid_dec_create_t xvidDecoderCreate;
|
||||||
|
|
||||||
|
// reset the structure with zeros
|
||||||
|
memset(&xvidDecoderCreate, 0, sizeof(xvid_dec_create_t));
|
||||||
|
|
||||||
// version
|
// version
|
||||||
xvidDecoderCreate.version = XVID_VERSION;
|
xvidDecoderCreate.version = XVID_VERSION;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class XvidDecoder : public Decoder {
|
|||||||
bigtime_t* _inOutTime);
|
bigtime_t* _inOutTime);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _XvidInit(int useAssembler, int debugLevel);
|
int _XvidInit();
|
||||||
int _XvidUninit();
|
int _XvidUninit();
|
||||||
|
|
||||||
int _XvidDecode(uchar *istream, uchar *ostream,
|
int _XvidDecode(uchar *istream, uchar *ostream,
|
||||||
|
|||||||
Reference in New Issue
Block a user