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