/*! * \copy * Copyright (c) 2009-2019, Cisco Systems * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * * \file wels_decoder_thread.h * * \brief Interfaces introduced in thread programming * * \date 08/06/2018 Created * ************************************************************************************* */ #ifndef _WELS_DECODER_THREAD_H_#define _WELS_DECODER_THREAD_H_ #include "WelsThreadLib.h" typedef int WELS_MUTEX_ATTR; typedef struct tagWelsDecSemphore { long max; long v; WELS_EVENT e; WELS_MUTEX m;} SWelsDecSemphore; typedef struct tagWelsDecEvent { int manualReset; int isSignaled; int c; WELS_MUTEX m;} SWelsDecEvent; typedef struct tagWelsDecThread { WELS_THREAD_HANDLE h;} SWelsDecThread; #define WelsDecThreadFunc(fn,a) void* fn(void* a)#define WelsDecThreadFuncArg(a) void* (*a)(void*) #define WELS_DEC_THREAD_WAIT_TIMEDOUT ETIMEDOUT#define WELS_DEC_THREAD_WAIT_SIGNALED EINTR#define WELS_DEC_THREAD_WAIT_INFINITE -1 #define WelsDecThreadReturn WELS_THREAD_ROUTINE_RETURN(0); int32_t GetCPUCount(); // Eventint EventCreate (SWelsDecEvent* e, int manualReset, int initialState);void EventPost (SWelsDecEvent* e);int EventWait (SWelsDecEvent* e, int32_t timeout);void EventReset (SWelsDecEvent* e);void EventDestroy (SWelsDecEvent* e); // Semaphoreint SemCreate (SWelsDecSemphore* s, long value, long max);int SemWait (SWelsDecSemphore* s, int32_t timeout);void SemRelease (SWelsDecSemphore* s, long* prev_count);void SemDestroy (SWelsDecSemphore* s); // Threadint ThreadCreate (SWelsDecThread* t, LPWELS_THREAD_ROUTINE tf, void* ta);int ThreadWait (SWelsDecThread* t); #define DECLARE_PROCTHREAD(name, argument) \ WelsDecThreadFunc(name,argument) #define DECLARE_PROCTHREAD_PTR(name) \ LPWELS_THREAD_ROUTINE name #define CREATE_THREAD(ph, threadproc,argument) \ ThreadCreate(ph, threadproc, (void*)argument) #define CREATE_EVENT(ph, manualreset,initial_state,name) \ EventCreate(ph,(int)(manualreset),(int)(initial_state)) #define CREATE_SEMAPHORE(ph, initial_count,max_count, name) \ SemCreate(ph, (long)initial_count,(long)(max_count)) #define CLOSE_EVENT(ph) \ EventDestroy(ph) #define CLOSE_SEMAPHORE(ph) \ SemDestroy(ph) #define SET_EVENT(ph) \ EventPost(ph) #define RESET_EVENT(ph) \ EventReset(ph) #define RELEASE_SEMAPHORE(ph) \ SemRelease(ph,NULL) #define WAIT_EVENT(ph,timeout) \ EventWait(ph, (int32_t)timeout) #define WAIT_THREAD(ph) \ ThreadWait(ph) #define WAIT_SEMAPHORE(ph,timeout) \ SemWait(ph,(int32_t)timeout) #endif
/*!
* \copy
* Copyright (c) 2009-2019, Cisco Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*
* \file wels_decoder_thread.h
*
* \brief Interfaces introduced in thread programming
*
* \date 08/06/2018 Created
*
*************************************************************************************
*/
#ifndef _WELS_DECODER_THREAD_H_
#define _WELS_DECODER_THREAD_H_
#include "WelsThreadLib.h"
typedef int WELS_MUTEX_ATTR;
typedef struct tagWelsDecSemphore {
long max;
long v;
WELS_EVENT e;
WELS_MUTEX m;
} SWelsDecSemphore;
typedef struct tagWelsDecEvent {
int manualReset;
int isSignaled;
int c;
WELS_MUTEX m;
} SWelsDecEvent;
typedef struct tagWelsDecThread {
WELS_THREAD_HANDLE h;
} SWelsDecThread;
#define WelsDecThreadFunc(fn,a) void* fn(void* a)
#define WelsDecThreadFuncArg(a) void* (*a)(void*)
#define WELS_DEC_THREAD_WAIT_TIMEDOUT ETIMEDOUT
#define WELS_DEC_THREAD_WAIT_SIGNALED EINTR
#define WELS_DEC_THREAD_WAIT_INFINITE -1
#define WelsDecThreadReturn WELS_THREAD_ROUTINE_RETURN(0);
int32_t GetCPUCount();
// Event
int EventCreate (SWelsDecEvent* e, int manualReset, int initialState);
void EventPost (SWelsDecEvent* e);
int EventWait (SWelsDecEvent* e, int32_t timeout);
void EventReset (SWelsDecEvent* e);
void EventDestroy (SWelsDecEvent* e);
// Semaphore
int SemCreate (SWelsDecSemphore* s, long value, long max);
int SemWait (SWelsDecSemphore* s, int32_t timeout);
void SemRelease (SWelsDecSemphore* s, long* prev_count);
void SemDestroy (SWelsDecSemphore* s);
// Thread
int ThreadCreate (SWelsDecThread* t, LPWELS_THREAD_ROUTINE tf, void* ta);
int ThreadWait (SWelsDecThread* t);
#define DECLARE_PROCTHREAD(name, argument) \
WelsDecThreadFunc(name,argument)
#define DECLARE_PROCTHREAD_PTR(name) \
LPWELS_THREAD_ROUTINE name
#define CREATE_THREAD(ph, threadproc,argument) \
ThreadCreate(ph, threadproc, (void*)argument)
#define CREATE_EVENT(ph, manualreset,initial_state,name) \
EventCreate(ph,(int)(manualreset),(int)(initial_state))
#define CREATE_SEMAPHORE(ph, initial_count,max_count, name) \
SemCreate(ph, (long)initial_count,(long)(max_count))
#define CLOSE_EVENT(ph) \
EventDestroy(ph)
#define CLOSE_SEMAPHORE(ph) \
SemDestroy(ph)
#define SET_EVENT(ph) \
EventPost(ph)
#define RESET_EVENT(ph) \
EventReset(ph)
#define RELEASE_SEMAPHORE(ph) \
SemRelease(ph,NULL)
#define WAIT_EVENT(ph,timeout) \
EventWait(ph, (int32_t)timeout)
#define WAIT_THREAD(ph) \
ThreadWait(ph)
#define WAIT_SEMAPHORE(ph,timeout) \
SemWait(ph,(int32_t)timeout)
#endif