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_CLASSES_H 18#define VIDEO_EDITOR_CLASSES_H 19 20#include <VideoEditorJava.h> 21#include <VideoEditorClasses.h> 22/** 23 ************************************************************************ 24 * @file VideoEditorClasses.h 25 * @brief Interface for JNI methods/defines that have specific 26 * access to class, objects and method Ids defined in Java layer 27 ************************************************************************ 28*/ 29 30 31extern "C" { 32#include <M4xVSS_API.h> 33#include <M4VSS3GPP_API.h> 34#include <M4VSS3GPP_ErrorCodes.h> 35#include <M4MCS_ErrorCodes.h> 36#include <M4READER_Common.h> 37#include <M4WRITER_common.h> 38}; 39 40/* 41 * Java layer class/object name strings 42 */ 43#define PACKAGE_NAME "android/media/videoeditor" 44 45#define MANUAL_EDIT_ENGINE_CLASS_NAME PACKAGE_NAME"/MediaArtistNativeHelper" 46#define MEDIA_PROPERTIES_ENGINE_CLASS_NAME PACKAGE_NAME"/MediaArtistNativeHelper" 47 48#define AUDIO_FORMAT_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioFormat" 49#define RESULTS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$Results" 50#define VERSION_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$Version" 51#define AUDIO_SAMPLING_FREQUENCY_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSamplingFrequency" 52#define BITRATE_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$Bitrate" 53#define ERROR_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$Result" 54#define FILE_TYPE_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$FileType" 55#define MEDIA_RENDERING_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$MediaRendering" 56#define VIDEO_FORMAT_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFormat" 57#define VIDEO_FRAME_RATE_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameRate" 58#define VIDEO_FRAME_SIZE_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameSize" 59#define VIDEO_PROFILE_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoProfile" 60#define ALPHA_MAGIC_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$AlphaMagicSettings" 61#define AUDIO_EFFECT_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioEffect" 62#define AUDIO_TRANSITION_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioTransition" 63#define BACKGROUND_MUSIC_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$BackgroundMusicSettings" 64#define CLIP_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$ClipSettings" 65#define EDIT_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$EditSettings" 66#define EFFECT_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$EffectSettings" 67#define SLIDE_DIRECTION_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideDirection" 68#define SLIDE_TRANSITION_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideTransitionSettings" 69#define TRANSITION_BEHAVIOUR_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionBehaviour" 70#define TRANSITION_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionSettings" 71#define VIDEO_EFFECT_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoEffect" 72#define VIDEO_TRANSITION_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoTransition" 73#define PREVIEW_CLIPS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClips" 74#define PREVIEW_SETTING_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewSettings" 75#define PREVIEW_PROPERTIES_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClipProperties" 76#define AUDIO_SETTINGS_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSettings" 77#define PROPERTIES_CLASS_NAME MANUAL_EDIT_ENGINE_CLASS_NAME"$Properties" 78 79#define TASK_IDLE 0 80#define TASK_LOADING_SETTINGS 1 81#define TASK_ENCODING 2 82 83/* 84 * File type enum 85 */ 86typedef enum 87{ 88 VideoEditClasses_kFileType_3GPP, 89 VideoEditClasses_kFileType_MP4, 90 VideoEditClasses_kFileType_AMR, 91 VideoEditClasses_kFileType_MP3, 92 VideoEditClasses_kFileType_PCM, 93 VideoEditClasses_kFileType_JPG, 94 VideoEditClasses_kFileType_BMP, 95 VideoEditClasses_kFileType_GIF, 96 VideoEditClasses_kFileType_PNG, 97 VideoEditClasses_kFileType_ARGB8888, 98 VideoEditClasses_kFileType_M4V, 99 VideoEditClasses_kFileType_Unsupported 100} VideoEditClasses_FileType; 101 102/* 103 * Alpha magic transition structure 104 */ 105typedef struct 106{ 107 jfieldID file; 108 jfieldID blendingPercent; 109 jfieldID invertRotation; 110 jfieldID rgbWidth; 111 jfieldID rgbHeight; 112} VideoEditJava_AlphaMagicFieldIds; 113 114typedef struct 115{ 116 jfieldID file; 117 jfieldID fileType; 118 jfieldID insertionTime; 119 jfieldID volumePercent; 120 jfieldID beginLoop; 121 jfieldID endLoop; 122 jfieldID enableDucking; 123 jfieldID duckingThreshold; 124 jfieldID lowVolume; 125 jfieldID isLooping; 126} VideoEditJava_BackgroundMusicFieldIds; 127/* 128 * Structure to hold media properties from native layer 129 */ 130typedef struct { 131 M4OSA_UInt32 uiClipDuration; 132 VideoEditClasses_FileType FileType; 133 M4VIDEOEDITING_VideoFormat VideoStreamType; 134 M4OSA_UInt32 uiClipVideoDuration; 135 M4OSA_UInt32 uiVideoBitrate; 136 M4OSA_UInt32 uiVideoWidth; 137 M4OSA_UInt32 uiVideoHeight; 138 M4OSA_Float fAverageFrameRate; 139 M4OSA_UInt32 uiVideoProfile; /**< H263 or MPEG-4 or H264 profile(from core decoder) */ 140 M4OSA_UInt32 uiVideoLevel; /**< H263 or MPEG-4 or H264 level*/ 141 M4OSA_Bool bProfileSupported; 142 M4OSA_Bool bLevelSupported; 143 M4VIDEOEDITING_AudioFormat AudioStreamType; 144 M4OSA_UInt32 uiClipAudioDuration; 145 M4OSA_UInt32 uiAudioBitrate; 146 M4OSA_UInt32 uiNbChannels; 147 M4OSA_UInt32 uiSamplingFrequency; 148 M4OSA_UInt32 uiRotation; 149} VideoEditPropClass_Properties; 150 151typedef struct 152{ 153 jfieldID duration; 154 jfieldID fileType; 155 jfieldID videoFormat; 156 jfieldID videoDuration; 157 jfieldID videoBitrate; 158 jfieldID width; 159 jfieldID height; 160 jfieldID averageFrameRate; 161 jfieldID profile; 162 jfieldID level; 163 jfieldID profileSupported; 164 jfieldID levelSupported; 165 jfieldID audioFormat; 166 jfieldID audioDuration; 167 jfieldID audioBitrate; 168 jfieldID audioChannels; 169 jfieldID audioSamplingFrequency; 170 jfieldID videoRotation; 171} VideoEditJava_PropertiesFieldIds; 172 173 174typedef struct 175{ 176 jfieldID clipPath; 177 jfieldID fileType; 178 jfieldID beginCutTime; 179 jfieldID endCutTime; 180 jfieldID beginCutPercent; 181 jfieldID endCutPercent; 182 jfieldID panZoomEnabled; 183 jfieldID panZoomPercentStart; 184 jfieldID panZoomTopLeftXStart; 185 jfieldID panZoomTopLeftYStart; 186 jfieldID panZoomPercentEnd; 187 jfieldID panZoomTopLeftXEnd; 188 jfieldID panZoomTopLeftYEnd; 189 jfieldID mediaRendering; 190 jfieldID rgbFileWidth; 191 jfieldID rgbFileHeight; 192 jfieldID rotationDegree; 193} VideoEditJava_ClipSettingsFieldIds; 194 195typedef struct 196{ 197 jfieldID clipSettingsArray; 198 jfieldID transitionSettingsArray; 199 jfieldID effectSettingsArray; 200 jfieldID videoFrameRate; 201 jfieldID outputFile; 202 jfieldID videoFrameSize; 203 jfieldID videoFormat; 204 jfieldID videoProfile; 205 jfieldID videoLevel; 206 jfieldID audioFormat; 207 jfieldID audioSamplingFreq; 208 jfieldID maxFileSize; 209 jfieldID audioChannels; 210 jfieldID videoBitrate; 211 jfieldID audioBitrate; 212 jfieldID backgroundMusicSettings; 213 jfieldID primaryTrackVolume; 214} VideoEditJava_EditSettingsFieldIds; 215 216 217typedef struct 218{ 219 jfieldID startTime; 220 jfieldID duration; 221 jfieldID videoEffectType; 222 jfieldID audioEffectType; 223 jfieldID startPercent; 224 jfieldID durationPercent; 225 jfieldID framingFile; 226 jfieldID framingBuffer; 227 jfieldID bitmapType; 228 jfieldID width; 229 jfieldID height; 230 jfieldID topLeftX; 231 jfieldID topLeftY; 232 jfieldID framingResize; 233 jfieldID framingScaledSize; 234 jfieldID text; 235 jfieldID textRenderingData; 236 jfieldID textBufferWidth; 237 jfieldID textBufferHeight; 238 jfieldID fiftiesFrameRate; 239 jfieldID rgb16InputColor; 240 jfieldID alphaBlendingStartPercent; 241 jfieldID alphaBlendingMiddlePercent; 242 jfieldID alphaBlendingEndPercent; 243 jfieldID alphaBlendingFadeInTimePercent; 244 jfieldID alphaBlendingFadeOutTimePercent; 245} VideoEditJava_EffectSettingsFieldIds; 246 247typedef struct 248{ 249 jfieldID context; 250} VideoEditJava_EngineFieldIds; 251 252typedef struct 253{ 254 jfieldID direction; 255} VideoEditJava_SlideTransitionSettingsFieldIds; 256 257typedef struct 258{ 259 jfieldID duration; 260 jfieldID videoTransitionType; 261 jfieldID audioTransitionType; 262 jfieldID transitionBehaviour; 263 jfieldID alphaSettings; 264 jfieldID slideSettings; 265} VideoEditJava_TransitionSettingsFieldIds; 266 267typedef struct 268{ 269 jfieldID major; 270 jfieldID minor; 271 jfieldID revision; 272} VideoEditJava_VersionFieldIds; 273 274 275typedef struct 276{ 277 jmethodID onProgressUpdate; 278} VideoEditJava_EngineMethodIds; 279 280 281VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect ) 282VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat ) 283VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency) 284VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition ) 285VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate ) 286VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine ) 287VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error ) 288VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType ) 289VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering ) 290VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection ) 291VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour ) 292VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect ) 293VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat ) 294VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate ) 295VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize ) 296VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile ) 297VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition ) 298 299 300VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic ) 301VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic ) 302VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings ) 303VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings ) 304VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings ) 305VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings ) 306VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine ) 307VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings ) 308VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings ) 309VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version ) 310 311VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine ) 312 313/* 314 * Init all Edit settings related structures 315 */ 316void 317videoEditClasses_init( 318 bool* pResult, 319 JNIEnv* pEnv); 320/** 321 ************************************************************************ 322 * @brief Media Properties init function. 323 * @param pResult (OUT) Pointer to hold result 324 * @param pEnv (IN) JVM Interface pointer 325 ************************************************************************ 326*/ 327void 328videoEditPropClass_init( 329 bool* pResult, 330 JNIEnv* pEnv); 331/** 332 ************************************************************************ 333 * @brief Interface to populate Media Properties. 334 * @param pResult (IN/OUT) Pointer to hold result 335 * @param pEnv (IN) JVM Interface pointer 336 * @param pProperties (IN) Media propeties structure pointer 337 * @param pObject (OUT) Java object to hold media 338 * properties for java layer. 339 ************************************************************************ 340*/ 341void 342videoEditPropClass_createProperties( 343 bool* pResult, 344 JNIEnv* pEnv, 345 VideoEditPropClass_Properties* pProperties, 346 jobject* pObject); 347 348/** 349 ************************************************************************ 350 * @brief Interface to log/display media properties. 351 * @param pProperties (IN) Pointer holding media properties 352 * @param indentation (IN) Indentation to follow in display 353 ************************************************************************ 354*/ 355void 356videoEditPropClass_logProperties( 357 VideoEditPropClass_Properties* pProperties, 358 int indentation); 359 360/* 361 * Get alpha magic transition settings 362 */ 363void 364videoEditClasses_getAlphaMagicSettings( 365 bool* pResult, 366 JNIEnv* pEnv, 367 jobject object, 368 M4xVSS_AlphaMagicSettings** ppSettings); 369 370/* 371 * Free alpha magic transition settings structure 372 */ 373void 374videoEditClasses_freeAlphaMagicSettings( 375 M4xVSS_AlphaMagicSettings** ppSettings); 376 377/* 378 * Log alpha magic transition settings 379 */ 380void 381videoEditClasses_logAlphaMagicSettings( 382 M4xVSS_AlphaMagicSettings* pSettings, 383 int indentation); 384 385/* 386 * Get Background Track settings 387 */ 388void 389videoEditClasses_getBackgroundMusicSettings( 390 bool* pResult, 391 JNIEnv* pEnv, 392 jobject object, 393 M4xVSS_BGMSettings** ppSettings); 394 395/* 396 * Free Background Track settings structure 397 */ 398void 399videoEditClasses_freeBackgroundMusicSettings( 400 M4xVSS_BGMSettings** ppSettings); 401 402/* 403 * Log Background Track settings 404 */ 405void 406videoEditClasses_logBackgroundMusicSettings( 407 M4xVSS_BGMSettings* pSettings, 408 int indentation); 409 410/* 411 * Log clip properties 412 */ 413void 414videoEditClasses_logClipProperties( 415 M4VIDEOEDITING_ClipProperties* pProperties, 416 int indentation); 417 418/* 419 * Get clip settings from Java 420 */ 421void 422videoEditClasses_getClipSettings( 423 bool* pResult, 424 JNIEnv* pEnv, 425 jobject object, 426 M4VSS3GPP_ClipSettings** ppSettings); 427/** 428 ************************************************************************ 429 * @brief Interface function to retrieve media properties for a given 430 * file. 431 * @param pEnv (IN) Pointer holding media properties 432 * @param thiz (IN) Indentation to follow in display 433 * @param file (IN) File path for which media properties has 434 * to be retrieved. 435 ************************************************************************ 436*/ 437jobject 438videoEditProp_getProperties( 439 JNIEnv* pEnv, 440 jobject thiz, 441 jstring file); 442 443/* 444 * Create/Set the clip settings to java Object 445 */ 446void 447videoEditClasses_createClipSettings( 448 bool* pResult, 449 JNIEnv* pEnv, 450 M4VSS3GPP_ClipSettings* pSettings, 451 jobject* pObject); 452 453/* 454 * Free clip settings structure 455 */ 456void 457videoEditClasses_freeClipSettings( 458 M4VSS3GPP_ClipSettings** ppSettings); 459 460/* 461 * Log clip settings structure 462 */ 463void 464videoEditClasses_logClipSettings( 465 M4VSS3GPP_ClipSettings* pSettings, 466 int indentation); 467 468/* 469 * Get Edit settings from Java 470 */ 471void 472videoEditClasses_getEditSettings( 473 bool* pResult, 474 JNIEnv* pEnv, 475 jobject object, 476 M4VSS3GPP_EditSettings** ppSettings, 477 bool flag); 478 479/* 480 * Free Edit Settings structure 481 */ 482void 483videoEditClasses_freeEditSettings( 484 M4VSS3GPP_EditSettings** ppSettings); 485 486/* 487 * Log Edit settings structure 488 */ 489void 490videoEditClasses_logEditSettings( 491 M4VSS3GPP_EditSettings* pSettings, 492 int indentation); 493 494/* 495 * Get Effect settings from Java 496 */ 497void 498videoEditClasses_getEffectSettings( 499 bool* pResult, 500 JNIEnv* pEnv, 501 jobject object, 502 M4VSS3GPP_EffectSettings* pSettings); 503 504/* 505 * Free Effect settings structure 506 */ 507void 508videoEditClasses_freeEffectSettings( 509 M4VSS3GPP_EffectSettings* pSettings); 510 511/* 512 * Log Effect settings 513 */ 514void 515videoEditClasses_logEffectSettings( 516 M4VSS3GPP_EffectSettings* pSettings, 517 int indentation); 518 519/* 520 * Get Transition-Sliding settings from Java 521 */ 522void 523videoEditClasses_getSlideTransitionSettings( 524 bool* pResult, 525 JNIEnv* pEnv, 526 jobject object, 527 M4xVSS_SlideTransitionSettings** ppSettings); 528 529/* 530 * Free Transition-Sliding structure 531 */ 532void 533videoEditClasses_freeSlideTransitionSettings( 534 M4xVSS_SlideTransitionSettings** ppSettings); 535 536/* 537 * Free Transition-Sliding structure 538 */ 539void 540videoEditClasses_logSlideTransitionSettings( 541 M4xVSS_SlideTransitionSettings* pSettings, 542 int indentation); 543 544/* 545 * Get Transition settings from Java 546 */ 547void 548videoEditClasses_getTransitionSettings( 549 bool* pResult, 550 JNIEnv* pEnv, 551 jobject object, 552 M4VSS3GPP_TransitionSettings** ppSettings); 553 554/* 555 * Free Transition settings structure 556 */ 557void 558videoEditClasses_freeTransitionSettings( 559 M4VSS3GPP_TransitionSettings** ppSettings); 560 561/* 562 * Log Transition settings 563 */ 564void 565videoEditClasses_logTransitionSettings( 566 M4VSS3GPP_TransitionSettings* pSettings, 567 int indentation); 568 569/* 570 * Set version information to Java object 571 */ 572void 573videoEditClasses_createVersion( 574 bool* pResult, 575 JNIEnv* pEnv, 576 M4_VersionInfo* pVersionInfo, 577 jobject* pObject); 578 579/* 580 * Log Version information 581 */ 582void 583videoEditClasses_logVersion( 584 M4_VersionInfo* pVersionInfo, 585 int indentation); 586 587 588void* 589videoEditClasses_getContext( 590 bool* pResult, 591 JNIEnv* pEnv, 592 jobject object); 593 594void 595videoEditClasses_setContext( 596 bool* pResult, 597 JNIEnv* pEnv, 598 jobject object, 599 void* pContext); 600 601 602#endif // VIDEO_EDITOR_CLASSES_H 603 604