VideoEditorClasses.h revision 4e7032052137345450bfd2b7a4a9a05ecde17076
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 M4VIDEOEDITING_VideoProfileAndLevel ProfileAndLevel; 140 M4VIDEOEDITING_AudioFormat AudioStreamType; 141 M4OSA_UInt32 uiClipAudioDuration; 142 M4OSA_UInt32 uiAudioBitrate; 143 M4OSA_UInt32 uiNbChannels; 144 M4OSA_UInt32 uiSamplingFrequency; 145} VideoEditPropClass_Properties; 146 147typedef struct 148{ 149 jfieldID duration; 150 jfieldID fileType; 151 jfieldID videoFormat; 152 jfieldID videoDuration; 153 jfieldID videoBitrate; 154 jfieldID width; 155 jfieldID height; 156 jfieldID averageFrameRate; 157 jfieldID profileAndLevel; 158 jfieldID audioFormat; 159 jfieldID audioDuration; 160 jfieldID audioBitrate; 161 jfieldID audioChannels; 162 jfieldID audioSamplingFrequency; 163} VideoEditJava_PropertiesFieldIds; 164 165 166typedef struct 167{ 168 jfieldID clipPath; 169 jfieldID fileType; 170 jfieldID beginCutTime; 171 jfieldID endCutTime; 172 jfieldID beginCutPercent; 173 jfieldID endCutPercent; 174 jfieldID panZoomEnabled; 175 jfieldID panZoomPercentStart; 176 jfieldID panZoomTopLeftXStart; 177 jfieldID panZoomTopLeftYStart; 178 jfieldID panZoomPercentEnd; 179 jfieldID panZoomTopLeftXEnd; 180 jfieldID panZoomTopLeftYEnd; 181 jfieldID mediaRendering; 182 jfieldID rgbFileWidth; 183 jfieldID rgbFileHeight; 184} VideoEditJava_ClipSettingsFieldIds; 185 186typedef struct 187{ 188 jfieldID clipSettingsArray; 189 jfieldID transitionSettingsArray; 190 jfieldID effectSettingsArray; 191 jfieldID videoFrameRate; 192 jfieldID outputFile; 193 jfieldID videoFrameSize; 194 jfieldID videoFormat; 195 jfieldID audioFormat; 196 jfieldID audioSamplingFreq; 197 jfieldID maxFileSize; 198 jfieldID audioChannels; 199 jfieldID videoBitrate; 200 jfieldID audioBitrate; 201 jfieldID backgroundMusicSettings; 202 jfieldID primaryTrackVolume; 203} VideoEditJava_EditSettingsFieldIds; 204 205 206typedef struct 207{ 208 jfieldID startTime; 209 jfieldID duration; 210 jfieldID videoEffectType; 211 jfieldID audioEffectType; 212 jfieldID startPercent; 213 jfieldID durationPercent; 214 jfieldID framingFile; 215 jfieldID framingBuffer; 216 jfieldID bitmapType; 217 jfieldID width; 218 jfieldID height; 219 jfieldID topLeftX; 220 jfieldID topLeftY; 221 jfieldID framingResize; 222 jfieldID framingScaledSize; 223 jfieldID text; 224 jfieldID textRenderingData; 225 jfieldID textBufferWidth; 226 jfieldID textBufferHeight; 227 jfieldID fiftiesFrameRate; 228 jfieldID rgb16InputColor; 229 jfieldID alphaBlendingStartPercent; 230 jfieldID alphaBlendingMiddlePercent; 231 jfieldID alphaBlendingEndPercent; 232 jfieldID alphaBlendingFadeInTimePercent; 233 jfieldID alphaBlendingFadeOutTimePercent; 234} VideoEditJava_EffectSettingsFieldIds; 235 236typedef struct 237{ 238 jfieldID context; 239} VideoEditJava_EngineFieldIds; 240 241typedef struct 242{ 243 jfieldID direction; 244} VideoEditJava_SlideTransitionSettingsFieldIds; 245 246typedef struct 247{ 248 jfieldID duration; 249 jfieldID videoTransitionType; 250 jfieldID audioTransitionType; 251 jfieldID transitionBehaviour; 252 jfieldID alphaSettings; 253 jfieldID slideSettings; 254} VideoEditJava_TransitionSettingsFieldIds; 255 256typedef struct 257{ 258 jfieldID major; 259 jfieldID minor; 260 jfieldID revision; 261} VideoEditJava_VersionFieldIds; 262 263 264typedef struct 265{ 266 jmethodID onProgressUpdate; 267} VideoEditJava_EngineMethodIds; 268 269 270VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect ) 271VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat ) 272VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency) 273VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition ) 274VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate ) 275VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine ) 276VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error ) 277VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType ) 278VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering ) 279VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection ) 280VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour ) 281VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect ) 282VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat ) 283VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate ) 284VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize ) 285VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile ) 286VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition ) 287 288 289VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic ) 290VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic ) 291VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings ) 292VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings ) 293VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings ) 294VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings ) 295VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine ) 296VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings ) 297VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings ) 298VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version ) 299 300VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine ) 301 302/* 303 * Init all Edit settings related structures 304 */ 305void 306videoEditClasses_init( 307 bool* pResult, 308 JNIEnv* pEnv); 309/** 310 ************************************************************************ 311 * @brief Media Properties init function. 312 * @param pResult (OUT) Pointer to hold result 313 * @param pEnv (IN) JVM Interface pointer 314 ************************************************************************ 315*/ 316void 317videoEditPropClass_init( 318 bool* pResult, 319 JNIEnv* pEnv); 320/** 321 ************************************************************************ 322 * @brief Interface to populate Media Properties. 323 * @param pResult (IN/OUT) Pointer to hold result 324 * @param pEnv (IN) JVM Interface pointer 325 * @param pProperties (IN) Media propeties structure pointer 326 * @param pObject (OUT) Java object to hold media 327 * properties for java layer. 328 ************************************************************************ 329*/ 330void 331videoEditPropClass_createProperties( 332 bool* pResult, 333 JNIEnv* pEnv, 334 VideoEditPropClass_Properties* pProperties, 335 jobject* pObject); 336 337/** 338 ************************************************************************ 339 * @brief Interface to log/display media properties. 340 * @param pProperties (IN) Pointer holding media properties 341 * @param indentation (IN) Indentation to follow in display 342 ************************************************************************ 343*/ 344void 345videoEditPropClass_logProperties( 346 VideoEditPropClass_Properties* pProperties, 347 int indentation); 348 349/* 350 * Get alpha magic transition settings 351 */ 352void 353videoEditClasses_getAlphaMagicSettings( 354 bool* pResult, 355 JNIEnv* pEnv, 356 jobject object, 357 M4xVSS_AlphaMagicSettings** ppSettings); 358 359/* 360 * Free alpha magic transition settings structure 361 */ 362void 363videoEditClasses_freeAlphaMagicSettings( 364 M4xVSS_AlphaMagicSettings** ppSettings); 365 366/* 367 * Log alpha magic transition settings 368 */ 369void 370videoEditClasses_logAlphaMagicSettings( 371 M4xVSS_AlphaMagicSettings* pSettings, 372 int indentation); 373 374/* 375 * Get Background Track settings 376 */ 377void 378videoEditClasses_getBackgroundMusicSettings( 379 bool* pResult, 380 JNIEnv* pEnv, 381 jobject object, 382 M4xVSS_BGMSettings** ppSettings); 383 384/* 385 * Free Background Track settings structure 386 */ 387void 388videoEditClasses_freeBackgroundMusicSettings( 389 M4xVSS_BGMSettings** ppSettings); 390 391/* 392 * Log Background Track settings 393 */ 394void 395videoEditClasses_logBackgroundMusicSettings( 396 M4xVSS_BGMSettings* pSettings, 397 int indentation); 398 399/* 400 * Log clip properties 401 */ 402void 403videoEditClasses_logClipProperties( 404 M4VIDEOEDITING_ClipProperties* pProperties, 405 int indentation); 406 407/* 408 * Get clip settings from Java 409 */ 410void 411videoEditClasses_getClipSettings( 412 bool* pResult, 413 JNIEnv* pEnv, 414 jobject object, 415 M4VSS3GPP_ClipSettings** ppSettings); 416/** 417 ************************************************************************ 418 * @brief Interface function to retrieve media properties for a given 419 * file. 420 * @param pEnv (IN) Pointer holding media properties 421 * @param thiz (IN) Indentation to follow in display 422 * @param file (IN) File path for which media properties has 423 * to be retrieved. 424 ************************************************************************ 425*/ 426jobject 427videoEditProp_getProperties( 428 JNIEnv* pEnv, 429 jobject thiz, 430 jstring file); 431 432/* 433 * Create/Set the clip settings to java Object 434 */ 435void 436videoEditClasses_createClipSettings( 437 bool* pResult, 438 JNIEnv* pEnv, 439 M4VSS3GPP_ClipSettings* pSettings, 440 jobject* pObject); 441 442/* 443 * Free clip settings structure 444 */ 445void 446videoEditClasses_freeClipSettings( 447 M4VSS3GPP_ClipSettings** ppSettings); 448 449/* 450 * Log clip settings structure 451 */ 452void 453videoEditClasses_logClipSettings( 454 M4VSS3GPP_ClipSettings* pSettings, 455 int indentation); 456 457/* 458 * Get Edit settings from Java 459 */ 460void 461videoEditClasses_getEditSettings( 462 bool* pResult, 463 JNIEnv* pEnv, 464 jobject object, 465 M4VSS3GPP_EditSettings** ppSettings, 466 bool flag); 467 468/* 469 * Free Edit Settings structure 470 */ 471void 472videoEditClasses_freeEditSettings( 473 M4VSS3GPP_EditSettings** ppSettings); 474 475/* 476 * Log Edit settings structure 477 */ 478void 479videoEditClasses_logEditSettings( 480 M4VSS3GPP_EditSettings* pSettings, 481 int indentation); 482 483/* 484 * Get Effect settings from Java 485 */ 486void 487videoEditClasses_getEffectSettings( 488 bool* pResult, 489 JNIEnv* pEnv, 490 jobject object, 491 M4VSS3GPP_EffectSettings* pSettings); 492 493/* 494 * Free Effect settings structure 495 */ 496void 497videoEditClasses_freeEffectSettings( 498 M4VSS3GPP_EffectSettings* pSettings); 499 500/* 501 * Log Effect settings 502 */ 503void 504videoEditClasses_logEffectSettings( 505 M4VSS3GPP_EffectSettings* pSettings, 506 int indentation); 507 508/* 509 * Get Transition-Sliding settings from Java 510 */ 511void 512videoEditClasses_getSlideTransitionSettings( 513 bool* pResult, 514 JNIEnv* pEnv, 515 jobject object, 516 M4xVSS_SlideTransitionSettings** ppSettings); 517 518/* 519 * Free Transition-Sliding structure 520 */ 521void 522videoEditClasses_freeSlideTransitionSettings( 523 M4xVSS_SlideTransitionSettings** ppSettings); 524 525/* 526 * Free Transition-Sliding structure 527 */ 528void 529videoEditClasses_logSlideTransitionSettings( 530 M4xVSS_SlideTransitionSettings* pSettings, 531 int indentation); 532 533/* 534 * Get Transition settings from Java 535 */ 536void 537videoEditClasses_getTransitionSettings( 538 bool* pResult, 539 JNIEnv* pEnv, 540 jobject object, 541 M4VSS3GPP_TransitionSettings** ppSettings); 542 543/* 544 * Free Transition settings structure 545 */ 546void 547videoEditClasses_freeTransitionSettings( 548 M4VSS3GPP_TransitionSettings** ppSettings); 549 550/* 551 * Log Transition settings 552 */ 553void 554videoEditClasses_logTransitionSettings( 555 M4VSS3GPP_TransitionSettings* pSettings, 556 int indentation); 557 558/* 559 * Set version information to Java object 560 */ 561void 562videoEditClasses_createVersion( 563 bool* pResult, 564 JNIEnv* pEnv, 565 M4_VersionInfo* pVersionInfo, 566 jobject* pObject); 567 568/* 569 * Log Version information 570 */ 571void 572videoEditClasses_logVersion( 573 M4_VersionInfo* pVersionInfo, 574 int indentation); 575 576 577void* 578videoEditClasses_getContext( 579 bool* pResult, 580 JNIEnv* pEnv, 581 jobject object); 582 583void 584videoEditClasses_setContext( 585 bool* pResult, 586 JNIEnv* pEnv, 587 jobject object, 588 void* pContext); 589 590 591#endif // VIDEO_EDITOR_CLASSES_H 592 593