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