VideoEditorJava.h revision cd196d3727db641e581d4223815367a5ca5d5637
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
354void
355videoEditJava_checkAndThrowIllegalArgumentException(
356                bool*                               pResult,
357                JNIEnv*                             pEnv,
358                bool                                condition,
359                const char*                         pMessage);
360
361void
362videoEditJava_checkAndThrowRuntimeException(
363                bool*                               pResult,
364                JNIEnv*                             pEnv,
365                bool                                condition,
366                M4OSA_ERR                           result);
367
368void
369videoEditJava_checkAndThrowIllegalStateException(
370                bool*                               pResult,
371                JNIEnv*                             pEnv,
372                bool                                condition,
373                const char*                         pMessage);
374
375void
376videoEditJava_getClass(
377                bool*                               pResult,
378                JNIEnv*                             pEnv,
379                const char*                         pName,
380                jclass*                             pClazz);
381
382void
383videoEditJava_getMethodId(
384                bool*                               pResult,
385                JNIEnv*                             pEnv,
386                jclass                              clazz,
387                const char*                         pName,
388                const char*                         pType,
389                jmethodID*                          pMethodId);
390
391void videoEditJava_getFieldId(
392                bool*                               pResult,
393                JNIEnv*                             pEnv,
394                jclass                              clazz,
395                const char*                         pName,
396                const char*                         pType,
397                jfieldID*                           pFieldId);
398
399void videoEditJava_getObject(
400                bool*                               pResult,
401                JNIEnv*                             pEnv,
402                jobject                             object,
403                jfieldID                            objectFieldId,
404                jobject*                            pObject);
405
406void videoEditJava_getArray(
407                bool*                               pResult,
408                JNIEnv*                             pEnv,
409                jobject                             object,
410                jfieldID                            arrayFieldId,
411                jobjectArray*                       pArray,
412                jsize*                              pArraySize);
413
414void* videoEditJava_getString(
415                bool*                               pResult,
416                JNIEnv*                             pEnv,
417                jobject                             object,
418                jfieldID                            stringFieldId,
419                M4OSA_UInt32*                       pLength);
420
421void videoEditJava_getStaticIntField(
422                bool*                               pResult,
423                JNIEnv*                             env,
424                jclass                              clazz,
425                const char*                         pName,
426                int*                                pValue);
427
428void
429videoEditJava_initConstantClass(
430                bool*                               pResult,
431                JNIEnv*                             pEnv,
432                VideoEditJava_ConstantsClass*               pClass);
433
434const char*
435videoEditJava_getConstantClassName(
436                const VideoEditJava_ConstantsClass*         pClass,
437                int                                 value,
438                VideoEditJava_UnknownConstant               unknown);
439
440const char*
441videoEditJava_getConstantClassString(
442                const VideoEditJava_ConstantsClass*         pClass,
443                int                                 value,
444                VideoEditJava_UnknownConstant               unknown);
445
446int
447videoEditJava_getConstantClassJavaToC(
448                bool*                               pResult,
449                const VideoEditJava_ConstantsClass*         pClass,
450                int                                 value);
451
452int
453videoEditJava_getConstantClassJavaToC(
454                bool*                               pResult,
455                const VideoEditJava_ConstantsClass*         pClass,
456                int                                 value,
457                int                                 unknown);
458
459int
460videoEditJava_getConstantClassCToJava(
461                const VideoEditJava_ConstantsClass*         pClass,
462                int                                 value);
463
464int
465videoEditJava_getConstantClassCToJava(
466                const VideoEditJava_ConstantsClass*         pClass,
467                int                                 value,
468                int                                 unknown);
469
470void
471videoEditJava_initFieldClass(
472                bool*                               pResult,
473                JNIEnv*                             pEnv,
474                VideoEditJava_FieldsClass*                  pClass);
475
476void
477videoEditJava_fieldClassClass(
478                bool*                               pResult,
479                JNIEnv*                             pEnv,
480                const VideoEditJava_FieldsClass*            pClass,
481                jclass*                             pClazz);
482
483void
484videoEditJava_fieldClassFieldIds(
485                bool*                               pResult,
486                JNIEnv*                             pEnv,
487                const VideoEditJava_FieldsClass*            pClass,
488                int                                 count,
489                VideoEditJava_FieldIds*                     pIds);
490
491void
492videoEditJava_initMethodClass(
493                bool*                               pResult,
494                JNIEnv*                             pEnv,
495                VideoEditJava_MethodsClass*                 pClass);
496
497void
498videoEditJava_methodClassMethodIds(
499                bool*                               pResult,
500                JNIEnv*                             pEnv,
501                const VideoEditJava_MethodsClass*           pClass,
502                int                                 count,
503                VideoEditJava_MethodIds*                    pIds);
504
505#endif // VIDEO_EDiTOR_JAVA_H
506
507