1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams INTEL CONFIDENTIAL 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams Copyright 2009 Intel Corporation All Rights Reserved. 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 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. 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 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. 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef __MIX_VIDEOFORMAT_H__ 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define __MIX_VIDEOFORMAT_H__ 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include <va/va.h> 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include <glib-object.h> 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "vbp_loader.h" 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "mixvideodef.h" 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "mixdrmparams.h" 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "mixvideoconfigparamsdec.h" 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "mixvideodecodeparams.h" 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "mixvideoframe.h" 20a5577808737a394bdb156fbeb80018d0a4d8438dJason Sams#include "mixframemanager.h" 2112b14ae9fa34f4fd0bf21a2a4ac95a4864248fe9Jason Sams#include "mixsurfacepool.h" 22a5577808737a394bdb156fbeb80018d0a4d8438dJason Sams#include "mixbuffer.h" 23fcd3192ebff8ab58d841836b7e94361d0998338cJason Sams#include "mixbufferpool.h" 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "mixvideoformatqueue.h" 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// Redefine the Handle defined in vbp_loader.h 27a89371c6f144b9049efe7689105feee2c4a38384Jason Sams#define VBPhandle Handle 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Type macros. 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define MIX_TYPE_VIDEOFORMAT (mix_videoformat_get_type ()) 33b5909ce06dd10dcb5ac715572a05b2d225b77c98Jason Sams#define MIX_VIDEOFORMAT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_VIDEOFORMAT, MixVideoFormat)) 34d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk#define MIX_IS_VIDEOFORMAT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_VIDEOFORMAT)) 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define MIX_VIDEOFORMAT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_VIDEOFORMAT, MixVideoFormatClass)) 36ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams#define MIX_IS_VIDEOFORMAT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_VIDEOFORMAT)) 375fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams#define MIX_VIDEOFORMAT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_VIDEOFORMAT, MixVideoFormatClass)) 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 39c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samstypedef struct _MixVideoFormat MixVideoFormat; 40c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samstypedef struct _MixVideoFormatClass MixVideoFormatClass; 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* vmethods typedef */ 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Samstypedef MIX_RESULT (*MixVideoFmtGetCapsFunc)(MixVideoFormat *mix, GString *msg); 459b97c2906aed2b6dea9e0824f91f27c08d3690a7Mathias Agopiantypedef MIX_RESULT (*MixVideoFmtInitializeFunc)(MixVideoFormat *mix, 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixVideoConfigParamsDec * config_params, 47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixFrameManager * frame_mgr, 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixBufferPool * input_buf_pool, 49d4c25e3c197bc79c8508b76b20611b67ef883138Mathias Agopian MixSurfacePool ** surface_pool, 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams VADisplay va_display); 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Samstypedef MIX_RESULT (*MixVideoFmtDecodeFunc)(MixVideoFormat *mix, 52605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams MixBuffer * bufin[], gint bufincnt, 53605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams MixVideoDecodeParams * decode_params); 54605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Samstypedef MIX_RESULT (*MixVideoFmtFlushFunc)(MixVideoFormat *mix); 55605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Samstypedef MIX_RESULT (*MixVideoFmtEndOfStreamFunc)(MixVideoFormat *mix); 56605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Samstypedef MIX_RESULT (*MixVideoFmtDeinitializeFunc)(MixVideoFormat *mix); 57605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams 58605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Samsstruct _MixVideoFormat { 59605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams /*< public > */ 60605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams GObject parent; 61605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams 62605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams /*< public > */ 63605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams 64605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams /*< private > */ 65605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams GMutex *objectlock; 66605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams gboolean initialized; 67605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams MixFrameManager *framemgr; 68605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams MixSurfacePool *surfacepool; 69605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams VADisplay va_display; 70cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams VAContextID va_context; 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams VAConfigID va_config; 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams VASurfaceID *va_surfaces; 734820e8bb83b1f78e6232ebe853221f737da2a1eaJason Sams guint va_num_surfaces; 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams VBPhandle parser_handle; 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams GString *mime_type; 76e57691037aea219562ac686429b4b98202aab7bcJason Sams guint frame_rate_num; 77fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams guint frame_rate_denom; 7833b6e3b91329080e5cdd0b8fdbcd3e6a906032aeJason Sams guint picture_width; 79fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams guint picture_height; 80fb03a22ad2adadc1ff50a8b50d43ad7fcc3fa6edJason Sams gboolean parse_in_progress; 81e57691037aea219562ac686429b4b98202aab7bcJason Sams gboolean discontinuity_frame_in_progress; 82e57691037aea219562ac686429b4b98202aab7bcJason Sams guint64 current_timestamp; 83e57691037aea219562ac686429b4b98202aab7bcJason Sams MixBufferPool *inputbufpool; 84e57691037aea219562ac686429b4b98202aab7bcJason Sams GQueue *inputbufqueue; 85605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams}; 86e57691037aea219562ac686429b4b98202aab7bcJason Sams 877bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams/** 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * MixVideoFormatClass: 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * MI-X Video object class 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsstruct _MixVideoFormatClass { 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams /*< public > */ 94ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams GObjectClass parent_class; 955fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams /* class members */ 9762bc1db27ba17f7eed0a6dfb639da7326753b268Jason Sams 98c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams /*< public > */ 99d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk MixVideoFmtGetCapsFunc getcaps; 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixVideoFmtInitializeFunc initialize; 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixVideoFmtDecodeFunc decode; 102c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams MixVideoFmtFlushFunc flush; 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixVideoFmtEndOfStreamFunc eos; 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams MixVideoFmtDeinitializeFunc deinitialize; 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 1065fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams 107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/** 108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * mix_videoformat_get_type: 109ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams * @returns: type 110d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk * 111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Get the type of object. 112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 113326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsGType mix_videoformat_get_type(void); 114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 115ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams/** 1165fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * mix_videoformat_new: 117c9d43db4d216b01b13aebfdb31d5615909591b33Jason Sams * @returns: A newly allocated instance of #MixVideoFormat 118d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk * 119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Use this method to create new instance of #MixVideoFormat 120a2cf755a28a1e7ffff2955df656d714f40e4d715Jason Sams */ 121889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex SakhartchoukMixVideoFormat *mix_videoformat_new(void); 122cf4c7c9b2f513be77a5b9853319ca82ac2b128edJason Sams 123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/** 12486f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams * mix_videoformat_ref: 12586f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams * @mix: object to add reference 1261c769c3d0e5f08e78ecdb4508c6bc69fcb69bfa8Dianne Hackborn * @returns: the MixVideoFormat instance where reference count has been increased. 127158324456b8dbf40f684dd0a4af3493b9549f3f5Jason Sams * 12886f1b23aaaf9b8822a009d8c3e585e46768abb6aJason Sams * Add reference count. 129a4a54e42fc710a62b47cbcb9d64c34a190429d9eJason Sams */ 130a0a1b6fbece2eb8d72d788422ab3e5f58d5a9216Jason SamsMixVideoFormat *mix_videoformat_ref(MixVideoFormat * mix); 1318ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 1328c401effb0837155fc39ca0364f57a882d127d38Jason Sams/** 1338c401effb0837155fc39ca0364f57a882d127d38Jason Sams * mix_videoformat_unref: 134c61346b91434307c5003029017b54ce9c49112beJason Sams * @obj: object to unref. 1358c401effb0837155fc39ca0364f57a882d127d38Jason Sams * 1368c401effb0837155fc39ca0364f57a882d127d38Jason Sams * Decrement reference count of the object. 1378c401effb0837155fc39ca0364f57a882d127d38Jason Sams */ 1388c401effb0837155fc39ca0364f57a882d127d38Jason Sams#define mix_videoformat_unref(obj) g_object_unref (G_OBJECT(obj)) 1398ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 1408ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams/* Class Methods */ 1418ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 1428ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason SamsMIX_RESULT mix_videofmt_getcaps(MixVideoFormat *mix, GString *msg); 1438ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams 1448ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason SamsMIX_RESULT mix_videofmt_initialize(MixVideoFormat *mix, 145ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams MixVideoConfigParamsDec * config_params, 1468ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams MixFrameManager * frame_mgr, 1478ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams MixBufferPool * input_buf_pool, 1485fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams MixSurfacePool ** surface_pool, 1495fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams VADisplay va_display); 1505fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams 151d3e0ad43dc758c409fc23d1893dab67b18520c24Alex SakhartchoukMIX_RESULT mix_videofmt_decode(MixVideoFormat *mix, MixBuffer * bufin[], 152d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk gint bufincnt, MixVideoDecodeParams * decode_params); 153d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 1548ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason SamsMIX_RESULT mix_videofmt_flush(MixVideoFormat *mix); 155771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams 156771565f47fc44608444c00aa8fa3bda769ceaeceJason SamsMIX_RESULT mix_videofmt_eos(MixVideoFormat *mix); 157e579df42e85d9e00f53c42ef1b78dbd209dba989Jason Sams 158fcd3192ebff8ab58d841836b7e94361d0998338cJason SamsMIX_RESULT mix_videofmt_deinitialize(MixVideoFormat *mix); 159fcd3192ebff8ab58d841836b7e94361d0998338cJason Sams 160fcd3192ebff8ab58d841836b7e94361d0998338cJason Sams#endif /* __MIX_VIDEOFORMAT_H__ */ 16124371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams