/*!
* COPYRIGHT (C) 2010-2020 Emeric Grange - All Rights Reserved
*
* This file is part of MiniVideo.
*
* MiniVideo is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MiniVideo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with MiniVideo. If not, see .
*
* \author Emeric Grange
* \date 2016
*/
#ifndef MINIVIDEO_H
#define MINIVIDEO_H
/* ************************************************************************** */
struct MediaFile_t;
/*!
* \brief Error codes returned to clients.
*/
typedef enum MiniVideoErrorCodes_e
{
ERROR_UNKNOWN = 1,
ERROR_CONTAINER_UNKNOWN = 10,
ERROR_CONTAINER_FAILURE = 11,
ERROR_CODEC_UNKNOWN = 20,
ERROR_CODEC_FAILURE = 21
} MiniVideoErrorCodes_e;
/* ************************************************************************** */
/*!
* \brief Print informations about the library (version, date of the build, ...) into standard output.
*/
void minivideo_print_infos(void);
/*!
* \brief Print informations about the library (enabled features, traces levels, ...) into standard output.
*/
void minivideo_print_features(void);
/*!
* \brief Get informations about the library (version and build date/time).
*
* The date and time strings are static data and do not need to be freed.
*/
void minivideo_get_infos(int *minivideo_major,
int *minivideo_minor,
int *minivideo_patch,
const char **minivideo_builddate,
const char **minivideo_buildtime,
bool *minivideo_builddebug);
/*!
* \brief Print endianness of the current system.
* \return 4321 for big endian, 1234 for little endian, -1 if unable to determine endianness.
*
* To determine endianness, we use a character pointer to the bytes of an int,
* and then check its first byte to see if it is 0 (meaning big endianness)
* or 1 (meaning little endianness).
*/
int minivideo_endianness(void);
/* ************************************************************************** */
/*!
* \brief Open a file and return a MediaFile_t context.
* \param[in] *input_filepath: The file path of the video we want to open.
* \param[in,out] **input_media: The MediaFile_t context to create.
* \return TODO ERROR CODE (1 if file opening is a success, 0 otherwise).
*
* The first step in the decoding process is to open the file with the given fileptath.
* If the file is successfully opened, the program start gathering informations about
* the file, print them if in debug mode.
*/
int minivideo_open(const char *input_filepath,
MediaFile_t **input_media);
/*!
* \brief Close a video file.
* \param input_media[in,out]: The MediaFile_t context to destroy.
* \return 1 if success, 0 otherwise.
*/
int minivideo_close(MediaFile_t **input_media);
#endif // MINIVIDEO_H