mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-28 08:05:56 -05:00
Add a lock manager callback for ffmpeg
This commit is contained in:
parent
235e13ef70
commit
b05d173139
43
src/main.c
43
src/main.c
@ -415,6 +415,36 @@ signal_kqueue_cb(int fd, short event, void *arg)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
ffmpeg_lockmgr(void **mutex, enum AVLockOp op)
|
||||||
|
{
|
||||||
|
switch (op)
|
||||||
|
{
|
||||||
|
case AV_LOCK_CREATE:
|
||||||
|
*mutex = malloc(sizeof(pthread_mutex_t));
|
||||||
|
if (!*mutex)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return !!pthread_mutex_init(*mutex, NULL);
|
||||||
|
|
||||||
|
case AV_LOCK_OBTAIN:
|
||||||
|
return !!pthread_mutex_lock(*mutex);
|
||||||
|
|
||||||
|
case AV_LOCK_RELEASE:
|
||||||
|
return !!pthread_mutex_unlock(*mutex);
|
||||||
|
|
||||||
|
case AV_LOCK_DESTROY:
|
||||||
|
pthread_mutex_destroy(*mutex);
|
||||||
|
free(*mutex);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -555,6 +585,16 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
/* Initialize ffmpeg */
|
/* Initialize ffmpeg */
|
||||||
avcodec_init();
|
avcodec_init();
|
||||||
|
|
||||||
|
ret = av_lockmgr_register(ffmpeg_lockmgr);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
DPRINTF(E_FATAL, L_MAIN, "Could not register ffmpeg lock manager callback\n");
|
||||||
|
|
||||||
|
ret = EXIT_FAILURE;
|
||||||
|
goto ffmpeg_init_fail;
|
||||||
|
}
|
||||||
|
|
||||||
av_register_all();
|
av_register_all();
|
||||||
av_log_set_callback(logger_ffmpeg);
|
av_log_set_callback(logger_ffmpeg);
|
||||||
register_ffmpeg_evbuffer_url_protocol();
|
register_ffmpeg_evbuffer_url_protocol();
|
||||||
@ -789,6 +829,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
signal_block_fail:
|
signal_block_fail:
|
||||||
gcrypt_init_fail:
|
gcrypt_init_fail:
|
||||||
|
av_lockmgr_register(NULL);
|
||||||
|
|
||||||
|
ffmpeg_init_fail:
|
||||||
DPRINTF(E_LOG, L_MAIN, "Exiting.\n");
|
DPRINTF(E_LOG, L_MAIN, "Exiting.\n");
|
||||||
conffile_unload();
|
conffile_unload();
|
||||||
logger_deinit();
|
logger_deinit();
|
||||||
|
Loading…
Reference in New Issue
Block a user