1 /*
2 INTEL CONFIDENTIAL
3 Copyright 2009 Intel Corporation All Rights Reserved.
4 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.
5
6 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.
7 */
8
9 /**
10 * SECTION:mixvideoconfigparamsenc_mpeg4
11 * @short_description: VideoConfig parameters
12 *
13 * A data object which stores videoconfig specific parameters.
14 */
15
16 #include "mixvideolog.h"
17 #include "mixvideoconfigparamsenc_mpeg4.h"
18
19 #define MDEBUG
20
21
22 static GType _mix_videoconfigparamsenc_mpeg4_type = 0;
23 static MixVideoConfigParamsEncClass *parent_class = NULL;
24
25 #define _do_init { _mix_videoconfigparamsenc_mpeg4_type = g_define_type_id; }
26
27 gboolean mix_videoconfigparamsenc_mpeg4_copy (MixParams * target,
28 const MixParams * src);
29 MixParams *mix_videoconfigparamsenc_mpeg4_dup (const MixParams * obj);
30 gboolean mix_videoconfigparamsencenc_mpeg4_equal (MixParams * first,
31 MixParams * second);
32 static void mix_videoconfigparamsenc_mpeg4_finalize (MixParams * obj);
33
34 G_DEFINE_TYPE_WITH_CODE (MixVideoConfigParamsEncMPEG4, /* The name of the new type, in Camel case */
35 mix_videoconfigparamsenc_mpeg4, /* The name of the new type in lowercase */
36 MIX_TYPE_VIDEOCONFIGPARAMSENC, /* The GType of the parent type */
37 _do_init);
38
39 void
_mix_videoconfigparamsenc_mpeg4_initialize(void)40 _mix_videoconfigparamsenc_mpeg4_initialize (void)
41 {
42 /* the MixParams types need to be class_ref'd once before it can be
43 * done from multiple threads;
44 * see http://bugzilla.gnome.org/show_bug.cgi?id=304551 */
45 g_type_class_ref (mix_videoconfigparamsenc_mpeg4_get_type ());
46 }
47
48 static void
mix_videoconfigparamsenc_mpeg4_init(MixVideoConfigParamsEncMPEG4 * self)49 mix_videoconfigparamsenc_mpeg4_init (MixVideoConfigParamsEncMPEG4 * self)
50 {
51 /* initialize properties here */
52 /* TODO: initialize properties */
53
54 self->fixed_vop_time_increment = 3;
55 self->profile_and_level_indication = 3;
56 self->disable_deblocking_filter_idc = 0;
57
58 self->reserved1 = NULL;
59 self->reserved2 = NULL;
60 self->reserved3 = NULL;
61 self->reserved4 = NULL;
62 }
63
64 static void
mix_videoconfigparamsenc_mpeg4_class_init(MixVideoConfigParamsEncMPEG4Class * klass)65 mix_videoconfigparamsenc_mpeg4_class_init (MixVideoConfigParamsEncMPEG4Class * klass)
66 {
67 MixVideoConfigParamsEncClass *this_parent_class =
68 MIX_VIDEOCONFIGPARAMSENC_CLASS (klass);
69 MixParamsClass *this_root_class = MIX_PARAMS_CLASS (this_parent_class);
70
71 /* setup static parent class */
72 parent_class =
73 (MixVideoConfigParamsEncClass *) g_type_class_peek_parent (klass);
74
75 this_root_class->finalize = mix_videoconfigparamsenc_mpeg4_finalize;
76 this_root_class->copy =
77 (MixParamsCopyFunction) mix_videoconfigparamsenc_mpeg4_copy;
78 this_root_class->dup =
79 (MixParamsDupFunction) mix_videoconfigparamsenc_mpeg4_dup;
80 this_root_class->equal =
81 (MixParamsEqualFunction) mix_videoconfigparamsencenc_mpeg4_equal;
82 }
83
84 MixVideoConfigParamsEncMPEG4 *
mix_videoconfigparamsenc_mpeg4_new(void)85 mix_videoconfigparamsenc_mpeg4_new (void)
86 {
87 MixVideoConfigParamsEncMPEG4 *ret = (MixVideoConfigParamsEncMPEG4 *)
88 g_type_create_instance (MIX_TYPE_VIDEOCONFIGPARAMSENC_MPEG4);
89
90 return ret;
91 }
92
93 void
mix_videoconfigparamsenc_mpeg4_finalize(MixParams * obj)94 mix_videoconfigparamsenc_mpeg4_finalize (MixParams * obj)
95 {
96 /* MixVideoConfigParamsEncMPEG4 *this_obj = MIX_VIDEOCONFIGPARAMSENC_MPEG4 (obj); */
97 MixParamsClass *root_class = MIX_PARAMS_CLASS (parent_class);
98
99 /* TODO: cleanup resources allocated */
100
101 /* Chain up parent */
102
103 if (root_class->finalize)
104 {
105 root_class->finalize (obj);
106 }
107 }
108
109 MixVideoConfigParamsEncMPEG4
mix_videoconfigparamsenc_mpeg4_ref(MixVideoConfigParamsEncMPEG4 * mix)110 * mix_videoconfigparamsenc_mpeg4_ref (MixVideoConfigParamsEncMPEG4 * mix)
111 {
112 return (MixVideoConfigParamsEncMPEG4 *) mix_params_ref (MIX_PARAMS (mix));
113 }
114
115 /**
116 * mix_videoconfigparamsenc_mpeg4_dup:
117 * @obj: a #MixVideoConfigParams object
118 * @returns: a newly allocated duplicate of the object.
119 *
120 * Copy duplicate of the object.
121 */
122 MixParams *
mix_videoconfigparamsenc_mpeg4_dup(const MixParams * obj)123 mix_videoconfigparamsenc_mpeg4_dup (const MixParams * obj)
124 {
125 MixParams *ret = NULL;
126
127 if (MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4 (obj))
128 {
129 MixVideoConfigParamsEncMPEG4 *duplicate = mix_videoconfigparamsenc_mpeg4_new ();
130 if (mix_videoconfigparamsenc_mpeg4_copy
131 (MIX_PARAMS (duplicate), MIX_PARAMS (obj)))
132 {
133 ret = MIX_PARAMS (duplicate);
134 }
135 else
136 {
137 mix_videoconfigparamsenc_mpeg4_unref (duplicate);
138 }
139 }
140 return ret;
141 }
142
143 /**
144 * mix_videoconfigparamsenc_mpeg4_copy:
145 * @target: copy to target
146 * @src: copy from src
147 * @returns: boolean indicates if copy is successful.
148 *
149 * Copy instance data from @src to @target.
150 */
151 gboolean
mix_videoconfigparamsenc_mpeg4_copy(MixParams * target,const MixParams * src)152 mix_videoconfigparamsenc_mpeg4_copy (MixParams * target, const MixParams * src)
153 {
154 MixVideoConfigParamsEncMPEG4 *this_target, *this_src;
155 MixParamsClass *root_class;
156
157 LOG_V( "Begin\n");
158
159 if (MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4 (target)
160 && MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4 (src))
161 {
162 // Cast the base object to this child object
163 this_target = MIX_VIDEOCONFIGPARAMSENC_MPEG4 (target);
164 this_src = MIX_VIDEOCONFIGPARAMSENC_MPEG4 (src);
165
166 //add properties
167 this_target->profile_and_level_indication= this_src->profile_and_level_indication;
168 this_target->fixed_vop_time_increment= this_src->fixed_vop_time_increment;
169 this_target->disable_deblocking_filter_idc = this_src->disable_deblocking_filter_idc;
170
171 // Now chainup base class
172 root_class = MIX_PARAMS_CLASS (parent_class);
173
174 if (root_class->copy)
175 {
176 return root_class->copy (MIX_PARAMS_CAST (target),
177 MIX_PARAMS_CAST (src));
178 }
179 else
180 {
181 return TRUE;
182 }
183 }
184 return FALSE;
185 }
186
187 /**
188 * mix_videoconfigparamsenc_mpeg4:
189 * @first: first object to compare
190 * @second: seond object to compare
191 * @returns: boolean indicates if instance are equal.
192 *
193 * Copy instance data from @src to @target.
194 */
195 gboolean
mix_videoconfigparamsencenc_mpeg4_equal(MixParams * first,MixParams * second)196 mix_videoconfigparamsencenc_mpeg4_equal (MixParams * first, MixParams * second)
197 {
198 gboolean ret = FALSE;
199 MixVideoConfigParamsEncMPEG4 *this_first, *this_second;
200
201 if (MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4 (first)
202 && MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4 (second))
203 {
204 // Cast the base object to this child object
205
206 this_first = MIX_VIDEOCONFIGPARAMSENC_MPEG4 (first);
207 this_second = MIX_VIDEOCONFIGPARAMSENC_MPEG4 (second);
208
209 if (this_first->profile_and_level_indication!= this_second->profile_and_level_indication) {
210 goto not_equal;
211 }
212
213 if (this_first->fixed_vop_time_increment!= this_second->fixed_vop_time_increment) {
214 goto not_equal;
215 }
216
217 if (this_first->disable_deblocking_filter_idc != this_second->disable_deblocking_filter_idc) {
218 goto not_equal;
219 }
220
221
222 ret = TRUE;
223
224 not_equal:
225
226 if (ret != TRUE) {
227 return ret;
228 }
229
230 /* TODO: add comparison for properties */
231 {
232 // members within this scope equal. chaining up.
233 MixParamsClass *klass = MIX_PARAMS_CLASS (parent_class);
234 if (klass->equal)
235 {
236 ret = klass->equal (first, second);
237 }
238 else
239 {
240 ret = TRUE;
241 }
242 }
243 }
244
245 return ret;
246 }
247
248 /* TODO: Add getters and setters for properties if any */
249
250 #define MIX_VIDEOCONFIGPARAMSENC_MPEG4_SETTER_CHECK_INPUT(obj) \
251 if(!obj) return MIX_RESULT_NULL_PTR; \
252 if(!MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4(obj)) return MIX_RESULT_FAIL; \
253
254 #define MIX_VIDEOCONFIGPARAMSENC_MPEG4_GETTER_CHECK_INPUT(obj, prop) \
255 if(!obj || !prop) return MIX_RESULT_NULL_PTR; \
256 if(!MIX_IS_VIDEOCONFIGPARAMSENC_MPEG4(obj)) return MIX_RESULT_FAIL; \
257
258
mix_videoconfigparamsenc_mpeg4_set_profile_level(MixVideoConfigParamsEncMPEG4 * obj,guchar profile_and_level_indication)259 MIX_RESULT mix_videoconfigparamsenc_mpeg4_set_profile_level (MixVideoConfigParamsEncMPEG4 * obj,
260 guchar profile_and_level_indication) {
261 MIX_VIDEOCONFIGPARAMSENC_MPEG4_SETTER_CHECK_INPUT (obj);
262 obj->profile_and_level_indication = profile_and_level_indication;
263 return MIX_RESULT_SUCCESS;
264 }
265
mix_videoconfigparamsenc_mpeg4_get_profile_level(MixVideoConfigParamsEncMPEG4 * obj,guchar * profile_and_level_indication)266 MIX_RESULT mix_videoconfigparamsenc_mpeg4_get_profile_level (MixVideoConfigParamsEncMPEG4 * obj,
267 guchar * profile_and_level_indication) {
268 MIX_VIDEOCONFIGPARAMSENC_MPEG4_GETTER_CHECK_INPUT (obj, profile_and_level_indication);
269 *profile_and_level_indication = obj->profile_and_level_indication;
270 return MIX_RESULT_SUCCESS;
271 }
272
mix_videoconfigparamsenc_mpeg4_set_fixed_vti(MixVideoConfigParamsEncMPEG4 * obj,guint fixed_vop_time_increment)273 MIX_RESULT mix_videoconfigparamsenc_mpeg4_set_fixed_vti (MixVideoConfigParamsEncMPEG4 * obj,
274 guint fixed_vop_time_increment) {
275 MIX_VIDEOCONFIGPARAMSENC_MPEG4_SETTER_CHECK_INPUT (obj);
276 obj->fixed_vop_time_increment = fixed_vop_time_increment;
277 return MIX_RESULT_SUCCESS;
278 }
279
mix_videoconfigparamsenc_mpeg4_get_fixed_vti(MixVideoConfigParamsEncMPEG4 * obj,guint * fixed_vop_time_increment)280 MIX_RESULT mix_videoconfigparamsenc_mpeg4_get_fixed_vti (MixVideoConfigParamsEncMPEG4 * obj,
281 guint * fixed_vop_time_increment) {
282 MIX_VIDEOCONFIGPARAMSENC_MPEG4_GETTER_CHECK_INPUT (obj, fixed_vop_time_increment);
283 *fixed_vop_time_increment = obj->fixed_vop_time_increment;
284 return MIX_RESULT_SUCCESS;
285 }
286
mix_videoconfigparamsenc_mpeg4_set_dlk(MixVideoConfigParamsEncMPEG4 * obj,guint disable_deblocking_filter_idc)287 MIX_RESULT mix_videoconfigparamsenc_mpeg4_set_dlk (MixVideoConfigParamsEncMPEG4 * obj,
288 guint disable_deblocking_filter_idc) {
289 MIX_VIDEOCONFIGPARAMSENC_MPEG4_SETTER_CHECK_INPUT (obj);
290 obj->disable_deblocking_filter_idc = disable_deblocking_filter_idc;
291 return MIX_RESULT_SUCCESS;
292 }
293
mix_videoconfigparamsenc_mpeg4_get_dlk(MixVideoConfigParamsEncMPEG4 * obj,guint * disable_deblocking_filter_idc)294 MIX_RESULT mix_videoconfigparamsenc_mpeg4_get_dlk (MixVideoConfigParamsEncMPEG4 * obj,
295 guint * disable_deblocking_filter_idc) {
296 MIX_VIDEOCONFIGPARAMSENC_MPEG4_GETTER_CHECK_INPUT (obj, disable_deblocking_filter_idc);
297 *disable_deblocking_filter_idc = obj->disable_deblocking_filter_idc;
298 return MIX_RESULT_SUCCESS;
299 }
300
301