diff options
| author | Mickael Savinaud <savmickael@users.noreply.github.com> | 2013-02-16 17:20:55 +0000 |
|---|---|---|
| committer | Mickael Savinaud <savmickael@users.noreply.github.com> | 2013-02-16 17:20:55 +0000 |
| commit | d5884afcf36c567a713fc0ee33e905e5361f6eaf (patch) | |
| tree | 7156dff9d173f70fdf3bbf7b041d3103f9fe0ca2 /src/lib/openjp2/openjpeg.c | |
| parent | a2aeafe85b9a39edb5ef4b74a486e8c162a69921 (diff) | |
[trunk] add functions to avoid to use FILE* into the API (thanks winfried).
Update issue 120 and update issue 198
Diffstat (limited to 'src/lib/openjp2/openjpeg.c')
| -rw-r--r-- | src/lib/openjp2/openjpeg.c | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/src/lib/openjp2/openjpeg.c b/src/lib/openjp2/openjpeg.c index 0ed7e67a..ec9746f7 100644 --- a/src/lib/openjp2/openjpeg.c +++ b/src/lib/openjp2/openjpeg.c @@ -1037,6 +1037,11 @@ opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream (FILE * p_file, return opj_stream_create_file_stream(p_file,OPJ_J2K_STREAM_CHUNK_SIZE,p_is_read_stream); } +opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream_v3 (const char *fname, OPJ_BOOL p_is_read_stream) +{ + return opj_stream_create_file_stream_v3(fname, OPJ_J2K_STREAM_CHUNK_SIZE, p_is_read_stream); +} + opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream ( FILE * p_file, OPJ_SIZE_T p_size, OPJ_BOOL p_is_read_stream) @@ -1052,12 +1057,49 @@ opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream ( FILE * p_file, return NULL; } - opj_stream_set_user_data(l_stream, p_file); - opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file)); - opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file); - opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file); - opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file); - opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn) opj_seek_from_file); + opj_stream_set_user_data(l_stream, p_file); + opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file)); + opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file); + opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file); + opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file); + opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn) opj_seek_from_file); + + return l_stream; +} + +opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream_v3 ( + const char *fname, + OPJ_SIZE_T p_size, + OPJ_BOOL p_is_read_stream) +{ + opj_stream_t* l_stream = 00; + FILE *p_file; + const char *mode; + + if (! fname) { + return NULL; + } + + if(p_is_read_stream) mode = "rb"; else mode = "wb"; + + p_file = fopen(fname, mode); + + if (! p_file) { + return NULL; + } + + l_stream = opj_stream_create(p_size,p_is_read_stream); + if (! l_stream) { + fclose(p_file); + return NULL; + } + + opj_stream_set_user_data(l_stream, p_file); + opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file)); + opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file); + opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file); + opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file); + opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn) opj_seek_from_file); - return l_stream; + return l_stream; } |
