/* * GPAC - Multimedia Framework C SDK * * Authors: Jean Le Feuvre * Copyright (c) Telecom ParisTech 2000-2012 * All rights reserved * * This file is part of GPAC / SL header file * * 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_SYNC_LAYER_H_ #define _GF_SYNC_LAYER_H_ #ifdef __cplusplus extern "C" { #endif /*! * \file <gpac/sync_layer.h> * \brief MPEG-4 Object Descriptor Framework Sync Layer. */ /*! * \ingroup odf_grp * \brief MPEG-4 Object Descriptor Framework Sync Layer * *This section documents the MPEG-4 OD Sync Layer used in GPAC. * @{ */ /*the Sync Layer config descriptor*/ typedef struct { /*base descriptor*/ u8 tag; u8 predefined; u8 useAccessUnitStartFlag; u8 useAccessUnitEndFlag; u8 useRandomAccessPointFlag; u8 hasRandomAccessUnitsOnlyFlag; u8 usePaddingFlag; u8 useTimestampsFlag; u8 useIdleFlag; u8 durationFlag; u32 timestampResolution; u32 OCRResolution; u8 timestampLength; u8 OCRLength; u8 AULength; u8 instantBitrateLength; u8 degradationPriorityLength; u8 AUSeqNumLength; u8 packetSeqNumLength; u32 timeScale; u16 AUDuration; u16 CUDuration; u64 startDTS; u64 startCTS; Bool no_dts_signaling; } GF_SLConfig; /*************************************** SLConfig Tag ***************************************/ enum { SLPredef_Null = 0x01, SLPredef_MP4 = 0x02, /*intern to GPAC, means NO SL at all (for streams unable to handle AU reconstruction a timing)*/ SLPredef_SkipSL = 0xF0 }; /*set SL predefined (assign all fields according to sl->predefined value)*/ GF_Err gf_odf_slc_set_pref(GF_SLConfig *sl); typedef struct { u8 accessUnitStartFlag; u8 accessUnitEndFlag; u8 paddingFlag; u8 randomAccessPointFlag; u8 OCRflag; u8 idleFlag; u8 decodingTimeStampFlag; u8 compositionTimeStampFlag; u8 instantBitrateFlag; u8 degradationPriorityFlag; u8 paddingBits; u16 packetSequenceNumber; u64 objectClockReference; u16 AU_sequenceNumber; u64 decodingTimeStamp; u64 compositionTimeStamp; u16 accessUnitLength; u32 instantBitrate; u16 degradationPriority; /*Everything below this comment is internal to GPAC*/ /*this is NOT part of standard SL, only used internally: signals duration of access unit if known this is useful for streams with very random updates, to prevent buffering for instance a subtitle stream which is likely to have no updates during the first minutes... expressed in media timescale*/ u32 au_duration; /*ISMACryp extensions*/ u8 isma_encrypted; u64 isma_BSO; /*CENC extensions*/ u8 cenc_encrypted; char *sai; u8 IV_size; u32 saiz; //for CENC pattern encryption mode u8 crypt_byte_block, skip_byte_block; u8 constant_IV_size; bin128 constant_IV; /*version_number are pushed from m2ts sections to the mpeg4sl layer so as to handle mpeg4 stream dependencies*/ u8 m2ts_version_number_plus_one; //0: not mpeg-2 TS PCR, 1: MEPG-2 TS PCR, 2: MPEG-2 TS PCR with discontinuity u8 m2ts_pcr; /* HTML5 MSE Packet info */ s64 timeStampOffset; //ntp at sender/producer side for this packet, 0 otherwise u64 sender_ntp; //set for AUs which should be decodedd but not presented during seek u8 seekFlag; } GF_SLHeader; /*packetize SL-PDU. If PDU is NULL or size 0, only writes the SL header*/ void gf_sl_packetize(GF_SLConfig* slConfig, GF_SLHeader *Header, char *PDU, u32 size, char **outPacket, u32 *OutSize); /*gets SL header size in bytes*/ u32 gf_sl_get_header_size(GF_SLConfig* slConfig, GF_SLHeader *Header); /*depacketize SL-PDU*/ void gf_sl_depacketize(GF_SLConfig *slConfig, GF_SLHeader *Header, const char *PDU, u32 PDULength, u32 *HeaderLen); /*! @} */ #ifdef __cplusplus } #endif #endif /*_GF_SYNC_LAYER_H_*/