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