mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-23 18:14:06 +00:00
Initial commit with working config functions
This commit is contained in:
commit
adce16c03f
0
bin/placeholder.txt
Normal file
0
bin/placeholder.txt
Normal file
0
build/placeholder.txt
Normal file
0
build/placeholder.txt
Normal file
9
doc/syntax_elements.txt
Normal file
9
doc/syntax_elements.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
The following descriptors specify the parsing process of each syntax element.
|
||||||
|
– ae(v): context-adaptive arithmetic entropy-coded syntax element. The parsing process for this descriptor is specified in subclause 9.2.
|
||||||
|
– b(8): byte having any pattern of bit string (8 bits). The parsing process for this descriptor is specified by the return value of the function read_bits( 8 ).
|
||||||
|
– f(n): fixed-pattern bit string using n bits written (from left to right) with the left bit first. The parsing process for this descriptor is specified by the return value of the function read_bits( n ).
|
||||||
|
– i(n): signed integer using n bits. When n is "v" in the syntax table, the number of bits varies in a manner dependent on the value of other syntax elements. The parsing process for this descriptor is specified by the return value of the function read_bits( n ) interpreted as a two's complement integer representation with most significant bit written first.
|
||||||
|
– se(v): signed integer Exp-Golomb-coded syntax element with the left bit first. The parsing process for this descriptor is specified in subclause 9.1.
|
||||||
|
– tu(v): truncated unary coded syntax element with left bit first. The parsing process for this descriptor is specified in subclause 9.1.
|
||||||
|
– u(n): unsigned integer using n bits. When n is "v" in the syntax table, the number of bits varies in a manner dependent on the value of other syntax elements. The parsing process for this descriptor is specified by the return value of the function read_bits( n ) interpreted as a binary representation of an unsigned integer with most significant bit written first.
|
||||||
|
– ue(v): unsigned integer Exp-Golomb-coded syntax element with the left bit first. The parsing process for this descriptor is specified in subclause 9.1.
|
247
include/stdint.h
Normal file
247
include/stdint.h
Normal file
|
@ -0,0 +1,247 @@
|
||||||
|
// ISO C9x compliant stdint.h for Microsoft Visual Studio
|
||||||
|
// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
|
||||||
|
//
|
||||||
|
// Copyright (c) 2006-2008 Alexander Chemeris
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer in the
|
||||||
|
// documentation and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// 3. The name of the author may be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _MSC_VER // [
|
||||||
|
#error "Use this header only with Microsoft Visual C++ compilers!"
|
||||||
|
#endif // _MSC_VER ]
|
||||||
|
|
||||||
|
#ifndef _MSC_STDINT_H_ // [
|
||||||
|
#define _MSC_STDINT_H_
|
||||||
|
|
||||||
|
#if _MSC_VER > 1000
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
|
||||||
|
// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
|
||||||
|
// or compiler give many errors like this:
|
||||||
|
// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
# include <wchar.h>
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define _W64 macros to mark types changing their size, like intptr_t.
|
||||||
|
#ifndef _W64
|
||||||
|
# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
|
||||||
|
# define _W64 __w64
|
||||||
|
# else
|
||||||
|
# define _W64
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// 7.18.1 Integer types
|
||||||
|
|
||||||
|
// 7.18.1.1 Exact-width integer types
|
||||||
|
|
||||||
|
// Visual Studio 6 and Embedded Visual C++ 4 doesn't
|
||||||
|
// realize that, e.g. char has the same size as __int8
|
||||||
|
// so we give up on __intX for them.
|
||||||
|
#if (_MSC_VER < 1300)
|
||||||
|
typedef signed char int8_t;
|
||||||
|
typedef signed short int16_t;
|
||||||
|
typedef signed int int32_t;
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#else
|
||||||
|
typedef signed __int8 int8_t;
|
||||||
|
typedef signed __int16 int16_t;
|
||||||
|
typedef signed __int32 int32_t;
|
||||||
|
typedef unsigned __int8 uint8_t;
|
||||||
|
typedef unsigned __int16 uint16_t;
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
#endif
|
||||||
|
typedef signed __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
|
||||||
|
|
||||||
|
// 7.18.1.2 Minimum-width integer types
|
||||||
|
typedef int8_t int_least8_t;
|
||||||
|
typedef int16_t int_least16_t;
|
||||||
|
typedef int32_t int_least32_t;
|
||||||
|
typedef int64_t int_least64_t;
|
||||||
|
typedef uint8_t uint_least8_t;
|
||||||
|
typedef uint16_t uint_least16_t;
|
||||||
|
typedef uint32_t uint_least32_t;
|
||||||
|
typedef uint64_t uint_least64_t;
|
||||||
|
|
||||||
|
// 7.18.1.3 Fastest minimum-width integer types
|
||||||
|
typedef int8_t int_fast8_t;
|
||||||
|
typedef int16_t int_fast16_t;
|
||||||
|
typedef int32_t int_fast32_t;
|
||||||
|
typedef int64_t int_fast64_t;
|
||||||
|
typedef uint8_t uint_fast8_t;
|
||||||
|
typedef uint16_t uint_fast16_t;
|
||||||
|
typedef uint32_t uint_fast32_t;
|
||||||
|
typedef uint64_t uint_fast64_t;
|
||||||
|
|
||||||
|
// 7.18.1.4 Integer types capable of holding object pointers
|
||||||
|
#ifdef _WIN64 // [
|
||||||
|
typedef signed __int64 intptr_t;
|
||||||
|
typedef unsigned __int64 uintptr_t;
|
||||||
|
#else // _WIN64 ][
|
||||||
|
typedef _W64 signed int intptr_t;
|
||||||
|
typedef _W64 unsigned int uintptr_t;
|
||||||
|
#endif // _WIN64 ]
|
||||||
|
|
||||||
|
// 7.18.1.5 Greatest-width integer types
|
||||||
|
typedef int64_t intmax_t;
|
||||||
|
typedef uint64_t uintmax_t;
|
||||||
|
|
||||||
|
|
||||||
|
// 7.18.2 Limits of specified-width integer types
|
||||||
|
|
||||||
|
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
|
||||||
|
|
||||||
|
// 7.18.2.1 Limits of exact-width integer types
|
||||||
|
#define INT8_MIN ((int8_t)_I8_MIN)
|
||||||
|
#define INT8_MAX _I8_MAX
|
||||||
|
#define INT16_MIN ((int16_t)_I16_MIN)
|
||||||
|
#define INT16_MAX _I16_MAX
|
||||||
|
#define INT32_MIN ((int32_t)_I32_MIN)
|
||||||
|
#define INT32_MAX _I32_MAX
|
||||||
|
#define INT64_MIN ((int64_t)_I64_MIN)
|
||||||
|
#define INT64_MAX _I64_MAX
|
||||||
|
#define UINT8_MAX _UI8_MAX
|
||||||
|
#define UINT16_MAX _UI16_MAX
|
||||||
|
#define UINT32_MAX _UI32_MAX
|
||||||
|
#define UINT64_MAX _UI64_MAX
|
||||||
|
|
||||||
|
// 7.18.2.2 Limits of minimum-width integer types
|
||||||
|
#define INT_LEAST8_MIN INT8_MIN
|
||||||
|
#define INT_LEAST8_MAX INT8_MAX
|
||||||
|
#define INT_LEAST16_MIN INT16_MIN
|
||||||
|
#define INT_LEAST16_MAX INT16_MAX
|
||||||
|
#define INT_LEAST32_MIN INT32_MIN
|
||||||
|
#define INT_LEAST32_MAX INT32_MAX
|
||||||
|
#define INT_LEAST64_MIN INT64_MIN
|
||||||
|
#define INT_LEAST64_MAX INT64_MAX
|
||||||
|
#define UINT_LEAST8_MAX UINT8_MAX
|
||||||
|
#define UINT_LEAST16_MAX UINT16_MAX
|
||||||
|
#define UINT_LEAST32_MAX UINT32_MAX
|
||||||
|
#define UINT_LEAST64_MAX UINT64_MAX
|
||||||
|
|
||||||
|
// 7.18.2.3 Limits of fastest minimum-width integer types
|
||||||
|
#define INT_FAST8_MIN INT8_MIN
|
||||||
|
#define INT_FAST8_MAX INT8_MAX
|
||||||
|
#define INT_FAST16_MIN INT16_MIN
|
||||||
|
#define INT_FAST16_MAX INT16_MAX
|
||||||
|
#define INT_FAST32_MIN INT32_MIN
|
||||||
|
#define INT_FAST32_MAX INT32_MAX
|
||||||
|
#define INT_FAST64_MIN INT64_MIN
|
||||||
|
#define INT_FAST64_MAX INT64_MAX
|
||||||
|
#define UINT_FAST8_MAX UINT8_MAX
|
||||||
|
#define UINT_FAST16_MAX UINT16_MAX
|
||||||
|
#define UINT_FAST32_MAX UINT32_MAX
|
||||||
|
#define UINT_FAST64_MAX UINT64_MAX
|
||||||
|
|
||||||
|
// 7.18.2.4 Limits of integer types capable of holding object pointers
|
||||||
|
#ifdef _WIN64 // [
|
||||||
|
# define INTPTR_MIN INT64_MIN
|
||||||
|
# define INTPTR_MAX INT64_MAX
|
||||||
|
# define UINTPTR_MAX UINT64_MAX
|
||||||
|
#else // _WIN64 ][
|
||||||
|
# define INTPTR_MIN INT32_MIN
|
||||||
|
# define INTPTR_MAX INT32_MAX
|
||||||
|
# define UINTPTR_MAX UINT32_MAX
|
||||||
|
#endif // _WIN64 ]
|
||||||
|
|
||||||
|
// 7.18.2.5 Limits of greatest-width integer types
|
||||||
|
#define INTMAX_MIN INT64_MIN
|
||||||
|
#define INTMAX_MAX INT64_MAX
|
||||||
|
#define UINTMAX_MAX UINT64_MAX
|
||||||
|
|
||||||
|
// 7.18.3 Limits of other integer types
|
||||||
|
|
||||||
|
#ifdef _WIN64 // [
|
||||||
|
# define PTRDIFF_MIN _I64_MIN
|
||||||
|
# define PTRDIFF_MAX _I64_MAX
|
||||||
|
#else // _WIN64 ][
|
||||||
|
# define PTRDIFF_MIN _I32_MIN
|
||||||
|
# define PTRDIFF_MAX _I32_MAX
|
||||||
|
#endif // _WIN64 ]
|
||||||
|
|
||||||
|
#define SIG_ATOMIC_MIN INT_MIN
|
||||||
|
#define SIG_ATOMIC_MAX INT_MAX
|
||||||
|
|
||||||
|
#ifndef SIZE_MAX // [
|
||||||
|
# ifdef _WIN64 // [
|
||||||
|
# define SIZE_MAX _UI64_MAX
|
||||||
|
# else // _WIN64 ][
|
||||||
|
# define SIZE_MAX _UI32_MAX
|
||||||
|
# endif // _WIN64 ]
|
||||||
|
#endif // SIZE_MAX ]
|
||||||
|
|
||||||
|
// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
|
||||||
|
#ifndef WCHAR_MIN // [
|
||||||
|
# define WCHAR_MIN 0
|
||||||
|
#endif // WCHAR_MIN ]
|
||||||
|
#ifndef WCHAR_MAX // [
|
||||||
|
# define WCHAR_MAX _UI16_MAX
|
||||||
|
#endif // WCHAR_MAX ]
|
||||||
|
|
||||||
|
#define WINT_MIN 0
|
||||||
|
#define WINT_MAX _UI16_MAX
|
||||||
|
|
||||||
|
#endif // __STDC_LIMIT_MACROS ]
|
||||||
|
|
||||||
|
|
||||||
|
// 7.18.4 Limits of other integer types
|
||||||
|
|
||||||
|
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
|
||||||
|
|
||||||
|
// 7.18.4.1 Macros for minimum-width integer constants
|
||||||
|
|
||||||
|
#define INT8_C(val) val##i8
|
||||||
|
#define INT16_C(val) val##i16
|
||||||
|
#define INT32_C(val) val##i32
|
||||||
|
#define INT64_C(val) val##i64
|
||||||
|
|
||||||
|
#define UINT8_C(val) val##ui8
|
||||||
|
#define UINT16_C(val) val##ui16
|
||||||
|
#define UINT32_C(val) val##ui32
|
||||||
|
#define UINT64_C(val) val##ui64
|
||||||
|
|
||||||
|
// 7.18.4.2 Macros for greatest-width integer constants
|
||||||
|
#define INTMAX_C INT64_C
|
||||||
|
#define UINTMAX_C UINT64_C
|
||||||
|
|
||||||
|
#endif // __STDC_CONSTANT_MACROS ]
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _MSC_STDINT_H_ ]
|
138
src/config.c
Normal file
138
src/config.c
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
/**
|
||||||
|
* HEVC Encoder
|
||||||
|
* - Marko Viitanen ( fador at iki.fi ), Tampere University of Technology, Department of Computer Systems.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file config.c
|
||||||
|
\brief Configuration related functions
|
||||||
|
\author Marko Viitanen
|
||||||
|
\date 2012-05
|
||||||
|
|
||||||
|
This file has all configuration related functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "global.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Allocate memory for config object
|
||||||
|
\return pointer to allocated memory
|
||||||
|
*/
|
||||||
|
config* config_alloc()
|
||||||
|
{
|
||||||
|
config* cfg = (config *)malloc(sizeof(config));
|
||||||
|
memset(cfg, 0, sizeof(config));
|
||||||
|
return cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Initialize config structure
|
||||||
|
\param cfg config object
|
||||||
|
\return 1 on success, 0 on failure
|
||||||
|
*/
|
||||||
|
int config_init(config* cfg)
|
||||||
|
{
|
||||||
|
cfg->input = NULL;
|
||||||
|
cfg->output = NULL;
|
||||||
|
cfg->debug = NULL;
|
||||||
|
cfg->frames = 0;
|
||||||
|
cfg->skip = 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Free memory allocated to the config
|
||||||
|
\param cfg config object
|
||||||
|
\return 1 on success, 0 on failure
|
||||||
|
*/
|
||||||
|
int config_destroy(config* cfg)
|
||||||
|
{
|
||||||
|
if(cfg->input != NULL)
|
||||||
|
{
|
||||||
|
free(cfg->input);
|
||||||
|
cfg->input = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cfg->output != NULL)
|
||||||
|
{
|
||||||
|
free(cfg->output);
|
||||||
|
cfg->output = NULL;
|
||||||
|
}
|
||||||
|
free(cfg);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Read configuration options from argv to the config struct
|
||||||
|
\param cfg config object
|
||||||
|
\param argc argument count
|
||||||
|
\param argv argument list
|
||||||
|
\return 1 on success, 0 on failure
|
||||||
|
*/
|
||||||
|
int config_read(config* cfg,int argc, char* argv[])
|
||||||
|
{
|
||||||
|
uint32_t pos = 0;
|
||||||
|
int arg = 1;
|
||||||
|
char option = 0;
|
||||||
|
|
||||||
|
while(arg < argc && pos < strlen(argv[arg]))
|
||||||
|
{
|
||||||
|
/* Check for an option */
|
||||||
|
if(argv[arg][0] == '-' && strlen(argv[arg]) > 1)
|
||||||
|
{
|
||||||
|
/* Second letter of the argument is the option we want to use */
|
||||||
|
option = argv[arg][1];
|
||||||
|
|
||||||
|
/* Point to the next argument */
|
||||||
|
arg++;
|
||||||
|
switch(option)
|
||||||
|
{
|
||||||
|
case 'i': /* Input */
|
||||||
|
/* Allocate +1 for \0 */
|
||||||
|
cfg->input = malloc(strlen(argv[arg])+1);
|
||||||
|
memcpy(cfg->input, argv[arg], strlen(argv[arg])+1);
|
||||||
|
break;
|
||||||
|
case 'o': /* Output */
|
||||||
|
cfg->output = malloc(strlen(argv[arg])+1);
|
||||||
|
memcpy(cfg->output, argv[arg], strlen(argv[arg])+1);
|
||||||
|
break;
|
||||||
|
case 'd': /* Debug */
|
||||||
|
cfg->debug = malloc(strlen(argv[arg])+1);
|
||||||
|
memcpy(cfg->debug, argv[arg], strlen(argv[arg])+1);
|
||||||
|
break;
|
||||||
|
case 'w': /* width */
|
||||||
|
/* Get skipped frames count */
|
||||||
|
cfg->width = atoi(argv[arg]);
|
||||||
|
break;
|
||||||
|
case 'h': /* height */
|
||||||
|
/* Get skipped frames count */
|
||||||
|
cfg->height = atoi(argv[arg]);
|
||||||
|
break;
|
||||||
|
case 'n': /* Framecount */
|
||||||
|
/* Get frame count */
|
||||||
|
cfg->frames = atoi(argv[arg]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Unknown command */
|
||||||
|
fprintf(stderr, "%c is not a known option\r\n", option);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Next argument */
|
||||||
|
arg++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check that the required files were defined */
|
||||||
|
if(cfg->input == NULL || cfg->output == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
36
src/config.h
Normal file
36
src/config.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/**
|
||||||
|
* HEVC Encoder
|
||||||
|
* - Marko Viitanen ( fador at iki.fi ), Tampere University of Technology, Department of Computer Systems.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file config.h
|
||||||
|
\brief Configuration header
|
||||||
|
\author Marko Viitanen
|
||||||
|
\date 2012-05
|
||||||
|
|
||||||
|
Contains all configuration system related functions and structs
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _CONFIG_H_
|
||||||
|
#define _CONFIG_H_
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Struct which contains all configuration data
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *input; /*!< \brief Pointer to input filename */
|
||||||
|
char *output;/*!< \brief Pointer to output filename */
|
||||||
|
char *debug; /*!< \brief Pointer to debug output */
|
||||||
|
int frames; /*!< \brief Number of frames to decode */
|
||||||
|
int width; /*!< \brief frame width */
|
||||||
|
int height; /*!< \brief frame height */
|
||||||
|
} config;
|
||||||
|
|
||||||
|
/* Function definitions */
|
||||||
|
config* config_alloc();
|
||||||
|
int config_init(config* cfg);
|
||||||
|
int config_destroy(config* cfg);
|
||||||
|
int config_read(config* cfg,int argc, char* argv[]);
|
||||||
|
|
||||||
|
#endif
|
105
src/encmain.c
Normal file
105
src/encmain.c
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
/**
|
||||||
|
* HEVC Encoder
|
||||||
|
* - Marko Viitanen ( fador at iki.fi ), Tampere University of Technology, Department of Computer Systems.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file decmain.c
|
||||||
|
\brief main file for the Decoder
|
||||||
|
\author Marko Viitanen
|
||||||
|
\date 2012-05
|
||||||
|
|
||||||
|
This file contains main() function
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \mainpage HEVC Encoder
|
||||||
|
*
|
||||||
|
* \section Coding style
|
||||||
|
*
|
||||||
|
* Coding style is explained in it's own document.
|
||||||
|
*
|
||||||
|
* \section usage_sec Usage
|
||||||
|
*
|
||||||
|
* \subsection encode_subsec Basic Decoding:
|
||||||
|
* Use encmain.exe -i input.yuv -o output.hevc
|
||||||
|
*
|
||||||
|
* \subsection options_subsec All program options:
|
||||||
|
* - -i <filename>: input
|
||||||
|
* - -o <filename>: output
|
||||||
|
* - -w <width>: frame width
|
||||||
|
* - -h <height>: frame height
|
||||||
|
* - -n <n>: encode only n frames
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Suppress some windows warnings */
|
||||||
|
#ifdef WIN32
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Program main function.
|
||||||
|
\param argc Argument count from commandline
|
||||||
|
\param argv Argument list
|
||||||
|
\return Program exit state
|
||||||
|
*/
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
|
||||||
|
config *cfg = NULL; /* Global configuration */
|
||||||
|
FILE *input = NULL;
|
||||||
|
FILE *output = NULL;
|
||||||
|
|
||||||
|
/* Handle configuration */
|
||||||
|
cfg = config_alloc();
|
||||||
|
|
||||||
|
/* If problem with configuration, shutdown */
|
||||||
|
if(!config_init(cfg) || !config_read(cfg,argc,argv))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "/////////////////////////////////////////////////\r\n");
|
||||||
|
fprintf(stderr, "// HEVC Encoder v. " VERSION_STRING "//\r\n");
|
||||||
|
fprintf(stderr, "// Tampere University of Technology 2012 //\r\n");
|
||||||
|
fprintf(stderr, "/////////////////////////////////////////////////\r\n\r\n");
|
||||||
|
|
||||||
|
fprintf(stderr, "Usage:\r\n");
|
||||||
|
fprintf(stderr, "encmain -i <input> -w <width> -h <height> -o <output>\r\n");
|
||||||
|
fprintf(stderr, "Optional parameters:\r\n");
|
||||||
|
fprintf(stderr, " -n <frames> : number of frames to decode\r\n");
|
||||||
|
fprintf(stderr, " -s <frames> : number of frames to skip from the beginning\r\n");
|
||||||
|
|
||||||
|
config_destroy(cfg);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Input: %s, output: %s\r\n", cfg->input, cfg->output);
|
||||||
|
|
||||||
|
/* Open input file and check that it was opened correctly */
|
||||||
|
input = fopen(cfg->input, "rb");
|
||||||
|
if(input == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Couldn't open input file!\r\n");
|
||||||
|
config_destroy(cfg);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open output file and check that it was opened correctly */
|
||||||
|
output = fopen(cfg->output, "wb");
|
||||||
|
if(output == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Couldn't open output file!\r\n");
|
||||||
|
config_destroy(cfg);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(input);
|
||||||
|
fclose(output);
|
||||||
|
|
||||||
|
config_destroy(cfg);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
43
src/global.h
Normal file
43
src/global.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/**
|
||||||
|
* HEVC Encoder
|
||||||
|
* - Marko Viitanen ( fador at iki.fi ), Tampere University of Technology, Department of Computer Systems.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file global.h
|
||||||
|
\brief Contains global includes
|
||||||
|
\author Marko Viitanen
|
||||||
|
\date 2012-05
|
||||||
|
|
||||||
|
This file should be included to every C-file.
|
||||||
|
*/
|
||||||
|
#ifndef __GLOBAL_H
|
||||||
|
#define __GLOBAL_H
|
||||||
|
|
||||||
|
//Including stdint.h,
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include "../include/stdint.h"
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VERSION_STRING "0.1 "
|
||||||
|
#define VERSION 0.1
|
||||||
|
|
||||||
|
//#define VERBOSE 1
|
||||||
|
|
||||||
|
|
||||||
|
#define SIZE_2Nx2N 0
|
||||||
|
#define SIZE_2NxN 1
|
||||||
|
#define SIZE_Nx2N 2
|
||||||
|
#define SIZE_NxN 3
|
||||||
|
#define SIZE_NONE 15
|
||||||
|
|
||||||
|
#define MODE_SKIP 0
|
||||||
|
#define MODE_INTER 1
|
||||||
|
#define MODE_INTRA 2
|
||||||
|
#define MODE_NONE 15
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue