/* * GPAC - Multimedia Framework C SDK * * Authors: Jean Le Feuvre * Copyright (c) Telecom ParisTech 2000-2012 * All rights reserved * * This file is part of GPAC / modules interfaces * * 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_MODULE_IPMP_H_ #define _GF_MODULE_IPMP_H_ #ifdef __cplusplus extern "C" { #endif #include <gpac/module.h> /* NOTE ON IPMP TOOLS The current implementation is very basic and does not follow MPEG-4 IPMPX architecture This is just a place holder for ISMA/OMA-like schemes Currently all operations are synchronous... */ enum { /*push some configuration data to the IPMP tool*/ GF_IPMP_TOOL_SETUP, /*request access to the object (eg, PLAY)*/ GF_IPMP_TOOL_GRANT_ACCESS, /*release access to the object (eg, STOP)*/ GF_IPMP_TOOL_RELEASE_ACCESS, /*push some configuration data to the IPMP tool*/ GF_IPMP_TOOL_PROCESS_DATA, }; typedef struct { u32 scheme_version; u32 scheme_type; const char *scheme_uri; const char *kms_uri; } GF_ISMACrypConfig; typedef struct { u32 scheme_version; u32 scheme_type; u32 PSSH_count; GF_NetComDRMConfigPSSH *PSSHs; } GF_CENCConfig; typedef struct { u32 scheme_version; u32 scheme_type; const char *scheme_uri; const char *kms_uri; /*SHA-1 hash*/ u8 hash[20]; const char *contentID; u32 oma_drm_crypt_type; Bool oma_drm_use_pad, oma_drm_use_hdr; const char *oma_drm_textual_headers; u32 oma_drm_textual_headers_len; } GF_OMADRM2Config; /*IPMP events*/ typedef struct { /*event type*/ u32 event_type; /*gpac's channel triggering this event, NULL if unknown/unspecified*/ struct _es_channel *channel; /*identifier of the config data (GF_IPMP_TOOL_SETUP)*/ u32 config_data_code; /*config data (GF_IPMP_TOOL_SETUP). Type depends on the config_data_code*/ void *config_data; Bool restart_requested; /*data manipulation (GF_IPMP_TOOL_PROCESS_DATA) - data is always processed in-place in a synchronous way*/ char *data; u32 data_size; u32 out_data_size; /*indicates if payload passed is encrypted or not - this is used by ISMA, OMA and 3GP*/ Bool is_encrypted; /*ISMA payload resync indicator*/ u64 isma_BSO; /*CENC sample auxiliary information*/ 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; } GF_IPMPEvent; /*interface name and version for IPMP tools*/ #define GF_IPMP_TOOL_INTERFACE GF_4CC('G','I','P', '1') typedef struct _ipmp_tool GF_IPMPTool; struct _ipmp_tool { /* interface declaration*/ GF_DECL_MODULE_INTERFACE /*process an ipmp event*/ GF_Err (*process)(GF_IPMPTool *dr, GF_IPMPEvent *evt); /*tool private*/ void *udta; }; #ifdef __cplusplus } #endif #endif /*#define _GF_MODULE_IPMP_H_ */