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/**
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * SECTION:mixvideoconfigparams
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @short_description: VideoConfig parameters
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * A data object which stores videoconfig specific parameters.
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <string.h>
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideolog.h"
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideoconfigparams.h"
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic GType _mix_videoconfigparams_type = 0;
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MixParamsClass *parent_class = NULL;
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define _do_init { _mix_videoconfigparams_type = g_define_type_id; }
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_videoconfigparams_copy(MixParams * target, const MixParams * src);
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixParams *mix_videoconfigparams_dup(const MixParams * obj);
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_videoconfigparams_equal(MixParams * first, MixParams * second);
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_videoconfigparams_finalize(MixParams * obj);
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeG_DEFINE_TYPE_WITH_CODE (MixVideoConfigParams, mix_videoconfigparams,
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		MIX_TYPE_PARAMS, _do_init);
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_videoconfigparams_init(MixVideoConfigParams * self) {
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/* initialize properties here */
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	self->reserved1 = NULL;
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	self->reserved2 = NULL;
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	self->reserved3 = NULL;
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	self->reserved4 = NULL;
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_videoconfigparams_class_init(MixVideoConfigParamsClass * klass) {
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/* setup static parent class */
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	parent_class = (MixParamsClass *) g_type_class_peek_parent(klass);
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	mixparams_class->finalize = mix_videoconfigparams_finalize;
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	mixparams_class->copy = (MixParamsCopyFunction) mix_videoconfigparams_copy;
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	mixparams_class->dup = (MixParamsDupFunction) mix_videoconfigparams_dup;
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	mixparams_class->equal
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			= (MixParamsEqualFunction) mix_videoconfigparams_equal;
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixVideoConfigParams *
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.leemix_videoconfigparams_new(void) {
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixVideoConfigParams *ret =
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			(MixVideoConfigParams *) g_type_create_instance(
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee					MIX_TYPE_VIDEOCONFIGPARAMS);
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	return ret;
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_videoconfigparams_finalize(MixParams * obj) {
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/* clean up here. */
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/* MixVideoConfigParams *self = MIX_VIDEOCONFIGPARAMS(obj); */
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/* Chain up parent */
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	if (parent_class->finalize) {
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		parent_class->finalize(obj);
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	}
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixVideoConfigParams *
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.leemix_videoconfigparams_ref(MixVideoConfigParams * mix) {
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	return (MixVideoConfigParams *) mix_params_ref(MIX_PARAMS(mix));
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoconfigparams_dup:
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @obj: a #MixVideoConfigParams object
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: a newly allocated duplicate of the object.
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copy duplicate of the object.
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixParams *
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.leemix_videoconfigparams_dup(const MixParams * obj) {
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	MixParams *ret = NULL;
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	if (MIX_IS_VIDEOCONFIGPARAMS(obj)) {
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		MixVideoConfigParams *duplicate = mix_videoconfigparams_new();
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		if (mix_videoconfigparams_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj))) {
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			ret = MIX_PARAMS(duplicate);
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		} else {
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			mix_videoconfigparams_unref(duplicate);
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		}
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	}
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	return ret;
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoconfigparams_copy:
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @target: copy to target
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @src: copy from src
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: boolean indicates if copy is successful.
108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copy instance data from @src to @target.
110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
111bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_videoconfigparams_copy(MixParams * target, const MixParams * src) {
112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	LOG_V( "Begin\n");
114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	if (MIX_IS_VIDEOCONFIGPARAMS(target) && MIX_IS_VIDEOCONFIGPARAMS(src)) {
116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		/* TODO: copy other properties if there's any */
118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		/* Now chainup base class */
120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		if (parent_class->copy) {
121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			LOG_V( "parent_class->copy != NULL\n");
122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			return parent_class->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(
123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee					src));
124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		} else {
125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			LOG_V( "parent_class->copy == NULL\n");
126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			return TRUE;
127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		}
128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	}
129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	LOG_V( "End\n");
131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	return FALSE;
132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_videoconfigparams_:
136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @first: first object to compare
137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @second: seond object to compare
138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: boolean indicates if instance are equal.
139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copy instance data from @src to @target.
141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
142bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_videoconfigparams_equal(MixParams * first, MixParams * second) {
143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	gboolean ret = FALSE;
145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	if (MIX_IS_VIDEOCONFIGPARAMS(first) && MIX_IS_VIDEOCONFIGPARAMS(second)) {
147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		/* chaining up. */
149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		if (klass->equal)
151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			ret = parent_class->equal(first, second);
152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee		else
153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee			ret = TRUE;
154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	}
155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	return ret;
157bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
158