Index: source/libvpx/vp9/decoder/vp9_thread.h |
=================================================================== |
--- source/libvpx/vp9/decoder/vp9_thread.h (revision 281795) |
+++ source/libvpx/vp9/decoder/vp9_thread.h (working copy) |
@@ -11,9 +11,8 @@ |
// |
// Original source: |
// http://git.chromium.org/webm/libwebp.git |
-// 100644 blob 13a61a4c84194c3374080cbf03d881d3cd6af40d src/utils/thread.h |
+// 100644 blob 7bd451b124ae3b81596abfbcc823e3cb129d3a38 src/utils/thread.h |
- |
#ifndef VP9_DECODER_VP9_THREAD_H_ |
#define VP9_DECODER_VP9_THREAD_H_ |
@@ -163,41 +162,54 @@ |
// arguments (data1 and data2), and should return false in case of error. |
typedef int (*VP9WorkerHook)(void*, void*); |
-// Synchronize object used to launch job in the worker thread |
+// Platform-dependent implementation details for the worker. |
+typedef struct VP9WorkerImpl VP9WorkerImpl; |
+ |
+// Synchronization object used to launch job in the worker thread |
typedef struct { |
-#if CONFIG_MULTITHREAD |
- pthread_mutex_t mutex_; |
- pthread_cond_t condition_; |
- pthread_t thread_; |
-#endif |
+ VP9WorkerImpl *impl_; |
VP9WorkerStatus status_; |
VP9WorkerHook hook; // hook to call |
- void* data1; // first argument passed to 'hook' |
- void* data2; // second argument passed to 'hook' |
+ void *data1; // first argument passed to 'hook' |
+ void *data2; // second argument passed to 'hook' |
int had_error; // return value of the last call to 'hook' |
} VP9Worker; |
-// Must be called first, before any other method. |
-void vp9_worker_init(VP9Worker* const worker); |
-// Must be called to initialize the object and spawn the thread. Re-entrant. |
-// Will potentially launch the thread. Returns false in case of error. |
-int vp9_worker_reset(VP9Worker* const worker); |
-// Makes sure the previous work is finished. Returns true if worker->had_error |
-// was not set and no error condition was triggered by the working thread. |
-int vp9_worker_sync(VP9Worker* const worker); |
-// Triggers the thread to call hook() with data1 and data2 argument. These |
-// hook/data1/data2 can be changed at any time before calling this function, |
-// but not be changed afterward until the next call to vp9_worker_sync(). |
-void vp9_worker_launch(VP9Worker* const worker); |
-// This function is similar to vp9_worker_launch() except that it calls the |
-// hook directly instead of using a thread. Convenient to bypass the thread |
-// mechanism while still using the VP9Worker structs. vp9_worker_sync() must |
-// still be called afterward (for error reporting). |
-void vp9_worker_execute(VP9Worker* const worker); |
-// Kill the thread and terminate the object. To use the object again, one |
-// must call vp9_worker_reset() again. |
-void vp9_worker_end(VP9Worker* const worker); |
+// The interface for all thread-worker related functions. All these functions |
+// must be implemented. |
+typedef struct { |
+ // Must be called first, before any other method. |
+ void (*init)(VP9Worker *const worker); |
+ // Must be called to initialize the object and spawn the thread. Re-entrant. |
+ // Will potentially launch the thread. Returns false in case of error. |
+ int (*reset)(VP9Worker *const worker); |
+ // Makes sure the previous work is finished. Returns true if worker->had_error |
+ // was not set and no error condition was triggered by the working thread. |
+ int (*sync)(VP9Worker *const worker); |
+ // Triggers the thread to call hook() with data1 and data2 arguments. These |
+ // hook/data1/data2 values can be changed at any time before calling this |
+ // function, but not be changed afterward until the next call to Sync(). |
+ void (*launch)(VP9Worker *const worker); |
+ // This function is similar to launch() except that it calls the |
+ // hook directly instead of using a thread. Convenient to bypass the thread |
+ // mechanism while still using the VP9Worker structs. sync() must |
+ // still be called afterward (for error reporting). |
+ void (*execute)(VP9Worker *const worker); |
+ // Kill the thread and terminate the object. To use the object again, one |
+ // must call reset() again. |
+ void (*end)(VP9Worker *const worker); |
+} VP9WorkerInterface; |
+// Install a new set of threading functions, overriding the defaults. This |
+// should be done before any workers are started, i.e., before any encoding or |
+// decoding takes place. The contents of the interface struct are copied, it |
+// is safe to free the corresponding memory after this call. This function is |
+// not thread-safe. Return false in case of invalid pointer or methods. |
+int vp9_set_worker_interface(const VP9WorkerInterface *const winterface); |
+ |
+// Retrieve the currently set thread worker interface. |
+const VP9WorkerInterface *vp9_get_worker_interface(void); |
+ |
//------------------------------------------------------------------------------ |
#ifdef __cplusplus |