OpenJPEG 2.3.1

thread.h
Go to the documentation of this file.
1 /*
2 * The copyright in this software is being made available under the 2-clauses
3 * BSD License, included below. This software may be subject to other third
4 * party and contributor rights, including patent rights, and no such rights
5 * are granted under this license.
6 *
7 * Copyright (c) 2016, Even Rouault
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #ifndef THREAD_H
33 #define THREAD_H
34
35 #include "openjpeg.h"
36
47
50
52 typedef struct opj_mutex_t opj_mutex_t;
53
58 opj_mutex_t* opj_mutex_create(void);
59
63 void opj_mutex_lock(opj_mutex_t* mutex);
64
68 void opj_mutex_unlock(opj_mutex_t* mutex);
69
73 void opj_mutex_destroy(opj_mutex_t* mutex);
74
79
81 typedef struct opj_cond_t opj_cond_t;
82
87 opj_cond_t* opj_cond_create(void);
88
120 void opj_cond_wait(opj_cond_t* cond, opj_mutex_t* mutex);
121
128 void opj_cond_signal(opj_cond_t* cond);
129
133 void opj_cond_destroy(opj_cond_t* cond);
134
139
141 typedef struct opj_thread_t opj_thread_t;
142
146 typedef void (*opj_thread_fn)(void* user_data);
147
154 opj_thread_t* opj_thread_create(opj_thread_fn thread_fn, void* user_data);
155
160 void opj_thread_join(opj_thread_t* thread);
161
167 typedef struct opj_tls_t opj_tls_t;
168
174 void* opj_tls_get(opj_tls_t* tls, int key);
175
177 typedef void (*opj_tls_free_func)(void* value);
178
186 OPJ_BOOL opj_tls_set(opj_tls_t* tls, int key, void* value,
187 opj_tls_free_func free_func);
188
193
195 typedef struct opj_thread_pool_t opj_thread_pool_t;
196
207 opj_thread_pool_t* opj_thread_pool_create(int num_threads);
208
213 typedef void (*opj_job_fn)(void* user_data, opj_tls_t* tls);
214
215
225 OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t* tp, opj_job_fn job_fn,
226 void* user_data);
227
237 void opj_thread_pool_wait_completion(opj_thread_pool_t* tp,
238 int max_remaining_jobs);
239
245 int opj_thread_pool_get_thread_count(opj_thread_pool_t* tp);
246
250 void opj_thread_pool_destroy(opj_thread_pool_t* tp);
251
255
256 #endif /* THREAD_H */
opj_thread_pool_t::worker_threads
opj_worker_thread_t * worker_threads
Definition: thread.c:606
OPJ_BYTE
unsigned char OPJ_BYTE
Definition: openjpeg.h:117
opj_tls_t
Definition: thread.c:504
opj_cond_signal
void opj_cond_signal(opj_cond_t *cond)
Signal waiting threads on a condition.
Definition: thread.c:474
opj_job_list_t::job
opj_worker_thread_job_t * job
Definition: thread.c:594
opj_thread_pool_t::signaling_threshold
int signaling_threshold
Definition: thread.c:616
opj_codestream_info::tw
int tw
number of tiles in X
Definition: openjpeg.h:867
opj_stream_write_data
OPJ_SIZE_T opj_stream_write_data(opj_stream_private_t *p_stream, const OPJ_BYTE *p_buffer, OPJ_SIZE_T p_size, opj_event_mgr_t *p_event_mgr)
Writes some bytes to the stream.
Definition: cio.c:385
opj_calloc
void * opj_calloc(size_t num, size_t size)
Allocate a memory block with elements initialized to 0.
Definition: opj_malloc.c:198
opj_worker_thread_t::cond
opj_cond_t * cond
Definition: thread.c:584
opj_tile_info::marker
opj_marker_info_t * marker
list of markers
Definition: openjpeg.h:833
opj_thread_pool_destroy
void opj_thread_pool_destroy(opj_thread_pool_t *tp)
Destroy a thread pool.
Definition: thread.c:919
opj_tls_set
OPJ_BOOL opj_tls_set(opj_tls_t *tls, int key, void *value, opj_tls_free_func opj_free_func)
Set a thread local value corresponding to the provided key.
Definition: thread.c:540
opj_mutex_destroy
void opj_mutex_destroy(opj_mutex_t *mutex)
Destroy a mutex.
Definition: thread.c:458
opj_tls_free_func
void(* opj_tls_free_func)(void *value)
Type of the function used to free a TLS value.
Definition: thread.h:177
opj_tp_info::tp_end_header
int tp_end_header
end position of tile part header
Definition: openjpeg.h:793
opj_thread_fn
void(* opj_thread_fn)(void *user_data)
User function to execute in a thread.
Definition: thread.h:146
opj_thread_pool_t::pending_jobs_count
volatile int pending_jobs_count
Definition: thread.c:612
opj_cond_signal
void opj_cond_signal(opj_cond_t *cond)
Signal waiting threads on a condition.
Definition: thread.c:474
JPIP_THIX
#define JPIP_THIX
Definition: indexbox_manager.h:49
opj_thread_pool_t::tls
opj_tls_t * tls
Definition: thread.c:615
opj_thread_pool_submit_job
OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t *tp, opj_job_fn job_fn, void *user_data)
Submit a new job to be run by one of the thread in the thread pool.
Definition: thread.c:827
opj_worker_thread_t::tp
opj_thread_pool_t * tp
Definition: thread.c:579
opj_tls_key_val_t::key
int key
Definition: thread.c:499
JPIP_MHIX
#define JPIP_MHIX
Definition: indexbox_manager.h:47
opj_tls_key_val_t
Definition: thread.c:498
opj_tls_set
OPJ_BOOL opj_tls_set(opj_tls_t *tls, int key, void *value, opj_tls_free_func free_func)
Set a thread local value corresponding to the provided key.
Definition: thread.c:540
OPJ_OFF_T
int64_t OPJ_OFF_T
Definition: openjpeg.h:130
opj_stream_skip
OPJ_OFF_T opj_stream_skip(opj_stream_private_t *p_stream, OPJ_OFF_T p_size, opj_event_mgr_t *p_event_mgr)
Skips a number of bytes from the stream.
Definition: cio.c:593
opj_stream_seek
OPJ_BOOL opj_stream_seek(opj_stream_private_t *p_stream, OPJ_OFF_T p_size, struct opj_event_mgr *p_event_mgr)
Seeks a number of bytes from the stream.
Definition: cio.c:641
opj_event_mgr
Message handler object used for.
Definition: event.h:50
opj_thread_create
opj_thread_t * opj_thread_create(opj_thread_fn thread_fn, void *user_data)
Creates a new thread.
Definition: thread.c:484
opj_stream_tell
OPJ_OFF_T opj_stream_tell(const opj_stream_private_t *p_stream)
Tells the byte offset on the stream (similar to ftell).
Definition: cio.c:579
opj_thread_pool_t::state
volatile opj_worker_thread_state state
Definition: thread.c:610
opj_thread_pool_destroy
void opj_thread_pool_destroy(opj_thread_pool_t *tp)
Destroy a thread pool.
Definition: thread.c:919
opj_jp2_box::type
OPJ_UINT32 type
Definition: jp2.h:200
opj_stream_private
Byte input-output stream.
Definition: cio.h:81
opj_thread_pool_get_thread_count
int opj_thread_pool_get_thread_count(opj_thread_pool_t *tp)
Return the number of threads associated with the thread pool.
Definition: thread.c:914
opj_thread_pool_submit_job
OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t *tp, opj_job_fn job_fn, void *user_data)
Submit a new job to be run by one of the thread in the thread pool.
Definition: thread.c:827
opj_thread_pool_get_next_job
static opj_worker_thread_job_t * opj_thread_pool_get_next_job(opj_thread_pool_t *tp, opj_worker_thread_t *worker_thread, OPJ_BOOL signal_job_finished)
Definition: thread.c:757
opj_worker_thread_job_t::user_data
void * user_data
Definition: thread.c:575
OPJWTS_ERROR
@ OPJWTS_ERROR
Definition: thread.c:590
opj_thread_pool_get_thread_count
int opj_thread_pool_get_thread_count(opj_thread_pool_t *tp)
Return the number of threads associated with the thread pool.
Definition: thread.c:914
opj_write_manf
void opj_write_manf(int second, int v, opj_jp2_box_t *box, opj_stream_private_t *cio, opj_event_mgr_t *p_manager)
Definition: cidx_manager.c:157
opj_has_thread_support
OPJ_BOOL OPJ_CALLCONV opj_has_thread_support(void)
Returns if the library is built with thread support.
Definition: thread.c:433
OPJ_BOOL
int OPJ_BOOL
Definition: openjpeg.h:110
opj_cond_destroy
void opj_cond_destroy(opj_cond_t *cond)
Destroy a condition.
Definition: thread.c:479
opj_thread_pool_t::waiting_worker_thread_count
int waiting_worker_thread_count
Definition: thread.c:614
opj_includes.h
opj_tls_t::key_val_count
int key_val_count
Definition: thread.c:506
opj_tp_info::tp_start_pos
int tp_start_pos
start position of tile part
Definition: openjpeg.h:791
opj_mutex_unlock
void opj_mutex_unlock(opj_mutex_t *mutex)
Unlock/release the mutex.
Definition: thread.c:453
opj_tls_destroy
static void opj_tls_destroy(opj_tls_t *tls)
Definition: thread.c:514
opj_mutex_lock
void opj_mutex_lock(opj_mutex_t *mutex)
Lock/acquire the mutex.
Definition: thread.c:448
opj_tp_info
Index structure : Information concerning tile-parts.
Definition: openjpeg.h:789
opj_cond_wait
void opj_cond_wait(opj_cond_t *cond, opj_mutex_t *mutex)
Wait for the condition to be signaled.
Definition: thread.c:468
opj_jp2_box
JP2 Box.
Definition: jp2.h:198
opj_worker_thread_list_t
Definition: thread.c:599
opj_thread_create
opj_thread_t * opj_thread_create(opj_thread_fn thread_fn, void *user_data)
Creates a new thread.
Definition: thread.c:484
opj_tls_key_val_t::value
void * value
Definition: thread.c:500
opj_cond_wait
void opj_cond_wait(opj_cond_t *cond, opj_mutex_t *mutex)
Wait for the condition to be signaled.
Definition: thread.c:468
opj_job_list_t
Definition: thread.c:593
opj_worker_thread_function
static void opj_worker_thread_function(void *user_data)
Definition: thread.c:656
opj_worker_thread_job_t
Definition: thread.c:573
opj_realloc
void * opj_realloc(void *ptr, size_t new_size)
Reallocate memory blocks.
Definition: opj_malloc.c:239
opj_thread_pool_t::mutex
opj_mutex_t * mutex
Definition: thread.c:609
OPJ_TRUE
#define OPJ_TRUE
Definition: openjpeg.h:111
opj_thread_pool_t::cond
opj_cond_t * cond
Definition: thread.c:608
openjpeg.h
opj_malloc
void * opj_malloc(size_t size)
Allocate an uninitialized memory block.
Definition: opj_malloc.c:191
opj_tls_key_val_t::opj_free_func
opj_tls_free_func opj_free_func
Definition: thread.c:501
opj_thread_pool_create
opj_thread_pool_t * opj_thread_pool_create(int num_threads)
Create a new thread pool.
Definition: thread.c:625
opj_free
void opj_free(void *ptr)
Deallocates or frees a memory block.
Definition: opj_malloc.c:246
opj_thread_join
void opj_thread_join(opj_thread_t *thread)
Wait for a thread to be finished and release associated resources to the thread handle.
Definition: thread.c:491
opj_thread_pool_t::worker_threads_count
int worker_threads_count
Definition: thread.c:607
opj_worker_thread_t::marked_as_waiting
int marked_as_waiting
Definition: thread.c:581
opj_worker_thread_t::thread
opj_thread_t * thread
Definition: thread.c:580
opj_mutex_unlock
void opj_mutex_unlock(opj_mutex_t *mutex)
Unlock/release the mutex.
Definition: thread.c:453
opj_mutex_create
opj_mutex_t * opj_mutex_create(void)
Creates a mutex.
Definition: thread.c:443
opj_thread_pool_wait_completion
void opj_thread_pool_wait_completion(opj_thread_pool_t *tp, int max_remaining_jobs)
Wait that no more than max_remaining_jobs jobs are remaining in the queue of the thread pool.
Definition: thread.c:894
opj_mutex_lock
void opj_mutex_lock(opj_mutex_t *mutex)
Lock/acquire the mutex.
Definition: thread.c:448
opj_mutex_destroy
void opj_mutex_destroy(opj_mutex_t *mutex)
Destroy a mutex.
Definition: thread.c:458
opj_worker_thread_job_t::job_fn
opj_job_fn job_fn
Definition: thread.c:574
opj_mutex_t
struct opj_mutex_t opj_mutex_t
Opaque type for a mutex.
Definition: thread.h:52
opj_mutex_create
opj_mutex_t * opj_mutex_create(void)
Creates a mutex.
Definition: thread.c:443
opj_worker_thread_state
opj_worker_thread_state
Definition: thread.c:587
opj_thread_pool_create
opj_thread_pool_t * opj_thread_pool_create(int num_threads)
Create a new thread pool.
Definition: thread.c:625
opj_tile_info::marknum
int marknum
number of markers
Definition: openjpeg.h:831
opj_cond_create
opj_cond_t * opj_cond_create(void)
Creates a condition.
Definition: thread.c:463
opj_jp2_box::length
OPJ_UINT32 length
Definition: jp2.h:199
opj_thread_pool_t::job_queue
opj_job_list_t * job_queue
Definition: thread.c:611
opj_codestream_info::tile
opj_tile_info_t * tile
information regarding tiles inside image
Definition: openjpeg.h:891
opj_worker_thread_t::mutex
opj_mutex_t * mutex
Definition: thread.c:583
opj_codestream_info
Index structure of the codestream.
Definition: openjpeg.h:845
OPJWTS_STOP
@ OPJWTS_STOP
Definition: thread.c:589
OPJWTS_OK
@ OPJWTS_OK
Definition: thread.c:588
OPJ_UINT32
uint32_t OPJ_UINT32
Definition: openjpeg.h:126
opj_thread_pool_setup
static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t *tp, int num_threads)
Definition: thread.c:684
opj_get_num_cpus
int OPJ_CALLCONV opj_get_num_cpus(void)
Return the number of virtual CPUs.
Definition: thread.c:438
opj_worker_thread_list_t::worker_thread
opj_worker_thread_t * worker_thread
Definition: thread.c:600
opj_cond_t
struct opj_cond_t opj_cond_t
Opaque type for a condition.
Definition: thread.h:81
opj_tile_info::tp
opj_tp_info_t * tp
information concerning tile parts
Definition: openjpeg.h:839
opj_tile_info
Index structure : information regarding tiles.
Definition: openjpeg.h:805
opj_tls_new
static opj_tls_t * opj_tls_new(void)
Definition: thread.c:509
opj_worker_thread_list_t::next
struct opj_worker_thread_list_t * next
Definition: thread.c:601
opj_thread_join
void opj_thread_join(opj_thread_t *thread)
Wait for a thread to be finished and release associated resources to the thread handle.
Definition: thread.c:491
opj_thread_t
struct opj_thread_t opj_thread_t
Opaque type for a thread handle.
Definition: thread.h:141
OPJ_FALSE
#define OPJ_FALSE
Definition: openjpeg.h:112
opj_job_list_t::next
struct opj_job_list_t * next
Definition: thread.c:595
opj_thread_pool_t::waiting_worker_thread_list
opj_worker_thread_list_t * waiting_worker_thread_list
Definition: thread.c:613
opj_tls_get
void * opj_tls_get(opj_tls_t *tls, int key)
Get a thread local value corresponding to the provided key.
Definition: thread.c:529
opj_cond_create
opj_cond_t * opj_cond_create(void)
Creates a condition.
Definition: thread.c:463
opj_thread_pool_wait_completion
void opj_thread_pool_wait_completion(opj_thread_pool_t *tp, int max_remaining_jobs)
Wait that no more than max_remaining_jobs jobs are remaining in the queue of the thread pool.
Definition: thread.c:894
opj_write_bytes
#define opj_write_bytes
Definition: cio.h:64
opj_tls_get
void * opj_tls_get(opj_tls_t *tls, int key)
Get a thread local value corresponding to the provided key.
Definition: thread.c:529
opj_tls_t::key_val
opj_tls_key_val_t * key_val
Definition: thread.c:505
opj_codestream_info::th
int th
number of tiles in Y
Definition: openjpeg.h:869
OPJ_CALLCONV
#define OPJ_CALLCONV
Definition: openjpeg.h:92
opj_marker_info
Marker structure.
Definition: openjpeg.h:776
opj_write_tilemhix
int opj_write_tilemhix(int coff, opj_codestream_info_t cstr_info, int tileno, opj_stream_private_t *cio, opj_event_mgr_t *p_manager)
Definition: thix_manager.c:97
opj_write_thix
int opj_write_thix(int coff, opj_codestream_info_t cstr_info, opj_stream_private_t *cio, opj_event_mgr_t *p_manager)
Definition: thix_manager.c:40
opj_worker_thread_t
Definition: thread.c:578
opj_thread_pool_t
Definition: thread.c:605
opj_job_fn
void(* opj_job_fn)(void *user_data, opj_tls_t *tls)
User function to execute in a thread.
Definition: thread.h:213
opj_cond_destroy
void opj_cond_destroy(opj_cond_t *cond)
Destroy a condition.
Definition: thread.c:479