1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeINTEL CONFIDENTIAL 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeCopyright 2009 Intel Corporation All Rights Reserved. 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeThe source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission. 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeNo license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef __MIX_BUFFERPOOL_H__ 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define __MIX_BUFFERPOOL_H__ 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <mixparams.h> 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideodef.h" 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixbuffer.h" 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <va/va.h> 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeG_BEGIN_DECLS 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MIX_TYPE_BUFFERPOOL: 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Get type of class. 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_TYPE_BUFFERPOOL (mix_bufferpool_get_type ()) 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MIX_BUFFERPOOL: 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @obj: object to be type-casted. 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_BUFFERPOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_BUFFERPOOL, MixBufferPool)) 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MIX_IS_BUFFERPOOL: 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @obj: an object. 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Checks if the given object is an instance of #MixBufferPool 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_IS_BUFFERPOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_BUFFERPOOL)) 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MIX_BUFFERPOOL_CLASS: 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @klass: class to be type-casted. 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_BUFFERPOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_BUFFERPOOL, MixBufferPoolClass)) 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MIX_IS_BUFFERPOOL_CLASS: 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @klass: a class. 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Checks if the given class is #MixBufferPoolClass 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_IS_BUFFERPOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_BUFFERPOOL)) 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MIX_BUFFERPOOL_GET_CLASS: 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @obj: a #MixBufferPool object. 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Get the class instance of the object. 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_BUFFERPOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_BUFFERPOOL, MixBufferPoolClass)) 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct _MixBufferPool MixBufferPool; 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct _MixBufferPoolClass MixBufferPoolClass; 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MixBufferPool: 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MI-X Video Buffer Pool object 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct _MixBufferPool 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /*< public > */ 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParams parent; 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /*< public > */ 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GSList *free_list; /* list of free buffers */ 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GSList *in_use_list; /* list of buffers in use */ 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gulong free_list_max_size; /* initial size of the free list */ 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gulong high_water_mark; /* most buffers in use at one time */ 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee void *reserved1; 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee void *reserved2; 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee void *reserved3; 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee void *reserved4; 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /*< private > */ 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GMutex *objectlock; 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MixBufferPoolClass: 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* MI-X Video Buffer Pool object class 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct _MixBufferPoolClass 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /*< public > */ 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParamsClass parent_class; 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* class members */ 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}; 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* mix_bufferpool_get_type: 107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @returns: type 108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Get the type of object. 110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 111bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeGType mix_bufferpool_get_type (void); 112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* mix_bufferpool_new: 115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @returns: A newly allocated instance of #MixBufferPool 116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Use this method to create new instance of #MixBufferPool 118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 119bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixBufferPool *mix_bufferpool_new (void); 120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* mix_bufferpool_ref: 122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @mix: object to add reference 123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @returns: the MixBufferPool instance where reference count has been increased. 124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Add reference count. 126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 127bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixBufferPool *mix_bufferpool_ref (MixBufferPool * mix); 128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* mix_bufferpool_unref: 131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* @obj: object to unref. 132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* 133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee* Decrement reference count of the object. 134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define mix_bufferpool_unref(obj) mix_params_unref(MIX_PARAMS(obj)) 136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Class Methods */ 138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 139bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_bufferpool_initialize (MixBufferPool * obj, 140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee guint num_buffers); 141bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_bufferpool_put (MixBufferPool * obj, 142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixBuffer * buffer); 143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 144bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_bufferpool_get (MixBufferPool * obj, 145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixBuffer ** buffer); 146bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_bufferpool_deinitialize (MixBufferPool * obj); 147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 148bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeG_END_DECLS 149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif /* __MIX_BUFFERPOOL_H__ */ 151