/* * GPAC Multimedia Framework * * Authors: Cyril Concolato - Jean le Feuvre * Copyright (c) Telecom ParisTech 2005-2012 * All rights reserved * * This file is part of GPAC * * GPAC 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 2, or (at your option) * any later version. * * GPAC 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 this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ #ifndef _GF_SCENEENGINE_H_ #define _GF_SCENEENGINE_H_ #ifdef __cplusplus extern "C" { #endif /*! * \file <gpac/scene_engine.h> * \brief Live scene encoding engine with RAP generation support. */ /*! * \addtogroup seng Scene Engine * \ingroup scene_grp * \brief Live scene encoding engine with RAP generation support. * *This section documents the live scene encoding tools of GPAC. * @{ */ #include <gpac/scene_manager.h> #ifndef GPAC_DISABLE_SENG typedef struct __tag_scene_engine GF_SceneEngine; typedef void (*gf_seng_callback)(void *udta, u16 ESID, char *data, u32 size, u64 ts); /** * \param calling_object is the calling object on which call back will be called * \param inputContext is the name of a scene file (bt, xmt or mp4) to initialize the coding context * \param load_type is the prefered loader type for the content (e.g. SVG vs DIMS) * \param dump_path is the path where scenes are dumped * \param embed_resources indicates if images and scripts should be encoded inlined with the content * * must be called only one time (by process calling the DLL) before other calls */ GF_SceneEngine *gf_seng_init(void *calling_object, char *inputContext, u32 load_type, char *dump_path, Bool embed_resources); /** * \param calling_object is the calling object on which call back will be called * \param inputContext is an UTF-8 scene description (with or without IOD) in BT or XMT-A format * \param load_type is the prefered loader type for the content (e.g. SVG vs DIMS) * \param width width of scene if no IOD is given in the context. * \param height height of scene if no IOD is given in the context. * \param usePixelMetrics metrics system used in the scene, if no IOD is given in the context. * \param dump_path the path where scenes are dumped * * must be called only one time (by process calling the DLL) before other calls */ GF_SceneEngine *gf_seng_init_from_string(void *calling_object, char *inputContext, u32 load_type, u32 width, u32 height, Bool usePixelMetrics, char *dump_path); /** * \param calling_object the calling object on which call back will be called * \param ctx an already loaded scene manager * \param dump_path the path where scenes are dumped * * must be called only one time (by process calling the DLL) before other calls */ GF_SceneEngine *gf_seng_init_from_context(void *calling_object, GF_SceneManager *ctx, char *dump_path); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * * must be called after gf_seng_init() */ u32 gf_seng_get_stream_count(GF_SceneEngine *seng); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ESID ID of the stream * \param carousel_period pointer to store the carousel_period * \param aggregate_on_es_id pointer to store the target carousel stream ID * * must be called after gf_seng_init() */ GF_Err gf_seng_get_stream_carousel_info(GF_SceneEngine *seng, u16 ESID, u32 *carousel_period, u16 *aggregate_on_es_id); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param idx stream index * \param ESID pointer to the stream ID * \param config pointer to the encoded BIFS config (memory is not allocated) * \param config_len length of the buffer * \param streamType pointer to get stream type * \param objectType pointer to get object type * \param timeScale pointer to get time scale * * must be called after gf_seng_init() */ GF_Err gf_seng_get_stream_config(GF_SceneEngine *seng, u32 idx, u16 *ESID, char ** const config, u32 *config_len, u32 *streamType, u32 *objectType, u32 *timeScale); /** * Encodes the AU context which is not encoded when calling BENC_EncodeAUFromString/File * Should be called after Aggregate. * * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param callback pointer on a callback function to get the result of the coding the AU using the current context * */ GF_Err gf_seng_encode_context(GF_SceneEngine *seng, gf_seng_callback callback); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ESID target streams when no indication is present in the file (eg, no atES_ID ) * \param disable_aggregation * \param auFile name of a file containing a description for an access unit (BT or XMT) * \param callback pointer on a callback function to get the result of the coding the AU using the current context * */ GF_Err gf_seng_encode_from_file(GF_SceneEngine *seng, u16 ESID, Bool disable_aggregation, char *auFile, gf_seng_callback callback); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ESID target streams when no indication is present in the file (eg, no atES_ID ) * \param disable_aggregation * \param auString a char string to encode (must one or several complete nodes in BT * \param callback pointer on a callback function to get the result of the coding the AU using the current context * */ GF_Err gf_seng_encode_from_string(GF_SceneEngine *seng, u16 ESID, Bool disable_aggregation, char *auString, gf_seng_callback callback); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ESID indicates the stream to which these commands apply (0 if first scene stream) * \param disable_aggregation * \param time * \param commands the list of commands to encode * \param callback pointer on a callback function to get the result of the coding the AU using the current context * */ GF_Err gf_seng_encode_from_commands(GF_SceneEngine *seng, u16 ESID, Bool disable_aggregation, u32 time, GF_List *commands, gf_seng_callback callback); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ctxFileName name of the file to save the current state of the BIFS scene to * * save the current context of the seng. * if you want to save an aggregate context, use BENC_AggregateCurrentContext before * */ GF_Err gf_seng_save_context(GF_SceneEngine *seng, char *ctxFileName); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ESID stream ID * \param onESID set stream aggragation on to the specified stream, or off if onESID is 0 * * marks the stream as carrying its own "rap" in the first AU of the stream */ GF_Err gf_seng_enable_aggregation(GF_SceneEngine *seng, u16 ESID, u16 onESID); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * \param ESID stream ID * * aggregates the current context of the seng, creates a scene replace * if ESID is specified, only aggregate commands for this stream */ GF_Err gf_seng_aggregate_context(GF_SceneEngine *seng, u16 ESID); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * * release the memory used by this seng, no more call on the seng should happen after this * */ void gf_seng_terminate(GF_SceneEngine *seng); /** * \param seng pointer to the GF_SceneEngine returned by gf_seng_init() * * encodes the IOD for this BIFS Engine into Base64 * */ char *gf_seng_get_base64_iod(GF_SceneEngine *seng); GF_Descriptor *gf_seng_get_iod(GF_SceneEngine *seng); GF_Err gf_seng_dump_rap_on(GF_SceneEngine *seng, Bool dump_rap); #endif /*GPAC_DISABLE_SENG*/ /*! @} */ #ifdef __cplusplus } #endif // __cplusplus #endif /*_GF_SCENEENGINE_H_*/