📄 demuxer.h
字号:
/* * * $Id$** This file is part of Fenice** Fenice -- Open Media Server** Copyright (C) 2007 by** - Giampaolo Mancini <giampaolo.mancini@polito.it>* - Francesco Varano <francesco.varano@polito.it>* - Marco Penno <marco.penno@polito.it>* - Federico Ridolfo <federico.ridolfo@polito.it>** Fenice is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** Fenice 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 General Public License for more details.** You should have received a copy of the GNU General Public License* along with Fenice; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA** */#ifndef __DEMUXER_H#define __DEMUXER_H#include <glib.h>#include <fenice/types.h>#include <fenice/utils.h>#include <fenice/mediautils.h>#include <fenice/InputStream.h>#include <fenice/mediaparser.h>#include <fenice/bufferpool.h>#include <fenice/sdp_grammar.h>/** a resource_name can be a mkv, sd, program stream, avi, device ... * syntax could be: * udp://ip:port* file://path/filename* dev://device:driver*/#define msg_error int/*msg_error:*/#define RESOURCE_OK 0 #define RESOURCE_NOT_FOUND -1 #define RESOURCE_DAMAGED -2#define RESOURCE_NOT_SEEKABLE -3#define RESOURCE_TRACK_NOT_FOUND -4#define RESOURCE_NOT_PARSEABLE -5/*...*/#define MAX_TRACKS 20 #define MAX_SEL_TRACKS 5//! Macros that take the data part of a GList element and cast to correct type#define RESOURCE(x) ((Resource *)x->data)#define TRACK(x) ((Track *)x->data)#define RESOURCE_DESCR(x) ((ResourceDescr *)x->data)#define MEDIA_DESCR(x) ((MediaDescr *)x->data)//! typedefs that give convenient names to GLists usedtypedef GList *TrackList;typedef GList *MediaDescrList;typedef GList *SelList;typedef GPtrArray *MediaDescrListArray;//! Some macros to wrap GList functions#define list_first(x) g_list_first(x)#define list_next(x) g_list_next(x)//! Some mecros to wrap GPtrArray functions#define array_data(x) x->pdata#define array_index(x, y) x->pdata[y]typedef struct __CAPABILITIES {} Capabilities;MObject_def(__RESOURCE_INFO) char *mrl; char *name; char *description; char *descrURI; char *email; char *phone; sdp_field_list sdp_private; double duration; MediaSource media_source; char twin[255]; char multicast[16]; char ttl[4];} ResourceInfo;typedef struct __RESOURCE { InputStream *i_stream; struct __DEMUXER *demuxer; ResourceInfo *info; /* Timescale fixer callback function for meta-demuxers */ double (*timescaler)(struct __RESOURCE *, double); /* EDL specific data */ struct __RESOURCE *edl; /* Multiformat related things */ SelList sel; int num_sel; TrackList tracks; int num_tracks; void *private_data; /* Demuxer private data */ int eos; //!< signals the end of stream} Resource;#if 0 // define MObject with MObject_deftypedef struct __TRACK_INFO { MOBJECT_COMMONS; // MObject commons MUST be the first field#endifMObject_def(__TRACK_INFO) char *mrl; char name[255]; int id; // should it more generic? int rtp_port; //start CC char commons_deed[255]; char rdf_page[255]; char title[80]; char author[80]; //end CC} TrackInfo;typedef struct __TRACK { InputStream *i_stream; TrackInfo *info; long int timestamp; MediaParser *parser; /*bufferpool*/ OMSBuffer *buffer; MediaProperties *properties; /* track properties */ Resource *parent; /* private data is managed by specific media parser: from allocation to deallocation * track MUST NOT do anything on this pointer! */ void *private_data; void *parser_private; /* private data of media parser */} Track;typedef struct __SELECTOR { // Track *tracks[MAX_SEL_TRACKS]; TrackList tracks; Track cur; uint32 default_index; uint32 selected_index;/**/ uint32 total; /*total tracks in selector*/} Selector;#if 0 // define MObject with MObject_deftypedef struct __RESOURCE_INFO { MOBJECT_COMMONS; // MObject commons MUST be the first field#endiftypedef struct { /*name of demuxer module*/ const char *name; /* short name (for config strings) (e.g.:"sd") */ const char *short_name; /* author ("Author name & surname <mail>") */ const char *author; /* any additional comments */ const char *comment; /* served file extensions */ const char *extensions; // coma separated list of extensions (w/o '.')} DemuxerInfo;typedef struct __DEMUXER { DemuxerInfo *info; int (*probe)(InputStream *); int (*init)(Resource *); int (*read_packet)(Resource *); int (*seek)(Resource *, double time_sec); int (*uninit)(Resource *); //...} Demuxer;typedef struct { time_t last_change; ResourceInfo *info; MediaDescrList media; // GList of MediaDescr elements} ResourceDescr;typedef struct { time_t last_change; TrackInfo *info; MediaProperties *properties;} MediaDescr;// --- functions --- //// ResourcesResource *r_open(char *root, char *name);/*open the resource: mkv, sd ...*/void r_close(Resource *);//msg_error get_resource_info(resource_name, ResourceInfo *);Selector *r_open_tracks(Resource *, char *track_name, Capabilities *capabilities);/*open the right tracks*/void r_close_tracks(Selector *);/*close all tracks*/ // shawill: XXX do we need it?inline int r_seek(Resource *, long int /*time_sec*/ );/*seeks the resource: mkv, sd ...*/int r_changed(ResourceDescr *);//Selector handling functionsinline Track *r_selected_track(Selector *);// TrackList handling functions// TracksTrack *add_track(Resource *, TrackInfo *, MediaProperties *);void free_track(Track *, Resource *);// Resources and Media descriptionsResourceDescr *r_descr_get(char *root, char *name);// ResourceDescr *r_descr_new(Resource *);// void r_descr_free(ResourceDescr *);/* --- functions implemented in descriptionAPI.c --- *//*! the functions that return pointers do not allocate new memory, simply return* the pointer of the description resource. So, there is no need to free* anything.* The functions that return pointers return NULL if the value is not set.* */inline time_t r_descr_last_change(ResourceDescr *);inline char *r_descr_mrl(ResourceDescr *);inline char *r_descr_twin(ResourceDescr *);inline char *r_descr_multicast(ResourceDescr *);inline char *r_descr_ttl(ResourceDescr *);inline char *r_descr_name(ResourceDescr *);inline char *r_descr_description(ResourceDescr *);inline char *r_descr_descrURI(ResourceDescr *);inline char *r_descr_email(ResourceDescr *);inline char *r_descr_phone(ResourceDescr *);inline sdp_field_list r_descr_sdp_private(ResourceDescr *);MediaDescrListArray r_descr_get_media(ResourceDescr *);inline char *m_descr_name(MediaDescr *);inline MediaType m_descr_type(MediaDescr *);inline sdp_field_list m_descr_sdp_private(MediaDescr *);inline int m_descr_rtp_port(MediaDescr *);inline uint32 m_descr_rtp_pt(MediaDescr *);inline char *m_descr_commons_deed(MediaDescr *);inline char *m_descr_rdf_page(MediaDescr *);inline char *m_descr_title(MediaDescr *);inline char *m_descr_author(MediaDescr *);/*-------------------------------------------*/#endif // __DEMUXER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -