/*
|
* $Id$
|
* Copyright (c) 2010, Matroska (non-profit organisation)
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
* * Redistributions of source code must retain the above copyright
|
* notice, this list of conditions and the following disclaimer.
|
* * 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.
|
* * Neither the name of the Matroska assocation nor the
|
* names of its contributors may be used to endorse or promote products
|
* derived from this software without specific prior written permission.
|
*
|
* THIS SOFTWARE IS PROVIDED BY the Matroska association ``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 Matroska Foundation 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 LIBEBML2_INTERNAL_H
|
#define LIBEBML2_INTERNAL_H
|
|
/*
|
* ONLY INCLUDE THIS FILE IF YOU PLAN TO CREATE YOUR OWN EBML-BASED CLASS
|
*/
|
|
#include "corec/node/node.h"
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
INTERNAL_C_API size_t GetIdLength(fourcc_t Id);
|
|
struct ebml_context
|
{
|
fourcc_t Id;
|
fourcc_t Class; // TODO: store a pointer to make creation faster
|
bool_t HasDefault;
|
intptr_t DefaultValue;
|
const char *ElementName;
|
// TODO: create sub class so we don't have to assign it all the time
|
const ebml_semantic *Semantic; // table with last element class set to NULL
|
const ebml_semantic *GlobalContext; // table with last element class set to NULL
|
void (*PostCreate)(ebml_element *p, const void *Cookie);
|
};
|
|
struct ebml_element
|
{
|
nodetree Base;
|
filepos_t DataSize; // size of the data inside the element
|
filepos_t ElementPosition;
|
filepos_t SizePosition; // TODO: is this needed since we have the ElementPosition and SizeLength ?
|
const ebml_context *Context;
|
int DefaultSize;
|
int8_t SizeLength;
|
boolmem_t bValueIsSet;
|
boolmem_t bNeedDataSizeUpdate;
|
};
|
|
struct ebml_master
|
{
|
ebml_element Base;
|
int CheckSumStatus; // 0: not set, 1: requested/invalid, 2: verified
|
|
};
|
|
struct ebml_string
|
{
|
ebml_element Base;
|
const char *Buffer; // UTF-8 internal storage
|
|
};
|
|
struct ebml_integer
|
{
|
ebml_element Base;
|
int64_t Value;
|
|
};
|
|
struct ebml_float
|
{
|
ebml_element Base;
|
double Value;
|
|
};
|
|
struct ebml_binary
|
{
|
ebml_element Base;
|
array Data;
|
|
};
|
|
struct ebml_dummy
|
{
|
ebml_binary Base;
|
ebml_context DummyContext;
|
|
};
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /* LIBEBML2_INTERNAL_H */
|