From 164cbeeede9e0bd6b06ef5b89f2af83dbae4633d Mon Sep 17 00:00:00 2001 From: kc5nra Date: Thu, 19 Mar 2015 00:25:58 -0500 Subject: [PATCH] deps-libff: Add atomic long inc/dec functions --- deps/libff/CMakeLists.txt | 9 +++++++ deps/libff/libff/ff-threading-posix.c | 27 +++++++++++++++++++++ deps/libff/libff/ff-threading-windows.c | 31 +++++++++++++++++++++++++ deps/libff/libff/ff-threading.h | 20 ++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 deps/libff/libff/ff-threading-posix.c create mode 100644 deps/libff/libff/ff-threading-windows.c create mode 100644 deps/libff/libff/ff-threading.h diff --git a/deps/libff/CMakeLists.txt b/deps/libff/CMakeLists.txt index d6f6cb1a1..72d52027a 100644 --- a/deps/libff/CMakeLists.txt +++ b/deps/libff/CMakeLists.txt @@ -17,6 +17,7 @@ set(libff_HEADERS libff/ff-clock.h libff/ff-frame.h libff/ff-packet-queue.h + libff/ff-threading.h libff/ff-timer.h # libff/ff-demuxer.h @@ -36,6 +37,14 @@ set(libff_SOURCES libff/ff-audio-decoder.c libff/ff-video-decoder.c) +if (WIN32) + list(APPEND libff_SOURCES + libff/ff-threading-windows.c) +else(WIN32) + list(APPEND libff_SOURCES + libff/ff-threading-posix.c) +endif(WIN32) + add_library (libff STATIC ${libff_HEADERS} ${libff_SOURCES}) diff --git a/deps/libff/libff/ff-threading-posix.c b/deps/libff/libff/ff-threading-posix.c new file mode 100644 index 000000000..1491fd6fd --- /dev/null +++ b/deps/libff/libff/ff-threading-posix.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2014 Hugh Bailey + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "ff-threading.h" + +long ff_atomic_inc_long(volatile long *val) +{ + return __sync_add_and_fetch(val, 1); +} + +long ff_atomic_dec_long(volatile long *val) +{ + return __sync_sub_and_fetch(val, 1); +} diff --git a/deps/libff/libff/ff-threading-windows.c b/deps/libff/libff/ff-threading-windows.c new file mode 100644 index 000000000..56b034e0d --- /dev/null +++ b/deps/libff/libff/ff-threading-windows.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2014 Hugh Bailey + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "ff-threading.h" + +#define WIN32_LEAN_AND_MEAN +#include +#undef WIN32_LEAN_AND_MEAN + +long ff_atomic_inc_long(volatile long *val) +{ + return InterlockedIncrement(val); +} + +long ff_atomic_dec_long(volatile long *val) +{ + return InterlockedDecrement(val); +} diff --git a/deps/libff/libff/ff-threading.h b/deps/libff/libff/ff-threading.h new file mode 100644 index 000000000..c5f3fc693 --- /dev/null +++ b/deps/libff/libff/ff-threading.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2015 John R. Bradley + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#pragma once + +long ff_atomic_inc_long(volatile long *val); +long ff_atomic_dec_long(volatile long *val);