gpr-tools/source/lib/common/private/gpr_buffer.c

100 wiersze
2.4 KiB
C
Executable File

/*! @file gpr_buffer.c
*
* @brief Implementation of gpr_buffer object and functions that work on buffer
*
* @version 1.0.0
*
* (C) Copyright 2018 GoPro Inc (http://gopro.com/).
*
* Licensed under either:
* - Apache License, Version 2.0, http://www.apache.org/licenses/LICENSE-2.0
* - MIT license, http://opensource.org/licenses/MIT
* at your option.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "gpr_buffer.h"
#include "macros.h"
#include "stdc_includes.h"
int read_from_file(gpr_buffer* buffer, const char* file_path, gpr_malloc malloc_function, gpr_free free_function)
{
assert( buffer != NULL );
FILE *fIN = fopen(file_path, "rb");
if (fIN == NULL)
{
fprintf (stderr, "Error while reading file: %s", file_path);
return -1;
}
fseek (fIN, 0, SEEK_END);
buffer->size = (size_t) ftell(fIN);
rewind (fIN);
buffer->buffer = malloc_function(buffer->size);
if ( buffer->buffer == NULL)
{
fputs ("Memory error", stderr);
fclose(fIN);
return -1;
}
if (fread(buffer->buffer, 1, buffer->size, fIN) != buffer->size)
{
free_function(buffer->buffer);
fputs ("Reading error", stderr);
fclose(fIN);
return -1;
}
fclose(fIN);
return 0;
}
int write_to_file(const gpr_buffer* buffer, const char* file_path)
{
unsigned int bytes_written;
FILE *fOUT = fopen(file_path, "wb");
if (fOUT == NULL)
{
fprintf (stderr, "Error while writing file: %s", file_path);
return -1;
}
bytes_written = fwrite(buffer->buffer, 1, buffer->size, fOUT);
if( bytes_written != buffer->size ) {
fputs("Could not write bytes \n", stderr);
perror("fwrite()");
fclose(fOUT);
return -2;
}
fclose(fOUT);
return 0;
}
#include "gpr_rgb_buffer.h"
void gpr_rgb_gain_set_defaults(gpr_rgb_gain* x)
{
x->r_gain_num = 30;
x->r_gain_pow2_den = 4;
x->g_gain_num = 1;
x->g_gain_pow2_den = 0;
x->b_gain_num = 7;
x->b_gain_pow2_den = 2;
}