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