1/*
2 INTEL CONFIDENTIAL
3 Copyright 2009 Intel Corporation All Rights Reserved.
4 The 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.
5
6 No 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.
7 */
8
9#ifndef __MIX_VIDEO_H__
10#define __MIX_VIDEO_H__
11
12#include <glib-object.h>
13
14#include "mixdrmparams.h"
15#include "mixvideoinitparams.h"
16#include "mixvideoconfigparamsdec.h"
17#include "mixvideoconfigparamsenc.h"
18#include "mixvideodecodeparams.h"
19#include "mixvideoencodeparams.h"
20#include "mixvideorenderparams.h"
21#include "mixvideocaps.h"
22#include "mixbuffer.h"
23
24/*
25 * Type macros.
26 */
27#define MIX_TYPE_VIDEO                  (mix_video_get_type ())
28#define MIX_VIDEO(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_VIDEO, MixVideo))
29#define MIX_IS_VIDEO(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_VIDEO))
30#define MIX_VIDEO_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_VIDEO, MixVideoClass))
31#define MIX_IS_VIDEO_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_VIDEO))
32#define MIX_VIDEO_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_VIDEO, MixVideoClass))
33
34typedef struct _MixVideo MixVideo;
35typedef struct _MixVideoClass MixVideoClass;
36
37/*
38 * Virtual methods typedef
39 */
40
41typedef MIX_RESULT (*MixVideoGetVersionFunc)(MixVideo * mix, guint * major,
42		guint * minor);
43
44typedef MIX_RESULT (*MixVideoInitializeFunc)(MixVideo * mix, MixCodecMode mode,
45		MixVideoInitParams * init_params, MixDrmParams * drm_init_params);
46
47typedef MIX_RESULT (*MixVideoDeinitializeFunc)(MixVideo * mix);
48
49typedef MIX_RESULT (*MixVideoConfigureFunc)(MixVideo * mix,
50		MixVideoConfigParams * config_params,
51		MixDrmParams * drm_config_params);
52
53typedef MIX_RESULT (*MixVideoGetConfigFunc)(MixVideo * mix,
54		MixVideoConfigParams ** config_params);
55
56typedef MIX_RESULT (*MixVideoDecodeFunc)(MixVideo * mix, MixBuffer * bufin[],
57		gint bufincnt, MixVideoDecodeParams * decode_params);
58
59typedef MIX_RESULT (*MixVideoGetFrameFunc)(MixVideo * mix,
60		MixVideoFrame ** frame);
61
62typedef MIX_RESULT (*MixVideoReleaseFrameFunc)(MixVideo * mix,
63		MixVideoFrame * frame);
64
65typedef MIX_RESULT (*MixVideoRenderFunc)(MixVideo * mix,
66		MixVideoRenderParams * render_params, MixVideoFrame *frame);
67
68typedef MIX_RESULT (*MixVideoEncodeFunc)(MixVideo * mix, MixBuffer * bufin[],
69		gint bufincnt, MixIOVec * iovout[], gint iovoutcnt,
70		MixVideoEncodeParams * encode_params);
71
72typedef MIX_RESULT (*MixVideoFlushFunc)(MixVideo * mix);
73
74typedef MIX_RESULT (*MixVideoEOSFunc)(MixVideo * mix);
75
76typedef MIX_RESULT (*MixVideoGetStateFunc)(MixVideo * mix, MixState * state);
77
78typedef MIX_RESULT
79(*MixVideoGetMixBufferFunc)(MixVideo * mix, MixBuffer ** buf);
80
81typedef MIX_RESULT (*MixVideoReleaseMixBufferFunc)(MixVideo * mix,
82		MixBuffer * buf);
83
84typedef MIX_RESULT (*MixVideoGetMaxCodedBufferSizeFunc) (MixVideo * mix,
85	      guint *max_size);
86
87/**
88 * MixVideo:
89 * @parent: Parent object.
90 * @streamState: Current state of the stream
91 * @decodeMode: Current decode mode of the device. This value is valid only when @codingMode equals #MIX_CODING_ENCODE.
92 * @encoding: <comment>TBD...</comment>
93 *
94 * MI-X Video object
95 */
96struct _MixVideo {
97	/*< public > */
98	GObject parent;
99
100	/*< public > */
101
102	/*< private > */
103	gpointer context;
104};
105
106/**
107 * MixVideoClass:
108 *
109 * MI-X Video object class
110 */
111struct _MixVideoClass {
112	/*< public > */
113	GObjectClass parent_class;
114
115	/* class members */
116
117	MixVideoGetVersionFunc get_version_func;
118	MixVideoInitializeFunc initialize_func;
119	MixVideoDeinitializeFunc deinitialize_func;
120	MixVideoConfigureFunc configure_func;
121	MixVideoGetConfigFunc get_config_func;
122	MixVideoDecodeFunc decode_func;
123	MixVideoGetFrameFunc get_frame_func;
124	MixVideoReleaseFrameFunc release_frame_func;
125	MixVideoRenderFunc render_func;
126	MixVideoEncodeFunc encode_func;
127	MixVideoFlushFunc flush_func;
128	MixVideoEOSFunc eos_func;
129	MixVideoGetStateFunc get_state_func;
130	MixVideoGetMixBufferFunc get_mix_buffer_func;
131	MixVideoReleaseMixBufferFunc release_mix_buffer_func;
132	MixVideoGetMaxCodedBufferSizeFunc get_max_coded_buffer_size_func;
133};
134
135/**
136 * mix_video_get_type:
137 * @returns: type
138 *
139 * Get the type of object.
140 */
141GType mix_video_get_type(void);
142
143/**
144 * mix_video_new:
145 * @returns: A newly allocated instance of #MixVideo
146 *
147 * Use this method to create new instance of #MixVideo
148 */
149MixVideo *mix_video_new(void);
150
151/**
152 * mix_video_ref:
153 * @mix: object to add reference
154 * @returns: the MixVideo instance where reference count has been increased.
155 *
156 * Add reference count.
157 */
158MixVideo *mix_video_ref(MixVideo * mix);
159
160/**
161 * mix_video_unref:
162 * @obj: object to unref.
163 *
164 * Decrement reference count of the object.
165 */
166#define mix_video_unref(obj) g_object_unref (G_OBJECT(obj))
167
168/* Class Methods */
169
170MIX_RESULT mix_video_get_version(MixVideo * mix, guint * major, guint * minor);
171
172MIX_RESULT mix_video_initialize(MixVideo * mix, MixCodecMode mode,
173		MixVideoInitParams * init_params, MixDrmParams * drm_init_params);
174
175MIX_RESULT mix_video_deinitialize(MixVideo * mix);
176
177MIX_RESULT mix_video_configure(MixVideo * mix,
178		MixVideoConfigParams * config_params,
179		MixDrmParams * drm_config_params);
180
181MIX_RESULT mix_video_get_config(MixVideo * mix,
182		MixVideoConfigParams ** config_params);
183
184MIX_RESULT mix_video_decode(MixVideo * mix, MixBuffer * bufin[], gint bufincnt,
185		MixVideoDecodeParams * decode_params);
186
187MIX_RESULT mix_video_get_frame(MixVideo * mix, MixVideoFrame ** frame);
188
189MIX_RESULT mix_video_release_frame(MixVideo * mix, MixVideoFrame * frame);
190
191MIX_RESULT mix_video_render(MixVideo * mix,
192		MixVideoRenderParams * render_params, MixVideoFrame *frame);
193
194MIX_RESULT mix_video_encode(MixVideo * mix, MixBuffer * bufin[], gint bufincnt,
195		MixIOVec * iovout[], gint iovoutcnt,
196		MixVideoEncodeParams * encode_params);
197
198MIX_RESULT mix_video_flush(MixVideo * mix);
199
200MIX_RESULT mix_video_eos(MixVideo * mix);
201
202MIX_RESULT mix_video_get_state(MixVideo * mix, MixState * state);
203
204MIX_RESULT mix_video_get_mixbuffer(MixVideo * mix, MixBuffer ** buf);
205
206MIX_RESULT mix_video_release_mixbuffer(MixVideo * mix, MixBuffer * buf);
207
208#endif /* __MIX_VIDEO_H__ */
209