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