1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef VIDEO_EDiTOR_JAVA_H
18#define VIDEO_EDiTOR_JAVA_H
19
20#include <jni.h>
21#include <JNIHelp.h>
22
23/**
24 ************************************************************************
25 * @file        VideoEditorJava.h
26 * @brief       Interface for JNI methods that have specific access to
27 *              class, objects and method Ids defined in Java layer
28 ************************************************************************
29*/
30
31extern "C" {
32#include <M4OSA_Types.h>
33#include <M4OSA_Error.h>
34}
35
36#define VIDEOEDIT_JAVA_CONSTANT_INIT(m_name, m_c)                           \
37            { m_name,                                                       \
38              0,                                                            \
39              m_c,                                                          \
40              #m_c }
41
42#define VIDEOEDIT_JAVA_DEFINE_CONSTANTS(m_class)                            \
43static                                                                      \
44VideoEditJava_Constant g##m_class##Constants [] =
45
46#define VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(                               \
47                m_class,                                                    \
48                m_name,                                                     \
49                m_unknownName,                                              \
50                m_unknownString)                                            \
51                                                                            \
52static VideoEditJava_ConstantsClass g##m_class##ConstantsClass =            \
53{       m_name,                                                             \
54        &g##m_class##Constants[0],                                          \
55        (sizeof(g##m_class##Constants) / sizeof(VideoEditJava_Constant)),   \
56        false                                                               \
57};                                                                          \
58                                                                            \
59                                                                            \
60void videoEditJava_init##m_class##Constants(                                \
61                bool*                               pResult,                \
62                JNIEnv*                             pEnv)                   \
63{                                                                           \
64    videoEditJava_initConstantClass(                                        \
65                pResult,                                                    \
66                pEnv,                                                       \
67                &g##m_class##ConstantsClass);                               \
68}                                                                           \
69                                                                            \
70const char* videoEditJava_get##m_class##Name(                               \
71                int                                 value)                  \
72{                                                                           \
73    return(videoEditJava_getConstantClassName(                              \
74                &g##m_class##ConstantsClass,                                \
75                value,                                                      \
76                m_unknownName));                                            \
77}                                                                           \
78                                                                            \
79const char* videoEditJava_get##m_class##String(                             \
80                int                                 value)                  \
81{                                                                           \
82    return(videoEditJava_getConstantClassString(                            \
83                &g##m_class##ConstantsClass,                                \
84                value,                                                      \
85                m_unknownString));                                          \
86}                                                                           \
87                                                                            \
88int                                                                         \
89videoEditJava_get##m_class##JavaToC(                                        \
90                bool*                               pResult,                \
91                int                                 value)                  \
92{                                                                           \
93    return(videoEditJava_getConstantClassJavaToC(                           \
94                pResult,                                                    \
95                &g##m_class##ConstantsClass,                                \
96                value));                                                    \
97}                                                                           \
98                                                                            \
99int                                                                         \
100videoEditJava_get##m_class##JavaToC(                                        \
101                bool*                               pResult,                \
102                int                                 value,                  \
103                int                                 unknown)                \
104{                                                                           \
105    return(videoEditJava_getConstantClassJavaToC(                           \
106                pResult,                                                    \
107                &g##m_class##ConstantsClass,                                \
108                value,                                                      \
109                unknown));                                                  \
110}                                                                           \
111                                                                            \
112int                                                                         \
113videoEditJava_get##m_class##CToJava(                                        \
114                        int                                 value)          \
115{                                                                           \
116    return(videoEditJava_getConstantClassCToJava(                           \
117                &g##m_class##ConstantsClass,                                \
118                value));                                                    \
119}                                                                           \
120                                                                            \
121int                                                                         \
122videoEditJava_get##m_class##CToJava(                                        \
123                int                                 value,                  \
124                int                                 unknown)                \
125{                                                                           \
126    return(videoEditJava_getConstantClassCToJava(                           \
127                &g##m_class##ConstantsClass,                                \
128                value,                                                      \
129                unknown));                                                  \
130}
131
132
133#define VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(m_class)                       \
134void                                                                        \
135videoEditJava_init##m_class##Constants(                                     \
136                bool*                               pResult,                \
137                JNIEnv*                             pEnv);                  \
138                                                                            \
139const char*                                                                 \
140videoEditJava_get##m_class##Name(                                           \
141                int                                 value);                 \
142                                                                            \
143const char*                                                                 \
144videoEditJava_get##m_class##String(                                         \
145                int                                 value);                 \
146                                                                            \
147int                                                                         \
148videoEditJava_get##m_class##JavaToC(                                        \
149                bool*                               pResult,                \
150                int                                 value,                  \
151                int                                 unknown);               \
152                                                                            \
153int                                                                         \
154videoEditJava_get##m_class##JavaToC(                                        \
155                bool*                               pResult,                \
156                int                                 value);                 \
157                                                                            \
158int                                                                         \
159videoEditJava_get##m_class##CToJava(                                        \
160                int                                 value);                 \
161                                                                            \
162int                                                                         \
163videoEditJava_get##m_class##CToJava(                                        \
164                int                                 value,                  \
165                int                                 unknown);
166
167#define VIDEOEDIT_JAVA_FIELD_INIT(m_name, m_type)                           \
168    { m_name,                                                               \
169      m_type,                                                               \
170      NULL }
171
172#define VIDEOEDIT_JAVA_DEFINE_FIELDS(m_class)                               \
173static                                                                      \
174VideoEditJava_Field g##m_class##Fields [] =
175
176#define VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(m_class, m_name)                  \
177static VideoEditJava_FieldsClass g##m_class##FieldsClass =                  \
178    { m_name,                                                               \
179      &g##m_class##Fields[0],                                               \
180      (sizeof(g##m_class##Fields) / sizeof(VideoEditJava_Field)),           \
181      false };                                                              \
182                                                                            \
183void                                                                        \
184videoEditJava_init##m_class##Fields(                                        \
185                bool*                               pResult,                \
186                JNIEnv*                             pEnv)                   \
187{                                                                           \
188    videoEditJava_initFieldClass(                                           \
189                pResult,                                                    \
190                pEnv,                                                       \
191                &g##m_class##FieldsClass);                                  \
192}                                                                           \
193                                                                            \
194void                                                                        \
195videoEditJava_get##m_class##Class(                                          \
196                bool*                               pResult,                \
197                JNIEnv*                             pEnv,                   \
198                jclass*                             pClazz)                 \
199{                                                                           \
200    videoEditJava_fieldClassClass(                                          \
201                pResult,                                                    \
202                pEnv,                                                       \
203                &g##m_class##FieldsClass,                                   \
204                pClazz);                                                    \
205}                                                                           \
206                                                                            \
207void                                                                        \
208videoEditJava_get##m_class##FieldIds(                                       \
209                bool*                               pResult,                \
210                JNIEnv*                             pEnv,                   \
211                VideoEditJava_##m_class##FieldIds*          pIds)           \
212{                                                                           \
213    videoEditJava_fieldClassFieldIds(                                       \
214                pResult,                                                    \
215                pEnv,                                                       \
216                &g##m_class##FieldsClass,                                   \
217                (sizeof(VideoEditJava_##m_class##FieldIds) /                \
218                 sizeof(jfieldID)),                                         \
219                (VideoEditJava_FieldIds*)pIds);                             \
220}
221
222#define VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(m_class)                         \
223void                                                                        \
224videoEditJava_init##m_class##Fields(                                        \
225                bool*                               pResult,                \
226                JNIEnv*                             pEnv);                  \
227                                                                            \
228void                                                                        \
229videoEditJava_get##m_class##Class(                                          \
230                bool*                               pResult,                \
231                JNIEnv*                             pEnv,                   \
232                jclass*                             pClazz);                \
233                                                                            \
234void                                                                        \
235videoEditJava_get##m_class##FieldIds(                                       \
236                bool*                               pResult,                \
237                JNIEnv*                             pEnv,                   \
238                VideoEditJava_##m_class##FieldIds*          pIds);
239
240
241#define VIDEOEDIT_JAVA_METHOD_INIT(m_name, m_type)                          \
242    { m_name,                                                               \
243      m_type,                                                               \
244      NULL }
245
246#define VIDEOEDIT_JAVA_DEFINE_METHODS(m_class)                              \
247static                                                                      \
248VideoEditJava_Method g##m_class##Methods [] =
249
250#define VIDEOEDIT_JAVA_DEFINE_METHOD_CLASS(m_class, m_name)                 \
251static VideoEditJava_MethodsClass g##m_class##MethodsClass =                \
252    { m_name,                                                               \
253      &g##m_class##Methods[0],                                              \
254      (sizeof(g##m_class##Methods) / sizeof(VideoEditJava_Method)),         \
255      false };                                                              \
256                                                                            \
257void                                                                        \
258videoEditJava_init##m_class##Methods(                                       \
259                bool*                               pResult,                \
260                JNIEnv*                             pEnv)                   \
261{                                                                           \
262    videoEditJava_initMethodClass(                                          \
263                pResult,                                                    \
264                pEnv,                                                       \
265                &g##m_class##MethodsClass);                                 \
266}                                                                           \
267                                                                            \
268void                                                                        \
269videoEditJava_get##m_class##MethodIds(                                      \
270                bool*                               pResult,                \
271                JNIEnv*                             pEnv,                   \
272                VideoEditJava_##m_class##MethodIds*         pIds)           \
273{                                                                           \
274    videoEditJava_methodClassMethodIds(                                     \
275                pResult,                                                    \
276                pEnv,                                                       \
277                &g##m_class##MethodsClass,                                  \
278                (sizeof(VideoEditJava_##m_class##MethodIds) /               \
279                 sizeof(jmethodID)),                                        \
280                (VideoEditJava_MethodIds*)pIds);                            \
281}
282
283#define VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(m_class)                        \
284void                                                                        \
285videoEditJava_init##m_class##Methods(                                       \
286                bool*                               pResult,                \
287                JNIEnv*                             pEnv);                  \
288                                                                            \
289void                                                                        \
290videoEditJava_get##m_class##MethodIds(                                      \
291                bool*                               pResult,                \
292                JNIEnv*                             pEnv,                   \
293                VideoEditJava_##m_class##MethodIds*         pIds);
294
295
296typedef struct
297{
298    const char*     pName;
299    int             java;
300    int             c;
301    const char*     pDescription;
302} VideoEditJava_Constant;
303
304typedef struct
305{
306    const char*             pName;
307    VideoEditJava_Constant* pConstants;
308    int                     count;
309    bool                    initialized;
310} VideoEditJava_ConstantsClass;
311
312typedef const char* (*VideoEditJava_UnknownConstant)(int constant);
313
314typedef struct
315{
316    const char*             pName;
317    const char*             pType;
318    jfieldID                fieldId;
319} VideoEditJava_Field;
320
321typedef struct
322{
323    const char*             pName;
324    VideoEditJava_Field*    pFields;
325    int                     count;
326    bool                    initialized;
327} VideoEditJava_FieldsClass;
328
329typedef struct
330{
331    jfieldID fieldIds[];
332} VideoEditJava_FieldIds;
333
334typedef struct
335{
336    const char*             pName;
337    const char*             pType;
338    jmethodID               methodId;
339} VideoEditJava_Method;
340
341typedef struct
342{
343    const char*             pName;
344    VideoEditJava_Method*   pMethods;
345    int                     count;
346    bool                    initialized;
347} VideoEditJava_MethodsClass;
348
349typedef struct
350{
351    jmethodID methodIds[];
352} VideoEditJava_MethodIds;
353
354#define videoEditJava_checkAndThrowIllegalArgumentException(\
355    a, b, c, d) videoEditJava_checkAndThrowIllegalArgumentExceptionFunc(\
356    a, b, c, d, __FILE__, __LINE__)
357
358#define videoEditJava_checkAndThrowRuntimeException(\
359    a, b, c, d) videoEditJava_checkAndThrowRuntimeExceptionFunc(\
360    a, b, c, d, __FILE__, __LINE__)
361
362#define videoEditJava_checkAndThrowIllegalStateException(\
363    a, b, c, d) videoEditJava_checkAndThrowIllegalStateExceptionFunc(\
364    a, b, c, d, __FILE__, __LINE__)
365
366void
367videoEditJava_checkAndThrowIllegalArgumentExceptionFunc(
368                bool*                               pResult,
369                JNIEnv*                             pEnv,
370                bool                                condition,
371                const char*                         pMessage,
372                const char*                         pFile,
373                int                                 lineNo
374                );
375
376void
377videoEditJava_checkAndThrowRuntimeExceptionFunc(
378                bool*                               pResult,
379                JNIEnv*                             pEnv,
380                bool                                condition,
381                M4OSA_ERR                           result,
382                const char*                         pFile,
383                int                                 lineNo
384                );
385
386void
387videoEditJava_checkAndThrowIllegalStateExceptionFunc(
388                bool*                               pResult,
389                JNIEnv*                             pEnv,
390                bool                                condition,
391                const char*                         pMessage,
392                const char*                         pFile,
393                int                                 lineNo
394                );
395
396void
397videoEditJava_getClass(
398                bool*                               pResult,
399                JNIEnv*                             pEnv,
400                const char*                         pName,
401                jclass*                             pClazz);
402
403void
404videoEditJava_getMethodId(
405                bool*                               pResult,
406                JNIEnv*                             pEnv,
407                jclass                              clazz,
408                const char*                         pName,
409                const char*                         pType,
410                jmethodID*                          pMethodId);
411
412void videoEditJava_getFieldId(
413                bool*                               pResult,
414                JNIEnv*                             pEnv,
415                jclass                              clazz,
416                const char*                         pName,
417                const char*                         pType,
418                jfieldID*                           pFieldId);
419
420void videoEditJava_getObject(
421                bool*                               pResult,
422                JNIEnv*                             pEnv,
423                jobject                             object,
424                jfieldID                            objectFieldId,
425                jobject*                            pObject);
426
427void videoEditJava_getArray(
428                bool*                               pResult,
429                JNIEnv*                             pEnv,
430                jobject                             object,
431                jfieldID                            arrayFieldId,
432                jobjectArray*                       pArray,
433                jsize*                              pArraySize);
434
435void* videoEditJava_getString(
436                bool*                               pResult,
437                JNIEnv*                             pEnv,
438                jobject                             object,
439                jfieldID                            stringFieldId,
440                M4OSA_UInt32*                       pLength);
441
442void videoEditJava_getStaticIntField(
443                bool*                               pResult,
444                JNIEnv*                             env,
445                jclass                              clazz,
446                const char*                         pName,
447                int*                                pValue);
448
449void
450videoEditJava_initConstantClass(
451                bool*                               pResult,
452                JNIEnv*                             pEnv,
453                VideoEditJava_ConstantsClass*               pClass);
454
455const char*
456videoEditJava_getConstantClassName(
457                const VideoEditJava_ConstantsClass*         pClass,
458                int                                 value,
459                VideoEditJava_UnknownConstant               unknown);
460
461const char*
462videoEditJava_getConstantClassString(
463                const VideoEditJava_ConstantsClass*         pClass,
464                int                                 value,
465                VideoEditJava_UnknownConstant               unknown);
466
467int
468videoEditJava_getConstantClassJavaToC(
469                bool*                               pResult,
470                const VideoEditJava_ConstantsClass*         pClass,
471                int                                 value);
472
473int
474videoEditJava_getConstantClassJavaToC(
475                bool*                               pResult,
476                const VideoEditJava_ConstantsClass*         pClass,
477                int                                 value,
478                int                                 unknown);
479
480int
481videoEditJava_getConstantClassCToJava(
482                const VideoEditJava_ConstantsClass*         pClass,
483                int                                 value);
484
485int
486videoEditJava_getConstantClassCToJava(
487                const VideoEditJava_ConstantsClass*         pClass,
488                int                                 value,
489                int                                 unknown);
490
491void
492videoEditJava_initFieldClass(
493                bool*                               pResult,
494                JNIEnv*                             pEnv,
495                VideoEditJava_FieldsClass*                  pClass);
496
497void
498videoEditJava_fieldClassClass(
499                bool*                               pResult,
500                JNIEnv*                             pEnv,
501                const VideoEditJava_FieldsClass*            pClass,
502                jclass*                             pClazz);
503
504void
505videoEditJava_fieldClassFieldIds(
506                bool*                               pResult,
507                JNIEnv*                             pEnv,
508                const VideoEditJava_FieldsClass*            pClass,
509                int                                 count,
510                VideoEditJava_FieldIds*                     pIds);
511
512void
513videoEditJava_initMethodClass(
514                bool*                               pResult,
515                JNIEnv*                             pEnv,
516                VideoEditJava_MethodsClass*                 pClass);
517
518void
519videoEditJava_methodClassMethodIds(
520                bool*                               pResult,
521                JNIEnv*                             pEnv,
522                const VideoEditJava_MethodsClass*           pClass,
523                int                                 count,
524                VideoEditJava_MethodIds*                    pIds);
525
526#endif // VIDEO_EDiTOR_JAVA_H
527
528