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_VIDEOFORMAT_MP42_H__
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define __MIX_VIDEOFORMAT_MP42_H__
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideoformat.h"
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideoframe_private.h"
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//Note: this is only a max limit.  Real number of surfaces allocated is calculated in mix_videoformat_mp42_initialize()
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_VIDEO_MP42_SURFACE_NUM	8
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Type macros.
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_TYPE_VIDEOFORMAT_MP42                  (mix_videoformat_mp42_get_type ())
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_VIDEOFORMAT_MP42(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIX_TYPE_VIDEOFORMAT_MP42, MixVideoFormat_MP42))
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_IS_VIDEOFORMAT_MP42(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIX_TYPE_VIDEOFORMAT_MP42))
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_VIDEOFORMAT_MP42_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MIX_TYPE_VIDEOFORMAT_MP42, MixVideoFormat_MP42Class))
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_IS_VIDEOFORMAT_MP42_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MIX_TYPE_VIDEOFORMAT_MP42))
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define MIX_VIDEOFORMAT_MP42_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MIX_TYPE_VIDEOFORMAT_MP42, MixVideoFormat_MP42Class))
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct _MixVideoFormat_MP42 MixVideoFormat_MP42;
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.leetypedef struct _MixVideoFormat_MP42Class MixVideoFormat_MP42Class;
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct _MixVideoFormat_MP42 {
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/*< public > */
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixVideoFormat parent;
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/*< public > */
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/*< private > */
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixVideoFrame * reference_frames[2];
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixVideoFrame * last_frame;
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	gint last_vop_coding_type;
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	GQueue *packed_stream_queue;
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * MixVideoFormat_MP42Class:
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * MI-X Video object class
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct _MixVideoFormat_MP42Class {
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/*< public > */
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixVideoFormatClass parent_class;
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* class members */
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*< public > */
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoformat_mp42_get_type:
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: type
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Get the type of object.
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeGType mix_videoformat_mp42_get_type(void);
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoformat_mp42_new:
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: A newly allocated instance of #MixVideoFormat_MP42
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Use this method to create new instance of #MixVideoFormat_MP42
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixVideoFormat_MP42 *mix_videoformat_mp42_new(void);
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoformat_mp42_ref:
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @mix: object to add reference
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: the MixVideoFormat_MP42 instance where reference count has been increased.
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Add reference count.
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixVideoFormat_MP42 *mix_videoformat_mp42_ref(MixVideoFormat_MP42 * mix);
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoformat_mp42_unref:
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @obj: object to unref.
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Decrement reference count of the object.
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define mix_videoformat_mp42_unref(obj) g_object_unref (G_OBJECT(obj))
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Class Methods */
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* MP42 vmethods */
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_getcaps(MixVideoFormat *mix, GString *msg);
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_initialize(MixVideoFormat *mix,
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		MixVideoConfigParamsDec * config_params, MixFrameManager * frame_mgr,
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		MixBufferPool * input_buf_pool, MixSurfacePool ** surface_pool,
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		VADisplay va_display);
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_decode(MixVideoFormat *mix, MixBuffer * bufin[],
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		gint bufincnt, MixVideoDecodeParams * decode_params);
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_flush(MixVideoFormat *mix);
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_eos(MixVideoFormat *mix);
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_deinitialize(MixVideoFormat *mix);
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Local Methods */
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
108bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_handle_ref_frames(MixVideoFormat *mix,
109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		enum _picture_type frame_type, MixVideoFrame * current_frame);
110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
111bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_process_decode(MixVideoFormat *mix,
112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		vbp_data_mp42 *data, guint64 timestamp, gboolean discontinuity);
113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
114bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmt_mp42_release_input_buffers(MixVideoFormat *mix,
115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		guint64 timestamp);
116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif /* __MIX_VIDEOFORMAT_MP42_H__ */
118