/* * GPAC - Multimedia Framework C SDK * * Authors: Romain Bouqueau * Copyright (c) Telecom ParisTech 2010-20xx * All rights reserved * * This file is part of GPAC / Hybrid Media input module * * 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 _HYB_IN_H #define _HYB_IN_H #include <gpac/modules/codec.h> #include <gpac/modules/service.h> #include <gpac/constants.h> typedef enum { HYB_STATE_STOPPED = -2, /*thread received HYB_STATE_STOP_REQ and stopped*/ HYB_STATE_STOP_REQ = -1, /*user asked to stop*/ HYB_STATE_PAUSE = 0, /*default state*/ //HYB_STATE_PLAY_REQ = 1, /*user asked to play*/ HYB_STATE_PLAYING = 2, /*thread received HYB_STATE_PLAY_REQ and has started playing*/ } HYB_STATE; typedef enum { HYB_PUSH = 0, /*threaded*/ HYB_PULL, /*not threaded*/ } HYB_DATA_MODE; /*base structure for media hybridation*/ typedef struct s_GF_HYBMEDIA { /*object description*/ const char* name; /* *** static methods *** */ /*is url handled by this service?*/ Bool (*CanHandleURL)(const char *url); /*retrieve object descriptor*/ GF_ObjectDescriptor* (*GetOD)(void); /* *** other methods *** */ /*create/destroy the object and all its data*/ GF_Err (*Connect) (struct s_GF_HYBMEDIA *self, GF_ClientService *service, const char *url); GF_Err (*Disconnect)(struct s_GF_HYBMEDIA *self); /*request state from */ GF_Err (*SetState)(struct s_GF_HYBMEDIA *self, const GF_NET_CHAN_CMD state); /*in case data retrieval paradigm is pull these two functions shall not be NULL*/ GF_Err (*GetData) (struct s_GF_HYBMEDIA *self, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr); /*only available when data_mode is pull*/ GF_Err (*ReleaseData)(struct s_GF_HYBMEDIA *self); /*only available when data_mode is pull*/ /* *** statically initialized data *** */ /*data retrieval mode: HYB_PUSH or HYB_PULL*/ HYB_DATA_MODE data_mode; /*pivate data which type depends on dynamic considerations*/ void *private_data; /* *** dynamically initialized data *** */ /*object state: play/stop/pause/...*/ HYB_STATE state; /*object carrying us (needed to communicate with the player)*/ GF_ClientService *owner; LPNETCHANNEL channel; } GF_HYBMEDIA; #endif