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