diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c index 8d45414cb79f30632a60b04cbe1ddee53802484d..d7130a7eac0d1f257eb53743e6188d0babc72d64 100644 --- a/lib_dec/jbm_jb4sb.c +++ b/lib_dec/jbm_jb4sb.c @@ -381,9 +381,11 @@ JB4_DATAUNIT_HANDLE JB4_AllocDataUnit( JB4_dropFromBuffer( h ); } + /* LOCK JBM MEMORY SLOT BEGIN */ --h->nFreeMemorySlots; dataUnit = h->freeMemorySlots[h->nFreeMemorySlots]; h->freeMemorySlots[h->nFreeMemorySlots] = NULL; + /* LOCK JBM MEMORY SLOT END */ assert( dataUnit != NULL ); return dataUnit; @@ -397,8 +399,10 @@ void JB4_FreeDataUnit( { assert( dataUnit != NULL ); assert( h->nFreeMemorySlots < MAX_JBM_SLOTS ); + /* LOCK JBM MEMORY SLOT BEGIN */ h->freeMemorySlots[h->nFreeMemorySlots] = dataUnit; h->nFreeMemorySlots++; + /* LOCK JBM MEMORY SLOT END */ return; } diff --git a/lib_util/g192.c b/lib_util/g192.c index d6c6ec4755dc8f3b4f07ba3990389888547a31ee..f61971ef1484dea45713df0b0e6c21200cd0d24c 100644 --- a/lib_util/g192.c +++ b/lib_util/g192.c @@ -494,7 +494,7 @@ G192_ERROR G192_WriteVoipFrame_short( uint32_t ssrc = 0; uint16_t rtpSequenceNumber_2 = htons( rtpSequenceNumber ); uint32_t rtpTimeStamp_2 = htonl( rtpTimeStamp ); - uint16_t ssrc_2 = (uint16_t) htonl( ssrc ); + uint32_t ssrc_2 = (uint32_t) htonl( ssrc ); assert( numBits <= IVAS_MAX_BITS_PER_FRAME ); diff --git a/readme.txt b/readme.txt index ae1c1f947dbdd61534290578398661a59cc650b7..b79ac9f0bcf5a3464b24ee190148da7aaebd5893 100644 --- a/readme.txt +++ b/readme.txt @@ -150,6 +150,24 @@ executables are "IVAS_cod.exe", "IVAS_dec.exe", "IVAS_rend.exe", and "ISAR_post_rend.exe". All reside in the c-code main directory. + INTEGRATION AS LIBRARIES + ======================== + +While this package contains the necessary applications to execute the IVAS encoder, +decoder, renderer and ISAR post renderer, it is envisioned that the libraries used +would be integrated into custom applications. + +It should be noted that this library is not thread-safe by default. Thus, when using +the IVAS libraries in a multi-threaded environment, proper synchronization of API +calls is required to prevent race conditions by concurrent access to IVAS internal +state memory, FIFO queues buffers or any other data structures. Potential mechanisms +include e.g. mutexes, spinlocks and semaphores. The API calls are at the present not +optimized for fine-granular locking of just critical sections. Some sensitive +sections have thus been marked with a comment in the form /* LOCK XYZ BEGIN */ and +/* LOCK XYZ END */ to provide guidance where code could be modified to prevent +some potential race conditions. + + RUNNING THE SOFTWARE ====================