⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 media_memory.h

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 H
字号:
/* *			GPAC - Multimedia Framework C SDK * *			Copyright (c) Jean Le Feuvre 2000-2005 *					All rights reserved * *  This file is part of GPAC / Media terminal sub-project * *  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 _MEDIA_MEMORY_H_#define _MEDIA_MEMORY_H_#ifdef __cplusplusextern "C" {#endif#include <gpac/thread.h>/*compressed media unit*/typedef struct _decoding_buffer {	struct _decoding_buffer *next;	/*decoding time stamp in ms*/	u32 DTS;	/*composition time stamp in ms*/	u32 CTS;	/*random access point flag*/	Bool RAP;	/*amount of padding bits*/	u8 PaddingBits;	u32 dataLength;	char *data;} GF_DBUnit;GF_DBUnit *gf_db_unit_new();void gf_db_unit_del(GF_DBUnit *db);/*composition memory (composition buffer) status*/enum{	/*CB stoped (contains invalid data)*/	CB_STOP = 0,	/*CB playing (contains valid data)*/	CB_PLAY,	/*CB is not playing but contains VALID data (prevents output droping)*/	CB_PAUSE,	/*CB is in buffering stage (internal only)*/	CB_BUFFER,	/*CB is done buffering and waits for data (internal only)*/	CB_BUFFER_DONE,};/*Composition Unit structure*/typedef struct _composition_unit {	/*next and previous buffers. previous is used for temporal scalability*/	struct _composition_unit *next, *prev;	/*TS: composition time stamp in ms*/	u32 TS;	/*this is for audio CU in case the whole CU is not consumed in one shot*/	u32 RenderedLength;	u32 dataLength;	char* data;} GF_CMUnit;/*composition buffer (circular buffer of CUs)*/struct _composition_memory{	/*input is used by the decoder to deliver CUs. 	if temporal scalability is enabled, this is the LAST DELIVERED CU 	otherwise this is the next available CU slot*/	GF_CMUnit *input;	/*output is the next available frme for rendering*/	GF_CMUnit *output;	/*capacity is the number of allocated buffers*/	u32 Capacity;	/*Min is the triggering of the media manager*/	u32 Min;	/*Unit size is the size of each buffer*/	u32 UnitSize;	/*Status of the buffer*/	u32 Status;	/*Number of active units*/	u32 UnitCount;	/*OD manager ruling this CB*/	struct _od_manager *odm;	/*set when EOS is recieved by decoder*/	Bool HasSeenEOS;	/*trick for temporal scalability: this is the last rendered CTS*/	u32 LastRenderedTS;};/*a composition buffer only has fixed-size unit*/GF_CompositionMemory *gf_cm_new(u32 UnitSize, u32 capacity);void gf_cm_del(GF_CompositionMemory *cb);/*re-inits complete cb*/void gf_cm_reinit(GF_CompositionMemory *cb, u32 UnitSize, u32 Capacity);/*locks available input for desired TS (needed for scalability) - return NULL if no input is available (buffer full)*/GF_CMUnit *gf_cm_lock_input(GF_CompositionMemory *cb, u32 TS);/*dispatch data in input. If NbBytes is 0, no data is dispatched. TS is needed for re-orderingof buffers*/void gf_cm_unlock_input(GF_CompositionMemory *cb, u32 TS, u32 NbBytes);/*rewind input of 1 unit - used when doing precise seeking*/void gf_cm_rewind_input(GF_CompositionMemory *cb);/*fetch output buffer, NULL if output is empty*/GF_CMUnit *gf_cm_get_output(GF_CompositionMemory *cb);/*release the output buffer once rendered - if renderedLength is not equal to dataLength theoutput is NOT droped*/void gf_cm_drop_output(GF_CompositionMemory *cb);/*reset the entire memory*/void gf_cm_reset(GF_CompositionMemory *cb);/*resize the buffers*/void gf_cm_resize(GF_CompositionMemory *cb, u32 newCapacity);/*set the status of the buffer. Buffering is done automatically*/void gf_cm_set_status(GF_CompositionMemory *cb, u32 Status);/*return 1 if object is running (clock started), 0 otherwise*/Bool gf_cm_is_running(GF_CompositionMemory *cb);/*signals end of stream*/void gf_cm_set_eos(GF_CompositionMemory *cb);/*returns 1 if end of stream has been reached (eg, signaled and no more data)*/Bool gf_cm_is_eos(GF_CompositionMemory *cb);/*aborts buffering if any*/void gf_cm_abort_buffering(GF_CompositionMemory *cb);#ifdef __cplusplus}#endif#endif	/*_MEDIA_MEMORY_H_*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -