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