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 #define LOG_TAG "VideoEditorClasses" 18 19 #include <VideoEditorClasses.h> 20 #include <VideoEditorJava.h> 21 #include <VideoEditorLogging.h> 22 #include <VideoEditorOsal.h> 23 24 extern "C" { 25 #include <M4OSA_Clock.h> 26 #include <M4OSA_CharStar.h> 27 #include <M4OSA_FileCommon.h> 28 #include <M4OSA_FileReader.h> 29 #include <M4OSA_FileWriter.h> 30 #include <M4OSA_Memory.h> 31 #include <M4OSA_Debug.h> 32 #include <M4OSA_Thread.h> 33 #include <M4VSS3GPP_API.h> 34 #include <M4xVSS_API.h> 35 #include <M4VSS3GPP_ErrorCodes.h> 36 #include <M4MCS_ErrorCodes.h> 37 #include <M4READER_Common.h> 38 #include <M4WRITER_common.h> 39 #include <M4DECODER_Common.h> 40 }; 41 42 #define VIDEOEDIT_PROP_JAVA_RESULT_STRING_MAX (128) 43 44 #define VIDEOEDIT_JAVA__RESULT_STRING_MAX (128) 45 46 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioEffect) 47 { 48 VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kAudioEffectType_None), 49 VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_IN", M4VSS3GPP_kAudioEffectType_FadeIn), 50 VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_OUT", M4VSS3GPP_kAudioEffectType_FadeOut) 51 }; 52 53 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioEffect, AUDIO_EFFECT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL) 54 55 56 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioFormat) 57 { 58 VIDEOEDIT_JAVA_CONSTANT_INIT("NO_AUDIO", M4VIDEOEDITING_kNoneAudio), 59 VIDEOEDIT_JAVA_CONSTANT_INIT("AMR_NB", M4VIDEOEDITING_kAMR_NB), 60 VIDEOEDIT_JAVA_CONSTANT_INIT("AAC", M4VIDEOEDITING_kAAC), 61 VIDEOEDIT_JAVA_CONSTANT_INIT("AAC_PLUS", M4VIDEOEDITING_kAACplus), 62 VIDEOEDIT_JAVA_CONSTANT_INIT("ENHANCED_AAC_PLUS", M4VIDEOEDITING_keAACplus), 63 VIDEOEDIT_JAVA_CONSTANT_INIT("MP3", M4VIDEOEDITING_kMP3), 64 VIDEOEDIT_JAVA_CONSTANT_INIT("EVRC", M4VIDEOEDITING_kEVRC), 65 VIDEOEDIT_JAVA_CONSTANT_INIT("PCM", M4VIDEOEDITING_kPCM), 66 VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_AUDIO", M4VIDEOEDITING_kNullAudio), 67 VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED_AUDIO", M4VIDEOEDITING_kUnsupportedAudio) 68 }; 69 70 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioFormat, AUDIO_FORMAT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL) 71 72 73 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioSamplingFrequency) 74 { 75 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_DEFAULT", M4VIDEOEDITING_kDefault_ASF), 76 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_8000", M4VIDEOEDITING_k8000_ASF), 77 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_16000", M4VIDEOEDITING_k16000_ASF), 78 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_22050", M4VIDEOEDITING_k22050_ASF), 79 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_24000", M4VIDEOEDITING_k24000_ASF), 80 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_32000", M4VIDEOEDITING_k32000_ASF), 81 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_44100", M4VIDEOEDITING_k44100_ASF), 82 VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_48000", M4VIDEOEDITING_k48000_ASF) 83 }; 84 85 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioSamplingFrequency,AUDIO_SAMPLING_FREQUENCY_CLASS_NAME, 86 M4OSA_NULL, M4OSA_NULL) 87 88 89 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioTransition) 90 { 91 VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kAudioTransitionType_None), 92 VIDEOEDIT_JAVA_CONSTANT_INIT("CROSS_FADE", M4VSS3GPP_kAudioTransitionType_CrossFade) 93 }; 94 95 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioTransition, AUDIO_TRANSITION_CLASS_NAME, M4OSA_NULL, 96 M4OSA_NULL) 97 98 99 static const char* 100 videoEditClasses_getUnknownBitrateString(int bitrate) 101 { 102 static char string[VIDEOEDIT_JAVA__RESULT_STRING_MAX] = ""; 103 104 M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1, (M4OSA_Char*)"%d", bitrate); 105 106 // Return the bitrate string. 107 return(string); 108 } 109 110 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Bitrate) 111 { 112 VIDEOEDIT_JAVA_CONSTANT_INIT("VARIABLE", M4VIDEOEDITING_kVARIABLE_KBPS), 113 VIDEOEDIT_JAVA_CONSTANT_INIT("UNDEFINED", M4VIDEOEDITING_kUndefinedBitrate), 114 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_9_2_KBPS", M4VIDEOEDITING_k9_2_KBPS), 115 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_12_2_KBPS", M4VIDEOEDITING_k12_2_KBPS), 116 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_16_KBPS", M4VIDEOEDITING_k16_KBPS), 117 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_24_KBPS", M4VIDEOEDITING_k24_KBPS), 118 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_32_KBPS", M4VIDEOEDITING_k32_KBPS), 119 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_48_KBPS", M4VIDEOEDITING_k48_KBPS), 120 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_64_KBPS", M4VIDEOEDITING_k64_KBPS), 121 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_96_KBPS", M4VIDEOEDITING_k96_KBPS), 122 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_128_KBPS", M4VIDEOEDITING_k128_KBPS), 123 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_192_KBPS", M4VIDEOEDITING_k192_KBPS), 124 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_256_KBPS", M4VIDEOEDITING_k256_KBPS), 125 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_288_KBPS", M4VIDEOEDITING_k288_KBPS), 126 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_384_KBPS", M4VIDEOEDITING_k384_KBPS), 127 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_512_KBPS", M4VIDEOEDITING_k512_KBPS), 128 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_800_KBPS", M4VIDEOEDITING_k800_KBPS), 129 /*+ New Encoder bitrates */ 130 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_2_MBPS", M4VIDEOEDITING_k2_MBPS), 131 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_5_MBPS", M4VIDEOEDITING_k5_MBPS), 132 VIDEOEDIT_JAVA_CONSTANT_INIT("BR_8_MBPS", M4VIDEOEDITING_k8_MBPS) 133 /*- New Encoder bitrates */ 134 }; 135 136 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Bitrate, BITRATE_CLASS_NAME, 137 videoEditClasses_getUnknownBitrateString, videoEditClasses_getUnknownBitrateString) 138 139 140 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(ClipType) 141 { 142 VIDEOEDIT_JAVA_CONSTANT_INIT("THREE_GPP", M4VIDEOEDITING_kFileType_3GPP), 143 VIDEOEDIT_JAVA_CONSTANT_INIT("MP4", M4VIDEOEDITING_kFileType_MP4), 144 VIDEOEDIT_JAVA_CONSTANT_INIT("AMR", M4VIDEOEDITING_kFileType_AMR), 145 VIDEOEDIT_JAVA_CONSTANT_INIT("MP3", M4VIDEOEDITING_kFileType_MP3), 146 VIDEOEDIT_JAVA_CONSTANT_INIT("PCM", M4VIDEOEDITING_kFileType_PCM), 147 VIDEOEDIT_JAVA_CONSTANT_INIT("JPG", M4VIDEOEDITING_kFileType_JPG), 148 VIDEOEDIT_JAVA_CONSTANT_INIT("PNG", M4VIDEOEDITING_kFileType_PNG), 149 VIDEOEDIT_JAVA_CONSTANT_INIT("M4V", M4VIDEOEDITING_kFileType_M4V), 150 VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kFileType_Unsupported) 151 }; 152 153 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(ClipType, FILE_TYPE_CLASS_NAME, M4OSA_NULL, M4OSA_NULL) 154 155 156 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Engine) 157 { 158 VIDEOEDIT_JAVA_CONSTANT_INIT("TASK_LOADING_SETTINGS", TASK_LOADING_SETTINGS), 159 VIDEOEDIT_JAVA_CONSTANT_INIT("TASK_ENCODING", TASK_ENCODING) 160 }; 161 162 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME, M4OSA_NULL, 163 M4OSA_NULL) 164 165 166 static const char* 167 videoEditClasses_getUnknownErrorName(int error) 168 { 169 static char string[VIDEOEDIT_JAVA__RESULT_STRING_MAX] = "ERR_INTERNAL"; 170 171 // Format the unknown error string. 172 M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1, (M4OSA_Char*)"ERR_INTERNAL(%s)", 173 videoEditOsal_getResultString(error)); 174 175 // Return the error string. 176 return(string); 177 } 178 179 static const char* 180 videoEditClasses_getUnknownErrorString(int error) 181 { 182 // Return the result string. 183 return(videoEditOsal_getResultString(error)); 184 } 185 186 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Error) 187 { 188 // M4OSA_Clock.h 189 VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_TIMESCALE_TOO_BIG", \ 190 M4WAR_TIMESCALE_TOO_BIG ), 191 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_CLOCK_BAD_REF_YEAR", \ 192 M4ERR_CLOCK_BAD_REF_YEAR ), 193 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FILE_NOT_FOUND", \ 194 M4ERR_FILE_NOT_FOUND ), 195 VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_TRANSCODING_NECESSARY", \ 196 M4VSS3GPP_WAR_TRANSCODING_NECESSARY ), 197 VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_MAX_OUTPUT_SIZE_EXCEEDED", \ 198 M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED ), 199 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BUFFER_OUT_TOO_SMALL", \ 200 M4xVSSWAR_BUFFER_OUT_TOO_SMALL ), 201 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NOMORE_SPACE_FOR_FILE", \ 202 M4xVSSERR_NO_MORE_SPACE ), 203 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_FILE_TYPE", \ 204 M4VSS3GPP_ERR_INVALID_FILE_TYPE ), 205 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_EFFECT_KIND", \ 206 M4VSS3GPP_ERR_INVALID_EFFECT_KIND ), 207 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_EFFECT_TYPE", \ 208 M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE ), 209 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_AUDIO_EFFECT_TYPE", \ 210 M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE ), 211 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_TRANSITION_TYPE", \ 212 M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE ), 213 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_AUDIO_TRANSITION_TYPE", \ 214 M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE ), 215 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_ENCODING_FRAME_RATE", \ 216 M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE ), 217 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EXTERNAL_EFFECT_NULL", \ 218 M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL ), 219 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EXTERNAL_TRANSITION_NULL", \ 220 M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL ), 221 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BEGIN_CUT_LARGER_THAN_DURATION", \ 222 M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION ), 223 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BEGIN_CUT_LARGER_THAN_END_CUT", \ 224 M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT ), 225 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_OVERLAPPING_TRANSITIONS", \ 226 M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS ), 227 #ifdef M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL 228 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ANALYSIS_DATA_SIZE_TOO_SMALL", \ 229 M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL ), 230 #endif 231 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_3GPP_FILE", \ 232 M4VSS3GPP_ERR_INVALID_3GPP_FILE ), 233 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT", \ 234 M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT ), 235 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT", \ 236 M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT ), 237 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AMR_EDITING_UNSUPPORTED", \ 238 M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED ), 239 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_VIDEO_AU_TOO_LARGE", \ 240 M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE ), 241 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_AU_TOO_LARGE", \ 242 M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE ), 243 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_CORRUPTED_AU", \ 244 M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU ), 245 #ifdef M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU 246 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_CORRUPTED_AU", \ 247 M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU ), 248 #endif 249 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ENCODER_ACCES_UNIT_ERROR", \ 250 M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR ), 251 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT", \ 252 M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT ), 253 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_H263_PROFILE", \ 254 M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE ), 255 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE", \ 256 M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE ), 257 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_MPEG4_RVLC", \ 258 M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC ), 259 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT", \ 260 M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT ), 261 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE", \ 262 M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE ), 263 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE",\ 264 M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE), 265 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_CLIP_ANALYSIS_VERSION", \ 266 M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION ), 267 #ifdef M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM 268 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_CLIP_ANALYSIS_PLATFORM", \ 269 M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM ), 270 #endif 271 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_FORMAT", \ 272 M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT ), 273 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE", \ 274 M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE ), 275 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_TIME_SCALE", \ 276 M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE ), 277 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING", \ 278 M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING ), 279 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_MP3_ASSEMBLY", \ 280 M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY ), 281 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NO_SUPPORTED_STREAM_IN_FILE", \ 282 M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE ), 283 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ADDVOLUME_EQUALS_ZERO", \ 284 M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO ), 285 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION", \ 286 M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION ), 287 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT", \ 288 M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT ), 289 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_ADDED_AUDIO_STREAM", \ 290 M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM ), 291 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_MIXING_UNSUPPORTED", \ 292 M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED ), 293 #ifdef M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED 294 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_MIXING_MP3_UNSUPPORTED", \ 295 M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED ), 296 #endif 297 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK", \ 298 M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK ), 299 #ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC 300 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_AAC", \ 301 M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC ), 302 #endif 303 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_CANNOT_BE_MIXED", \ 304 M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED ), 305 #ifdef M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED 306 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED", \ 307 M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED ), 308 #endif 309 #ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC 310 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_EVRC", \ 311 M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC ), 312 #endif 313 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_H263_PROFILE_NOT_SUPPORTED", \ 314 M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED ), 315 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE", \ 316 M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE ), 317 VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INTERNAL", \ 318 M4NO_ERROR ), 319 }; 320 321 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Error, ERROR_CLASS_NAME, 322 videoEditClasses_getUnknownErrorName, videoEditClasses_getUnknownErrorString) 323 324 325 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(FileType) 326 { 327 VIDEOEDIT_JAVA_CONSTANT_INIT("THREE_GPP", VideoEditClasses_kFileType_3GPP), 328 VIDEOEDIT_JAVA_CONSTANT_INIT("MP4", VideoEditClasses_kFileType_MP4), 329 VIDEOEDIT_JAVA_CONSTANT_INIT("AMR", VideoEditClasses_kFileType_AMR), 330 VIDEOEDIT_JAVA_CONSTANT_INIT("MP3", VideoEditClasses_kFileType_MP3), 331 VIDEOEDIT_JAVA_CONSTANT_INIT("PCM", VideoEditClasses_kFileType_PCM), 332 VIDEOEDIT_JAVA_CONSTANT_INIT("JPG", VideoEditClasses_kFileType_JPG), 333 VIDEOEDIT_JAVA_CONSTANT_INIT("GIF", VideoEditClasses_kFileType_GIF), 334 VIDEOEDIT_JAVA_CONSTANT_INIT("PNG", VideoEditClasses_kFileType_PNG), 335 VIDEOEDIT_JAVA_CONSTANT_INIT("M4V", VideoEditClasses_kFileType_M4V), 336 VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", VideoEditClasses_kFileType_Unsupported) 337 }; 338 339 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(FileType, FILE_TYPE_CLASS_NAME, M4OSA_NULL, M4OSA_NULL) 340 341 342 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(MediaRendering) 343 { 344 VIDEOEDIT_JAVA_CONSTANT_INIT("RESIZING", M4xVSS_kResizing), 345 VIDEOEDIT_JAVA_CONSTANT_INIT("CROPPING", M4xVSS_kCropping), 346 VIDEOEDIT_JAVA_CONSTANT_INIT("BLACK_BORDERS", M4xVSS_kBlackBorders) 347 }; 348 349 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(MediaRendering, MEDIA_RENDERING_CLASS_NAME, 350 M4OSA_NULL, M4OSA_NULL) 351 352 353 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(SlideDirection) 354 { 355 VIDEOEDIT_JAVA_CONSTANT_INIT("RIGHT_OUT_LEFT_IN", M4xVSS_SlideTransition_RightOutLeftIn), 356 VIDEOEDIT_JAVA_CONSTANT_INIT("LEFT_OUT_RIGTH_IN", M4xVSS_SlideTransition_LeftOutRightIn), 357 VIDEOEDIT_JAVA_CONSTANT_INIT("TOP_OUT_BOTTOM_IN", M4xVSS_SlideTransition_TopOutBottomIn), 358 VIDEOEDIT_JAVA_CONSTANT_INIT("BOTTOM_OUT_TOP_IN", M4xVSS_SlideTransition_BottomOutTopIn) 359 }; 360 361 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(SlideDirection, SLIDE_DIRECTION_CLASS_NAME, 362 M4OSA_NULL, M4OSA_NULL) 363 364 365 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(TransitionBehaviour) 366 { 367 VIDEOEDIT_JAVA_CONSTANT_INIT("SPEED_UP", M4VSS3GPP_TransitionBehaviour_SpeedUp), 368 VIDEOEDIT_JAVA_CONSTANT_INIT("LINEAR", M4VSS3GPP_TransitionBehaviour_Linear), 369 VIDEOEDIT_JAVA_CONSTANT_INIT("SPEED_DOWN", M4VSS3GPP_TransitionBehaviour_SpeedDown), 370 VIDEOEDIT_JAVA_CONSTANT_INIT("SLOW_MIDDLE", M4VSS3GPP_TransitionBehaviour_SlowMiddle), 371 VIDEOEDIT_JAVA_CONSTANT_INIT("FAST_MIDDLE", M4VSS3GPP_TransitionBehaviour_FastMiddle) 372 }; 373 374 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(TransitionBehaviour, TRANSITION_BEHAVIOUR_CLASS_NAME, 375 M4OSA_NULL, M4OSA_NULL) 376 377 378 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoEffect) 379 { 380 VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kVideoEffectType_None), 381 VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_FROM_BLACK", M4VSS3GPP_kVideoEffectType_FadeFromBlack), 382 VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_TO_BLACK", M4VSS3GPP_kVideoEffectType_FadeToBlack), 383 VIDEOEDIT_JAVA_CONSTANT_INIT("EXTERNAL", M4VSS3GPP_kVideoEffectType_External), 384 VIDEOEDIT_JAVA_CONSTANT_INIT("BLACK_AND_WHITE", M4xVSS_kVideoEffectType_BlackAndWhite), 385 VIDEOEDIT_JAVA_CONSTANT_INIT("PINK", M4xVSS_kVideoEffectType_Pink), 386 VIDEOEDIT_JAVA_CONSTANT_INIT("GREEN", M4xVSS_kVideoEffectType_Green), 387 VIDEOEDIT_JAVA_CONSTANT_INIT("SEPIA", M4xVSS_kVideoEffectType_Sepia), 388 VIDEOEDIT_JAVA_CONSTANT_INIT("NEGATIVE", M4xVSS_kVideoEffectType_Negative), 389 VIDEOEDIT_JAVA_CONSTANT_INIT("FRAMING", M4xVSS_kVideoEffectType_Framing), 390 VIDEOEDIT_JAVA_CONSTANT_INIT("TEXT", M4xVSS_kVideoEffectType_Text), 391 VIDEOEDIT_JAVA_CONSTANT_INIT("ZOOM_IN", M4xVSS_kVideoEffectType_ZoomIn), 392 VIDEOEDIT_JAVA_CONSTANT_INIT("ZOOM_OUT", M4xVSS_kVideoEffectType_ZoomOut), 393 VIDEOEDIT_JAVA_CONSTANT_INIT("FIFTIES", M4xVSS_kVideoEffectType_Fifties), 394 VIDEOEDIT_JAVA_CONSTANT_INIT("COLORRGB16", M4xVSS_kVideoEffectType_ColorRGB16), 395 VIDEOEDIT_JAVA_CONSTANT_INIT("GRADIENT", M4xVSS_kVideoEffectType_Gradient), 396 }; 397 398 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoEffect, VIDEO_EFFECT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL) 399 400 401 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFormat) 402 { 403 VIDEOEDIT_JAVA_CONSTANT_INIT("NO_VIDEO", M4VIDEOEDITING_kNoneVideo), 404 VIDEOEDIT_JAVA_CONSTANT_INIT("H263", M4VIDEOEDITING_kH263), 405 VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4", M4VIDEOEDITING_kMPEG4), 406 VIDEOEDIT_JAVA_CONSTANT_INIT("H264", M4VIDEOEDITING_kH264), 407 VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_VIDEO", M4VIDEOEDITING_kNullVideo), 408 VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kUnsupportedVideo), 409 }; 410 411 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFormat, VIDEO_FORMAT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL) 412 413 414 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameRate) 415 { 416 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_5_FPS", M4VIDEOEDITING_k5_FPS), 417 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_7_5_FPS", M4VIDEOEDITING_k7_5_FPS), 418 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_10_FPS", M4VIDEOEDITING_k10_FPS), 419 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_12_5_FPS", M4VIDEOEDITING_k12_5_FPS), 420 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_15_FPS", M4VIDEOEDITING_k15_FPS), 421 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_20_FPS", M4VIDEOEDITING_k20_FPS), 422 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_25_FPS", M4VIDEOEDITING_k25_FPS), 423 VIDEOEDIT_JAVA_CONSTANT_INIT("FR_30_FPS", M4VIDEOEDITING_k30_FPS) 424 }; 425 426 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameRate, VIDEO_FRAME_RATE_CLASS_NAME, 427 M4OSA_NULL, M4OSA_NULL) 428 429 430 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameSize) 431 { 432 VIDEOEDIT_JAVA_CONSTANT_INIT("SQCIF", M4VIDEOEDITING_kSQCIF), 433 VIDEOEDIT_JAVA_CONSTANT_INIT("QQVGA", M4VIDEOEDITING_kQQVGA), 434 VIDEOEDIT_JAVA_CONSTANT_INIT("QCIF", M4VIDEOEDITING_kQCIF), 435 VIDEOEDIT_JAVA_CONSTANT_INIT("QVGA", M4VIDEOEDITING_kQVGA), 436 VIDEOEDIT_JAVA_CONSTANT_INIT("CIF", M4VIDEOEDITING_kCIF), 437 VIDEOEDIT_JAVA_CONSTANT_INIT("VGA", M4VIDEOEDITING_kVGA), 438 VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA", M4VIDEOEDITING_kWVGA), 439 VIDEOEDIT_JAVA_CONSTANT_INIT("NTSC", M4VIDEOEDITING_kNTSC), 440 VIDEOEDIT_JAVA_CONSTANT_INIT("nHD", M4VIDEOEDITING_k640_360), 441 VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA16x9", M4VIDEOEDITING_k854_480), 442 VIDEOEDIT_JAVA_CONSTANT_INIT("V720p", M4VIDEOEDITING_k1280_720), 443 VIDEOEDIT_JAVA_CONSTANT_INIT("W720p", M4VIDEOEDITING_k1080_720), 444 VIDEOEDIT_JAVA_CONSTANT_INIT("S720p", M4VIDEOEDITING_k960_720), 445 VIDEOEDIT_JAVA_CONSTANT_INIT("V1080p", M4VIDEOEDITING_k1920_1080) 446 }; 447 448 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameSize, VIDEO_FRAME_SIZE_CLASS_NAME, 449 M4OSA_NULL, M4OSA_NULL) 450 451 VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoTransition) 452 { 453 VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kVideoTransitionType_None), 454 VIDEOEDIT_JAVA_CONSTANT_INIT("CROSS_FADE", M4VSS3GPP_kVideoTransitionType_CrossFade), 455 VIDEOEDIT_JAVA_CONSTANT_INIT("EXTERNAL", M4VSS3GPP_kVideoTransitionType_External), 456 VIDEOEDIT_JAVA_CONSTANT_INIT("ALPHA_MAGIC", M4xVSS_kVideoTransitionType_AlphaMagic), 457 VIDEOEDIT_JAVA_CONSTANT_INIT("SLIDE_TRANSITION", M4xVSS_kVideoTransitionType_SlideTransition), 458 VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_BLACK", M4xVSS_kVideoTransitionType_FadeBlack) 459 }; 460 461 VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoTransition, VIDEO_TRANSITION_CLASS_NAME, 462 M4OSA_NULL, M4OSA_NULL) 463 464 465 VIDEOEDIT_JAVA_DEFINE_FIELDS(AlphaMagic) 466 { 467 VIDEOEDIT_JAVA_FIELD_INIT("file", "Ljava/lang/String;"), 468 VIDEOEDIT_JAVA_FIELD_INIT("blendingPercent", "I" ), 469 VIDEOEDIT_JAVA_FIELD_INIT("invertRotation", "Z" ), 470 VIDEOEDIT_JAVA_FIELD_INIT("rgbWidth", "I" ), 471 VIDEOEDIT_JAVA_FIELD_INIT("rgbHeight", "I" ) 472 }; 473 474 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(AlphaMagic, ALPHA_MAGIC_SETTINGS_CLASS_NAME) 475 476 VIDEOEDIT_JAVA_DEFINE_FIELDS(Properties) 477 { 478 VIDEOEDIT_JAVA_FIELD_INIT("duration", "I"), 479 VIDEOEDIT_JAVA_FIELD_INIT("fileType", "I"), 480 VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I"), 481 VIDEOEDIT_JAVA_FIELD_INIT("videoDuration", "I"), 482 VIDEOEDIT_JAVA_FIELD_INIT("videoBitrate", "I"), 483 VIDEOEDIT_JAVA_FIELD_INIT("width", "I"), 484 VIDEOEDIT_JAVA_FIELD_INIT("height", "I"), 485 VIDEOEDIT_JAVA_FIELD_INIT("averageFrameRate", "F"), 486 VIDEOEDIT_JAVA_FIELD_INIT("profile", "I"), 487 VIDEOEDIT_JAVA_FIELD_INIT("level", "I"), 488 VIDEOEDIT_JAVA_FIELD_INIT("profileSupported", "Z"), 489 VIDEOEDIT_JAVA_FIELD_INIT("levelSupported", "Z"), 490 VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I"), 491 VIDEOEDIT_JAVA_FIELD_INIT("audioDuration", "I"), 492 VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate", "I"), 493 VIDEOEDIT_JAVA_FIELD_INIT("audioChannels", "I"), 494 VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFrequency", "I"), 495 VIDEOEDIT_JAVA_FIELD_INIT("videoRotation", "I") 496 }; 497 498 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Properties, PROPERTIES_CLASS_NAME) 499 500 VIDEOEDIT_JAVA_DEFINE_FIELDS(BackgroundMusic) 501 { 502 VIDEOEDIT_JAVA_FIELD_INIT("file", "Ljava/lang/String;"), 503 VIDEOEDIT_JAVA_FIELD_INIT("fileType", "I" ), 504 VIDEOEDIT_JAVA_FIELD_INIT("insertionTime", "J" ), 505 VIDEOEDIT_JAVA_FIELD_INIT("volumePercent", "I" ), 506 VIDEOEDIT_JAVA_FIELD_INIT("beginLoop", "J" ), 507 VIDEOEDIT_JAVA_FIELD_INIT("endLoop", "J" ), 508 VIDEOEDIT_JAVA_FIELD_INIT("enableDucking", "Z" ), 509 VIDEOEDIT_JAVA_FIELD_INIT("duckingThreshold","I" ), 510 VIDEOEDIT_JAVA_FIELD_INIT("lowVolume", "I" ), 511 VIDEOEDIT_JAVA_FIELD_INIT("isLooping", "Z" ) 512 }; 513 514 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(BackgroundMusic, BACKGROUND_MUSIC_SETTINGS_CLASS_NAME) 515 516 /* 517 VIDEOEDIT_JAVA_DEFINE_FIELDS(BestEditSettings) 518 { 519 VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I"), 520 VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize", "I"), 521 VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I"), 522 VIDEOEDIT_JAVA_FIELD_INIT("audioChannels", "I") 523 }; 524 525 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(BestEditSettings, BEST_EDIT_SETTINGS_CLASS_NAME) 526 */ 527 528 VIDEOEDIT_JAVA_DEFINE_FIELDS(ClipSettings) 529 { 530 VIDEOEDIT_JAVA_FIELD_INIT("clipPath", "Ljava/lang/String;"), 531 VIDEOEDIT_JAVA_FIELD_INIT("fileType", "I" ), 532 VIDEOEDIT_JAVA_FIELD_INIT("beginCutTime", "I" ), 533 VIDEOEDIT_JAVA_FIELD_INIT("endCutTime", "I" ), 534 VIDEOEDIT_JAVA_FIELD_INIT("beginCutPercent", "I" ), 535 VIDEOEDIT_JAVA_FIELD_INIT("endCutPercent", "I" ), 536 VIDEOEDIT_JAVA_FIELD_INIT("panZoomEnabled", "Z" ), 537 VIDEOEDIT_JAVA_FIELD_INIT("panZoomPercentStart", "I" ), 538 VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftXStart", "I" ), 539 VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftYStart", "I" ), 540 VIDEOEDIT_JAVA_FIELD_INIT("panZoomPercentEnd", "I" ), 541 VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftXEnd", "I" ), 542 VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftYEnd", "I" ), 543 VIDEOEDIT_JAVA_FIELD_INIT("mediaRendering", "I" ), 544 VIDEOEDIT_JAVA_FIELD_INIT("rgbWidth", "I" ), 545 VIDEOEDIT_JAVA_FIELD_INIT("rgbHeight", "I" ), 546 VIDEOEDIT_JAVA_FIELD_INIT("rotationDegree", "I" ) 547 }; 548 549 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(ClipSettings, CLIP_SETTINGS_CLASS_NAME) 550 551 552 VIDEOEDIT_JAVA_DEFINE_FIELDS(EditSettings) 553 { 554 VIDEOEDIT_JAVA_FIELD_INIT("clipSettingsArray", "[L"CLIP_SETTINGS_CLASS_NAME";" ), 555 VIDEOEDIT_JAVA_FIELD_INIT("transitionSettingsArray", "[L"TRANSITION_SETTINGS_CLASS_NAME";" ), 556 VIDEOEDIT_JAVA_FIELD_INIT("effectSettingsArray", "[L"EFFECT_SETTINGS_CLASS_NAME";" ), 557 VIDEOEDIT_JAVA_FIELD_INIT("videoFrameRate", "I" ), 558 VIDEOEDIT_JAVA_FIELD_INIT("outputFile", "Ljava/lang/String;" ), 559 VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize", "I" ), 560 VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I" ), 561 VIDEOEDIT_JAVA_FIELD_INIT("videoProfile", "I" ), 562 VIDEOEDIT_JAVA_FIELD_INIT("videoLevel", "I" ), 563 VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I" ), 564 VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFreq", "I" ), 565 VIDEOEDIT_JAVA_FIELD_INIT("maxFileSize", "I" ), 566 VIDEOEDIT_JAVA_FIELD_INIT("audioChannels", "I" ), 567 VIDEOEDIT_JAVA_FIELD_INIT("videoBitrate", "I" ), 568 VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate", "I" ), 569 VIDEOEDIT_JAVA_FIELD_INIT("backgroundMusicSettings",\ 570 "L"BACKGROUND_MUSIC_SETTINGS_CLASS_NAME";"), 571 VIDEOEDIT_JAVA_FIELD_INIT("primaryTrackVolume", "I" ) 572 }; 573 574 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(EditSettings, EDIT_SETTINGS_CLASS_NAME) 575 576 577 VIDEOEDIT_JAVA_DEFINE_FIELDS(EffectSettings) 578 { 579 VIDEOEDIT_JAVA_FIELD_INIT("startTime", "I" ), 580 VIDEOEDIT_JAVA_FIELD_INIT("duration", "I" ), 581 VIDEOEDIT_JAVA_FIELD_INIT("videoEffectType", "I" ), 582 VIDEOEDIT_JAVA_FIELD_INIT("audioEffectType", "I" ), 583 VIDEOEDIT_JAVA_FIELD_INIT("startPercent", "I" ), 584 VIDEOEDIT_JAVA_FIELD_INIT("durationPercent", "I" ), 585 VIDEOEDIT_JAVA_FIELD_INIT("framingFile", "Ljava/lang/String;"), 586 VIDEOEDIT_JAVA_FIELD_INIT("framingBuffer", "[I" ), 587 VIDEOEDIT_JAVA_FIELD_INIT("bitmapType", "I" ), 588 VIDEOEDIT_JAVA_FIELD_INIT("width", "I" ), 589 VIDEOEDIT_JAVA_FIELD_INIT("height", "I" ), 590 VIDEOEDIT_JAVA_FIELD_INIT("topLeftX", "I" ), 591 VIDEOEDIT_JAVA_FIELD_INIT("topLeftY", "I" ), 592 VIDEOEDIT_JAVA_FIELD_INIT("framingResize", "Z" ), 593 VIDEOEDIT_JAVA_FIELD_INIT("framingScaledSize", "I" ), 594 VIDEOEDIT_JAVA_FIELD_INIT("text", "Ljava/lang/String;"), 595 VIDEOEDIT_JAVA_FIELD_INIT("textRenderingData", "Ljava/lang/String;"), 596 VIDEOEDIT_JAVA_FIELD_INIT("textBufferWidth", "I" ), 597 VIDEOEDIT_JAVA_FIELD_INIT("textBufferHeight", "I" ), 598 VIDEOEDIT_JAVA_FIELD_INIT("fiftiesFrameRate", "I" ), 599 VIDEOEDIT_JAVA_FIELD_INIT("rgb16InputColor", "I" ), 600 VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingStartPercent", "I" ), 601 VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingMiddlePercent", "I" ), 602 VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingEndPercent", "I" ), 603 VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingFadeInTimePercent", "I" ), 604 VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingFadeOutTimePercent", "I" ) 605 }; 606 607 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(EffectSettings, EFFECT_SETTINGS_CLASS_NAME) 608 609 610 VIDEOEDIT_JAVA_DEFINE_FIELDS(Engine) 611 { 612 VIDEOEDIT_JAVA_FIELD_INIT("mManualEditContext", "I") 613 }; 614 615 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME) 616 617 618 VIDEOEDIT_JAVA_DEFINE_FIELDS(SlideTransitionSettings) 619 { 620 VIDEOEDIT_JAVA_FIELD_INIT("direction", "I") 621 }; 622 623 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(SlideTransitionSettings, SLIDE_TRANSITION_SETTINGS_CLASS_NAME) 624 625 626 VIDEOEDIT_JAVA_DEFINE_FIELDS(TransitionSettings) 627 { 628 VIDEOEDIT_JAVA_FIELD_INIT("duration", "I" ), 629 VIDEOEDIT_JAVA_FIELD_INIT("videoTransitionType", "I" ), 630 VIDEOEDIT_JAVA_FIELD_INIT("audioTransitionType", "I" ), 631 VIDEOEDIT_JAVA_FIELD_INIT("transitionBehaviour", "I" ), 632 VIDEOEDIT_JAVA_FIELD_INIT("alphaSettings", "L"ALPHA_MAGIC_SETTINGS_CLASS_NAME";" ), 633 VIDEOEDIT_JAVA_FIELD_INIT("slideSettings", "L"SLIDE_TRANSITION_SETTINGS_CLASS_NAME";") 634 }; 635 636 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(TransitionSettings, TRANSITION_SETTINGS_CLASS_NAME) 637 638 639 VIDEOEDIT_JAVA_DEFINE_FIELDS(Version) 640 { 641 VIDEOEDIT_JAVA_FIELD_INIT("major", "I"), 642 VIDEOEDIT_JAVA_FIELD_INIT("minor", "I"), 643 VIDEOEDIT_JAVA_FIELD_INIT("revision", "I") 644 }; 645 646 VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Version, VERSION_CLASS_NAME) 647 648 649 VIDEOEDIT_JAVA_DEFINE_METHODS(Engine) 650 { 651 VIDEOEDIT_JAVA_METHOD_INIT("onProgressUpdate", "(II)V") 652 }; 653 654 VIDEOEDIT_JAVA_DEFINE_METHOD_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME) 655 656 657 static const char* 658 videoEditClasses_getBrandString(M4OSA_UInt32 brand) 659 { 660 static char brandString[11] = "0x00000000"; 661 const char* pBrandString = M4OSA_NULL; 662 M4OSA_UInt8* pBrand = (M4OSA_UInt8*)&brand; 663 M4OSA_UInt32 brandHost = 0; 664 665 // Convert the brand from big endian to host. 666 brandHost = pBrand[0]; 667 brandHost = brandHost << 8; 668 brandHost += pBrand[1]; 669 brandHost = brandHost << 8; 670 brandHost += pBrand[2]; 671 brandHost = brandHost << 8; 672 brandHost += pBrand[3]; 673 674 switch (brandHost) 675 { 676 case M4VIDEOEDITING_BRAND_0000: 677 pBrandString = "0000"; 678 break; 679 case M4VIDEOEDITING_BRAND_3G2A: 680 pBrandString = "3G2A"; 681 break; 682 case M4VIDEOEDITING_BRAND_3GP4: 683 pBrandString = "3GP4"; 684 break; 685 case M4VIDEOEDITING_BRAND_3GP5: 686 pBrandString = "3GP5"; 687 break; 688 case M4VIDEOEDITING_BRAND_3GP6: 689 pBrandString = "3GP6"; 690 break; 691 case M4VIDEOEDITING_BRAND_AVC1: 692 pBrandString = "AVC1"; 693 break; 694 case M4VIDEOEDITING_BRAND_EMP: 695 pBrandString = "EMP"; 696 break; 697 case M4VIDEOEDITING_BRAND_ISOM: 698 pBrandString = "ISOM"; 699 break; 700 case M4VIDEOEDITING_BRAND_MP41: 701 pBrandString = "MP41"; 702 break; 703 case M4VIDEOEDITING_BRAND_MP42: 704 pBrandString = "MP42"; 705 break; 706 case M4VIDEOEDITING_BRAND_VFJ1: 707 pBrandString = "VFJ1"; 708 break; 709 default: 710 M4OSA_chrSPrintf((M4OSA_Char *)brandString, 711 sizeof(brandString) - 1, 712 (M4OSA_Char*)"0x%08X", brandHost); 713 pBrandString = brandString; 714 break; 715 } 716 717 // Return the brand string. 718 return(pBrandString); 719 } 720 721 #ifdef VIDEOEDIT_LOGGING_ENABLED 722 static void 723 videoEditClasses_logFtypBox( 724 M4VIDEOEDITING_FtypBox* pBox, 725 int indentation) 726 { 727 // Check if memory was allocated for the FtypBox. 728 if (M4OSA_NULL != pBox) 729 { 730 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 731 "%*c major_brand: %s", indentation, ' ', 732 videoEditClasses_getBrandString(pBox->major_brand)); 733 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 734 "%*c minor_version: %08X", indentation, ' ', 735 (unsigned int)pBox->minor_version); 736 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 737 "%*c nbCompatibleBrands: %u", indentation, ' ', 738 (unsigned int)pBox->nbCompatibleBrands); 739 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 740 "%*c compatible_brands:", indentation, ' '); 741 indentation += VIDEOEDIT_LOG_INDENTATION; 742 for (int i = 0; (i < (int)pBox->nbCompatibleBrands) &&\ 743 (i < M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS); i++) 744 { 745 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 746 "%*c compatible_brand[%d]: %s", indentation, ' ', 747 i, videoEditClasses_getBrandString(pBox->compatible_brands[i])); 748 } 749 indentation -= VIDEOEDIT_LOG_INDENTATION; 750 } 751 else 752 { 753 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>", 754 indentation, ' '); 755 } 756 } 757 #endif 758 759 760 void 761 videoEditClasses_init( 762 bool* pResult, 763 JNIEnv* pEnv) 764 { 765 // Check if the previous action succeeded. 766 if (*pResult) 767 { 768 // Log the function call. 769 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",\ 770 "videoEditClasses_init()"); 771 772 // Initialize the constants. 773 videoEditJava_initAudioEffectConstants(pResult, pEnv); 774 videoEditJava_initAudioFormatConstants(pResult, pEnv); 775 videoEditJava_initAudioSamplingFrequencyConstants(pResult, pEnv); 776 videoEditJava_initAudioTransitionConstants(pResult, pEnv); 777 videoEditJava_initBitrateConstants(pResult, pEnv); 778 videoEditJava_initClipTypeConstants(pResult, pEnv); 779 videoEditJava_initEngineConstants(pResult, pEnv); 780 videoEditJava_initErrorConstants(pResult, pEnv); 781 videoEditJava_initFileTypeConstants(pResult, pEnv); 782 videoEditJava_initMediaRenderingConstants(pResult, pEnv); 783 videoEditJava_initSlideDirectionConstants(pResult, pEnv); 784 videoEditJava_initTransitionBehaviourConstants(pResult, pEnv); 785 videoEditJava_initVideoEffectConstants(pResult, pEnv); 786 videoEditJava_initVideoFormatConstants(pResult, pEnv); 787 videoEditJava_initVideoFrameRateConstants(pResult, pEnv); 788 videoEditJava_initVideoFrameSizeConstants(pResult, pEnv); 789 videoEditJava_initVideoTransitionConstants(pResult, pEnv); 790 791 // Initialize the fields. 792 videoEditJava_initAlphaMagicFields(pResult, pEnv); 793 videoEditJava_initBackgroundMusicFields(pResult, pEnv); 794 videoEditJava_initClipSettingsFields(pResult, pEnv); 795 videoEditJava_initEditSettingsFields(pResult, pEnv); 796 videoEditJava_initEffectSettingsFields(pResult, pEnv); 797 videoEditJava_initEngineFields(pResult, pEnv); 798 videoEditJava_initSlideTransitionSettingsFields(pResult, pEnv); 799 videoEditJava_initTransitionSettingsFields(pResult, pEnv); 800 videoEditJava_initVersionFields(pResult, pEnv); 801 // Initialize the methods. 802 videoEditJava_initEngineMethods(pResult, pEnv); 803 } 804 } 805 806 void 807 videoEditPropClass_init( 808 bool* pResult, 809 JNIEnv* pEnv) 810 { 811 // Check if the previous action succeeded. 812 if (*pResult) 813 { 814 // Log the function call. 815 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",\ 816 "videoEditPropClass_init()"); 817 818 // Initialize the constants. 819 videoEditJava_initAudioFormatConstants(pResult, pEnv); 820 videoEditJava_initErrorConstants(pResult, pEnv); 821 videoEditJava_initFileTypeConstants(pResult, pEnv); 822 videoEditJava_initVideoFormatConstants(pResult, pEnv); 823 824 // Initialize the fields. 825 videoEditJava_initPropertiesFields(pResult, pEnv); 826 } 827 } 828 829 void 830 videoEditClasses_getAlphaMagicSettings( 831 bool* pResult, 832 JNIEnv* pEnv, 833 jobject object, 834 M4xVSS_AlphaMagicSettings** ppSettings) 835 { 836 VideoEditJava_AlphaMagicFieldIds fieldIds; 837 M4xVSS_AlphaMagicSettings* pSettings = M4OSA_NULL; 838 memset(&fieldIds, 0, sizeof(VideoEditJava_AlphaMagicFieldIds)); 839 840 // Check if the previous action succeeded. 841 if (*pResult) 842 { 843 // Log the function call. 844 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 845 "videoEditClasses_getAlphaMagicSettings()"); 846 847 // Retrieve the field ids. 848 videoEditJava_getAlphaMagicFieldIds(pResult, pEnv, &fieldIds); 849 } 850 851 // Only validate the AlphaMagicSettings if the fields could be located. 852 if (*pResult) 853 { 854 // Check if the clip is set. 855 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 856 (NULL == object), 857 "alphaSettings is null"); 858 } 859 860 // Only retrieve the AlphaMagicSettings if the fields could be located and validated. 861 if (*pResult) 862 { 863 // Allocate memory for the AlphaMagicSettings. 864 pSettings = (M4xVSS_AlphaMagicSettings*)videoEditOsal_alloc(pResult, pEnv, 865 sizeof(M4xVSS_AlphaMagicSettings), "AlphaMagicSettings"); 866 867 // Check if memory could be allocated for the AlphaMagicSettings. 868 if (*pResult) 869 { 870 // Set the alpha magic file path (JPG file). 871 pSettings->pAlphaFilePath = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object, 872 fieldIds.file, M4OSA_NULL); 873 874 // Check if the alpha magic file path is valid. 875 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 876 (M4OSA_NULL == pSettings->pAlphaFilePath), "alphaSettings.file is null"); 877 } 878 879 // Check if the alpha file path could be retrieved. 880 if (*pResult) 881 { 882 // Set the blending percentage between 0 and 100. 883 pSettings->blendingPercent = (M4OSA_UInt8)pEnv->GetIntField(object, 884 fieldIds.blendingPercent); 885 886 // Set the direct effect or reverse. 887 pSettings->isreverse = (M4OSA_Bool)pEnv->GetBooleanField(object, 888 fieldIds.invertRotation); 889 890 // Get the rgb width 891 pSettings->width = (M4OSA_UInt32) pEnv->GetIntField(object, fieldIds.rgbWidth ); 892 893 pSettings->height = (M4OSA_UInt32) pEnv->GetIntField(object, fieldIds.rgbHeight ); 894 895 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 896 "((((((((((path %s", pSettings->pAlphaFilePath); 897 898 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 899 "------- getAlphaMagicSettings width %d", pEnv->GetIntField(object, 900 fieldIds.rgbWidth )); 901 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 902 "-------- getAlphaMagicSettings Height %d", 903 pEnv->GetIntField(object, fieldIds.rgbHeight )); 904 } 905 906 // Check if settings could be set. 907 if (*pResult) 908 { 909 // Return the settings. 910 (*ppSettings) = pSettings; 911 } 912 else 913 { 914 // Free the settings. 915 videoEditClasses_freeAlphaMagicSettings(&pSettings); 916 } 917 } 918 } 919 920 void 921 videoEditClasses_freeAlphaMagicSettings( 922 M4xVSS_AlphaMagicSettings** ppSettings) 923 { 924 // Check if memory was allocated for the AlphaMagicSettings. 925 if (M4OSA_NULL != (*ppSettings)) 926 { 927 // Log the function call. 928 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 929 "videoEditClasses_freeAlphaMagicSettings()"); 930 931 // Free the alpha file path. 932 videoEditOsal_free((*ppSettings)->pAlphaFilePath); 933 (*ppSettings)->pAlphaFilePath = M4OSA_NULL; 934 935 // Free the settings structure. 936 videoEditOsal_free((*ppSettings)); 937 (*ppSettings) = M4OSA_NULL; 938 } 939 } 940 941 #ifdef VIDEOEDIT_LOGGING_ENABLED 942 void 943 videoEditClasses_logAlphaMagicSettings( 944 M4xVSS_AlphaMagicSettings* pSettings, 945 int indentation) 946 { 947 // Check if memory was allocated for the AlphaMagicSettings. 948 if (M4OSA_NULL != pSettings) 949 { 950 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 951 "%*c pAlphaFilePath: %s", indentation, ' ', 952 (M4OSA_NULL != pSettings->pAlphaFilePath) ? \ 953 (char *)pSettings->pAlphaFilePath : "<null>"); 954 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 955 "%*c blendingPercent: %u %%", indentation, ' ', 956 (unsigned int)pSettings->blendingPercent); 957 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 958 "%*c isreverse: %s", indentation, ' ', 959 pSettings->isreverse ? "true" : "false"); 960 } 961 else 962 { 963 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 964 "%*c <null>", indentation, ' '); 965 } 966 } 967 #endif 968 969 970 void 971 videoEditClasses_getBackgroundMusicSettings( 972 bool* pResult, 973 JNIEnv* pEnv, 974 jobject object, 975 M4xVSS_BGMSettings** ppSettings) 976 { 977 VideoEditJava_BackgroundMusicFieldIds fieldIds; 978 M4xVSS_BGMSettings* pSettings = M4OSA_NULL; 979 bool converted = true; 980 memset(&fieldIds, 0, sizeof(VideoEditJava_BackgroundMusicFieldIds)); 981 // Check if the previous action succeeded. 982 if (*pResult) 983 { 984 // Log the function call. 985 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 986 "videoEditClasses_getBackgroundMusicSettings()"); 987 988 // Retrieve the field ids. 989 videoEditJava_getBackgroundMusicFieldIds(pResult, pEnv, &fieldIds); 990 } 991 992 // Only retrieve the BackgroundMusicSettings if the fields could be located. 993 if (*pResult) 994 { 995 // Check if the object is valid. 996 if (NULL != object) 997 { 998 // Allocate memory for the BackgroundMusicSettings. 999 pSettings = (M4xVSS_BGMSettings*)videoEditOsal_alloc(pResult, pEnv, 1000 sizeof(M4xVSS_BGMSettings), "BackgroundMusicSettings"); 1001 1002 // Check if memory could be allocated for the BackgroundMusicSettings. 1003 if (*pResult) 1004 { 1005 // Set the input file path. 1006 pSettings->pFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object, 1007 fieldIds.file, M4OSA_NULL); 1008 1009 // Check if the input file path is valid. 1010 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1011 (M4OSA_NULL == pSettings->pFile), "backgroundMusicSettings.file is null"); 1012 } 1013 1014 // Check if the input file path could be retrieved. 1015 if (*pResult) 1016 { 1017 // Set the file type .3gp, .amr, .mp3. 1018 pSettings->FileType = M4VIDEOEDITING_kFileType_PCM; 1019 /*(M4VIDEOEDITING_FileType)videoEditJava_getClipTypeJavaToC( 1020 &converted, pEnv->GetIntField(object, fieldIds.fileType));*/ 1021 1022 // Check if the file type is valid. 1023 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1024 !converted, "backgroundMusicSettings.fileType is invalid"); 1025 } 1026 1027 // Check if the file type could be retrieved. 1028 if (*pResult) 1029 { 1030 // Set the time, in milliseconds, at which the added audio track is inserted. 1031 pSettings->uiAddCts = (M4OSA_UInt32)pEnv->GetLongField(object, 1032 fieldIds.insertionTime); 1033 1034 // Set the volume, in percentage (0..100), of the added audio track. 1035 pSettings->uiAddVolume = (M4OSA_UInt32)pEnv->GetIntField(object, 1036 fieldIds.volumePercent); 1037 1038 // Set the start time of the loop in milli seconds. 1039 pSettings->uiBeginLoop = (M4OSA_UInt32)pEnv->GetLongField(object, 1040 fieldIds.beginLoop); 1041 1042 // Set the end time of the loop in milli seconds. 1043 pSettings->uiEndLoop = (M4OSA_UInt32)pEnv->GetLongField(object, 1044 fieldIds.endLoop); 1045 // Set the end time of the loop in milli seconds. 1046 pSettings->b_DuckingNeedeed = 1047 (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.enableDucking); 1048 1049 // Set the end time of the loop in milli seconds. 1050 pSettings->InDucking_threshold = 1051 (M4OSA_Int32)pEnv->GetIntField(object, fieldIds.duckingThreshold); 1052 1053 // Set the end time of the loop in milli seconds. 1054 pSettings->lowVolume = 1055 (M4OSA_Float)(((M4OSA_Float)pEnv->GetIntField(object, fieldIds.lowVolume))); 1056 1057 // Set the end time of the loop in milli seconds. 1058 pSettings->bLoop = (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.isLooping); 1059 1060 // Set sampling freq and channels 1061 pSettings->uiSamplingFrequency = M4VIDEOEDITING_k32000_ASF; 1062 pSettings->uiNumChannels = 2; 1063 } 1064 1065 // Check if settings could be set. 1066 if (*pResult) 1067 { 1068 // Return the settings. 1069 (*ppSettings) = pSettings; 1070 } 1071 else 1072 { 1073 // Free the settings. 1074 videoEditClasses_freeBackgroundMusicSettings(&pSettings); 1075 } 1076 } 1077 } 1078 } 1079 1080 void 1081 videoEditClasses_freeBackgroundMusicSettings( 1082 M4xVSS_BGMSettings** ppSettings) 1083 { 1084 // Check if memory was allocated for the BackgroundMusicSettings. 1085 if (M4OSA_NULL != (*ppSettings)) 1086 { 1087 // Log the function call. 1088 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1089 "videoEditClasses_freeBackgroundMusicSettings()"); 1090 1091 // Free the input file path. 1092 videoEditOsal_free((*ppSettings)->pFile); 1093 (*ppSettings)->pFile = M4OSA_NULL; 1094 1095 // Free the settings structure. 1096 videoEditOsal_free((*ppSettings)); 1097 (*ppSettings) = M4OSA_NULL; 1098 } 1099 } 1100 1101 #ifdef VIDEOEDIT_LOGGING_ENABLED 1102 void 1103 videoEditClasses_logBackgroundMusicSettings( 1104 M4xVSS_BGMSettings* pSettings, 1105 int indentation) 1106 { 1107 // Check if memory was allocated for the BackgroundMusicSettings. 1108 if (M4OSA_NULL != pSettings) 1109 { 1110 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c pFile: %s", 1111 indentation, ' ', 1112 (M4OSA_NULL != pSettings->pFile) ? (char *)pSettings->pFile : "<null>"); 1113 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1114 "%*c FileType: %s", indentation, ' ', 1115 videoEditJava_getClipTypeString(pSettings->FileType)); 1116 1117 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiAddCts: %u ms", 1118 indentation, ' ', (unsigned int)pSettings->uiAddCts); 1119 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiAddVolume: %u %%", 1120 indentation, ' ', (unsigned int)pSettings->uiAddVolume); 1121 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiBeginLoop: %u ms", 1122 indentation, ' ', (unsigned int)pSettings->uiBeginLoop); 1123 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiEndLoop: %u ms", 1124 indentation, ' ', (unsigned int)pSettings->uiEndLoop); 1125 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c b_DuckingNeedeed:\ 1126 %u ", indentation, ' ', (bool)pSettings->b_DuckingNeedeed); 1127 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c InDucking_threshold: \ 1128 %u ms", indentation, ' ', (unsigned int)pSettings->InDucking_threshold); 1129 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c lowVolume: %2.2f ",\ 1130 indentation, ' ', (float)pSettings->lowVolume); 1131 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c bLoop: %u ms",\ 1132 indentation, ' ', (bool)pSettings->bLoop); 1133 } 1134 else 1135 { 1136 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>", 1137 indentation, ' '); 1138 } 1139 } 1140 #endif 1141 1142 #ifdef VIDEOEDIT_LOGGING_ENABLED 1143 void 1144 videoEditClasses_logClipProperties( 1145 M4VIDEOEDITING_ClipProperties* pProperties, 1146 int indentation) 1147 { 1148 // Check if memory was allocated for the ClipProperties. 1149 if (M4OSA_NULL != pProperties) 1150 { 1151 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1152 "%*c bAnalysed: %s", indentation, ' ', 1153 pProperties->bAnalysed ? "true" : "false"); 1154 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1155 "%*c Version: %d.%d.%d", indentation, ' ', 1156 pProperties->Version[0], pProperties->Version[1], pProperties->Version[2]); 1157 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1158 "%*c uiClipDuration: %u", indentation, ' ', 1159 (unsigned int)pProperties->uiClipDuration); 1160 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1161 "%*c FileType: %s", indentation, ' ', 1162 videoEditJava_getClipTypeString(pProperties->FileType)); 1163 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c ftyp:", 1164 indentation, ' '); 1165 videoEditClasses_logFtypBox(&pProperties->ftyp, indentation + VIDEOEDIT_LOG_INDENTATION); 1166 1167 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1168 "%*c VideoStreamType: %s", indentation, ' ', 1169 videoEditJava_getVideoFormatString(pProperties->VideoStreamType)); 1170 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1171 "%*c uiClipVideoDuration: %u", indentation, ' ', 1172 (unsigned int)pProperties->uiClipVideoDuration); 1173 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1174 "%*c uiVideoBitrate: %s", indentation, ' ', 1175 videoEditJava_getBitrateString(pProperties->uiVideoBitrate)); 1176 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1177 "%*c uiVideoMaxAuSize: %u", indentation, ' ', 1178 (unsigned int)pProperties->uiVideoMaxAuSize); 1179 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1180 "%*c uiVideoWidth: %u", indentation, ' ', 1181 (unsigned int)pProperties->uiVideoWidth); 1182 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1183 "%*c uiVideoHeight: %u", indentation, ' ', 1184 (unsigned int)(unsigned int)pProperties->uiVideoHeight); 1185 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1186 "%*c uiVideoTimeScale: %u", indentation, ' ', 1187 (unsigned int)pProperties->uiVideoTimeScale); 1188 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1189 "%*c fAverageFrameRate: %.3f", indentation, ' ', 1190 pProperties->fAverageFrameRate); 1191 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1192 "%*c bMPEG4dataPartition: %s", indentation, ' ', 1193 pProperties->bMPEG4dataPartition ? "true" : "false"); 1194 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1195 "%*c bMPEG4rvlc: %s", indentation, ' ', 1196 pProperties->bMPEG4rvlc ? "true" : "false"); 1197 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1198 "%*c bMPEG4resynchMarker: %s", indentation, ' ', 1199 pProperties->bMPEG4resynchMarker ? "true" : "false"); 1200 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1201 "%*c AudioStreamType: %s", indentation, ' ', 1202 videoEditJava_getAudioFormatString(pProperties->AudioStreamType)); 1203 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1204 "%*c uiClipAudioDuration: %u", indentation, ' ', 1205 (unsigned int)pProperties->uiClipAudioDuration); 1206 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1207 "%*c uiAudioBitrate: %s", indentation, ' ', 1208 videoEditJava_getBitrateString(pProperties->uiAudioBitrate)); 1209 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1210 "%*c uiAudioMaxAuSize: %u", indentation, ' ', 1211 (unsigned int)pProperties->uiAudioMaxAuSize); 1212 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1213 "%*c uiNbChannels: %u", indentation, ' ', 1214 (unsigned int)pProperties->uiNbChannels); 1215 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1216 "%*c uiSamplingFrequency: %u", indentation, ' ', 1217 (unsigned int)pProperties->uiSamplingFrequency); 1218 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1219 "%*c uiExtendedSamplingFrequency: %u", indentation, ' ', 1220 (unsigned int)pProperties->uiExtendedSamplingFrequency); 1221 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1222 "%*c uiDecodedPcmSize: %u", indentation, ' ', 1223 (unsigned int)pProperties->uiDecodedPcmSize); 1224 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1225 "%*c bVideoIsEditable: %s", indentation, ' ', 1226 pProperties->bVideoIsEditable ? "true" : "false"); 1227 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1228 "%*c bAudioIsEditable: %s", indentation, ' ', 1229 pProperties->bAudioIsEditable ? "true" : "false"); 1230 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1231 "%*c bVideoIsCompatibleWithMasterClip: %s", indentation, ' ', 1232 pProperties->bVideoIsCompatibleWithMasterClip ? "true" : "false"); 1233 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1234 "%*c bAudioIsCompatibleWithMasterClip: %s", indentation, ' ', 1235 pProperties->bAudioIsCompatibleWithMasterClip ? "true" : "false"); 1236 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1237 "%*c uiClipAudioVolumePercentage: %d", indentation, ' ', 1238 pProperties->uiClipAudioVolumePercentage); 1239 } 1240 else 1241 { 1242 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>", 1243 indentation, ' '); 1244 } 1245 } 1246 #endif 1247 1248 void 1249 videoEditClasses_getClipSettings( 1250 bool* pResult, 1251 JNIEnv* pEnv, 1252 jobject object, 1253 M4VSS3GPP_ClipSettings** ppSettings) 1254 { 1255 1256 VideoEditJava_ClipSettingsFieldIds fieldIds; 1257 M4VSS3GPP_ClipSettings* pSettings = M4OSA_NULL; 1258 M4OSA_ERR result = M4NO_ERROR; 1259 bool converted = true; 1260 memset(&fieldIds, 0, sizeof(VideoEditJava_ClipSettingsFieldIds)); 1261 // Check if the previous action succeeded. 1262 if (*pResult) 1263 { 1264 // Log the function call. 1265 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1266 "videoEditClasses_getClipSettings()"); 1267 1268 // Retrieve the field ids. 1269 videoEditJava_getClipSettingsFieldIds(pResult, pEnv, &fieldIds); 1270 } 1271 1272 // Only validate the ClipSettings if the fields could be located. 1273 if (*pResult) 1274 { 1275 // Check if the clip is set. 1276 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1277 (NULL == object), 1278 "clip is null"); 1279 } 1280 1281 // Only retrieve the ClipSettings if the fields could be located and validated. 1282 if (*pResult) 1283 { 1284 // Allocate memory for the ClipSettings. 1285 pSettings = (M4VSS3GPP_ClipSettings *)videoEditOsal_alloc(pResult, pEnv, 1286 sizeof(M4VSS3GPP_ClipSettings), "ClipSettings"); 1287 1288 // Check if memory could be allocated for the ClipSettings. 1289 if (*pResult) 1290 { 1291 // Log the API call. 1292 VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4xVSS_CreateClipSettings()"); 1293 1294 // Initialize the ClipSettings. 1295 result = M4xVSS_CreateClipSettings(pSettings, NULL, 0, 0); 1296 1297 // Log the result. 1298 VIDEOEDIT_LOG_RESULT(ANDROID_LOG_INFO, "VIDEO_EDITOR", 1299 videoEditOsal_getResultString(result)); 1300 1301 // Check if the initialization succeeded. 1302 videoEditJava_checkAndThrowRuntimeException(pResult, pEnv, 1303 (M4NO_ERROR != result), result); 1304 } 1305 1306 // Check if the allocation and initialization succeeded 1307 //(required because pSettings is dereferenced). 1308 if (*pResult) 1309 { 1310 // Set the input file path. 1311 pSettings->pFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object, 1312 fieldIds.clipPath, &pSettings->filePathSize); 1313 1314 // Check if the file path is valid. 1315 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1316 (M4OSA_NULL == pSettings->pFile), "clip.clipPath is null"); 1317 } 1318 1319 // Check if the input file could be retrieved. 1320 if (*pResult) 1321 { 1322 // Set the file type .3gp, .amr, .mp3. 1323 pSettings->FileType = (M4VIDEOEDITING_FileType)videoEditJava_getClipTypeJavaToC( 1324 &converted, pEnv->GetIntField(object, fieldIds.fileType)); 1325 1326 if (( pSettings->FileType == M4VIDEOEDITING_kFileType_JPG) || 1327 ( pSettings->FileType == M4VIDEOEDITING_kFileType_PNG)) { 1328 pSettings->FileType = M4VIDEOEDITING_kFileType_ARGB8888; 1329 } 1330 1331 // Check if the file type is valid. 1332 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1333 !converted, "clip.fileType is invalid"); 1334 } 1335 1336 // Check if the file type could be retrieved. 1337 if (*pResult) 1338 { 1339 // Set the begin cut time, in milliseconds. 1340 pSettings->uiBeginCutTime = 1341 (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.beginCutTime); 1342 1343 // Set the end cut time, in milliseconds. 1344 pSettings->uiEndCutTime = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.endCutTime); 1345 1346 // Set the begin cut time, in percent of clip duration (only for 3GPP clip !). 1347 pSettings->xVSS.uiBeginCutPercent = 1348 (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.beginCutPercent); 1349 1350 // Set the end cut time, in percent of clip duration (only for 3GPP clip !). 1351 pSettings->xVSS.uiEndCutPercent = 1352 (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.endCutPercent); 1353 1354 // Set the duration of the clip, if different from 0, 1355 // has priority on uiEndCutTime or uiEndCutPercent. 1356 pSettings->xVSS.uiDuration = 0; 1357 1358 // Set whether or not the pan and zoom mode is enabled. 1359 pSettings->xVSS.isPanZoom = 1360 (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.panZoomEnabled); 1361 1362 // Set the pan and zoom start zoom percentage. 1363 pSettings->xVSS.PanZoomXa = 1364 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomPercentStart); 1365 1366 // Set the pan and zoom start x. 1367 pSettings->xVSS.PanZoomTopleftXa = 1368 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftXStart); 1369 1370 // Set the pan and zoom start y. 1371 pSettings->xVSS.PanZoomTopleftYa = 1372 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftYStart); 1373 1374 // Set the pan and zoom end zoom percentage. 1375 pSettings->xVSS.PanZoomXb = 1376 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomPercentEnd); 1377 1378 // Set the pan and zoom end x. 1379 pSettings->xVSS.PanZoomTopleftXb = 1380 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftXEnd); 1381 1382 // Set the pan and zoom end y. 1383 pSettings->xVSS.PanZoomTopleftYb = 1384 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftYEnd); 1385 1386 // Set the media rendering mode, only used with JPEG to crop, resize, 1387 // or render black borders. 1388 pSettings->xVSS.MediaRendering = 1389 (M4xVSS_MediaRendering)videoEditJava_getMediaRenderingJavaToC( 1390 &converted, pEnv->GetIntField(object,fieldIds.mediaRendering)); 1391 1392 // Check if the media rendering is valid. 1393 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted, 1394 "clip.mediaRendering is invalid"); 1395 1396 // Capture the rgb file width and height 1397 pSettings->ClipProperties.uiStillPicWidth = 1398 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.rgbFileWidth); 1399 pSettings->ClipProperties.uiStillPicHeight = 1400 (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.rgbFileHeight); 1401 1402 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", \ 1403 "getClipSettings-- rgbFileWidth %d ", 1404 pSettings->ClipProperties.uiStillPicWidth); 1405 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", \ 1406 "getClipSettings-- rgbFileHeight %d ", 1407 pSettings->ClipProperties.uiStillPicHeight); 1408 1409 // Set the video rotation degree 1410 pSettings->ClipProperties.videoRotationDegrees = 1411 (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.rotationDegree); 1412 } 1413 1414 // Check if settings could be set. 1415 if (*pResult) 1416 { 1417 // Return the settings. 1418 (*ppSettings) = pSettings; 1419 } 1420 else 1421 { 1422 // Free the settings. 1423 videoEditClasses_freeClipSettings(&pSettings); 1424 } 1425 } 1426 } 1427 1428 void 1429 videoEditClasses_createClipSettings( 1430 bool* pResult, 1431 JNIEnv* pEnv, 1432 M4VSS3GPP_ClipSettings* pSettings, 1433 jobject* pObject) 1434 { 1435 VideoEditJava_ClipSettingsFieldIds fieldIds; 1436 jclass clazz = NULL; 1437 jobject object = NULL; 1438 memset(&fieldIds, 0, sizeof(VideoEditJava_ClipSettingsFieldIds)); 1439 1440 // Check if the previous action succeeded. 1441 if (*pResult) 1442 { 1443 // Log the function call. 1444 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1445 "videoEditClasses_createClipSettings()"); 1446 1447 // Retrieve the class. 1448 videoEditJava_getClipSettingsClass(pResult, pEnv, &clazz); 1449 1450 // Retrieve the field ids. 1451 videoEditJava_getClipSettingsFieldIds(pResult, pEnv, &fieldIds); 1452 } 1453 1454 // Only create an object if the class and fields could be located. 1455 if (*pResult) 1456 { 1457 // Allocate a new object. 1458 object = pEnv->AllocObject(clazz); 1459 if (NULL != object) 1460 { 1461 // Set the clipPath field. 1462 pEnv->SetObjectField(object, fieldIds.clipPath, NULL); 1463 1464 // Set the fileType field. 1465 pEnv->SetIntField(object, fieldIds.fileType, videoEditJava_getClipTypeCToJava( 1466 pSettings->FileType)); 1467 1468 // Set the beginCutTime field. 1469 pEnv->SetIntField(object, fieldIds.beginCutTime, pSettings->uiBeginCutTime); 1470 1471 // Set the endCutTime field. 1472 pEnv->SetIntField(object, fieldIds.endCutTime, pSettings->uiEndCutTime); 1473 1474 // Set the beginCutPercent field. 1475 pEnv->SetIntField(object, fieldIds.beginCutPercent, pSettings->xVSS.uiBeginCutPercent); 1476 1477 // Set the endCutPercent field. 1478 pEnv->SetIntField(object, fieldIds.endCutPercent, pSettings->xVSS.uiEndCutPercent); 1479 1480 // Set the panZoomEnabled field. 1481 pEnv->SetBooleanField(object, fieldIds.panZoomEnabled, pSettings->xVSS.isPanZoom); 1482 1483 // Set the panZoomPercentStart field. 1484 pEnv->SetIntField(object, fieldIds.panZoomPercentStart, 1485 (1000 - pSettings->xVSS.PanZoomXa)); 1486 1487 // Set the panZoomTopLeftXStart field. 1488 pEnv->SetIntField(object, fieldIds.panZoomTopLeftXStart, 1489 pSettings->xVSS.PanZoomTopleftXa); 1490 1491 // Set the panZoomTopLeftYStart field. 1492 pEnv->SetIntField(object, fieldIds.panZoomTopLeftYStart, 1493 pSettings->xVSS.PanZoomTopleftYa); 1494 1495 // Set the panZoomPercentEnd field. 1496 pEnv->SetIntField(object, fieldIds.panZoomPercentEnd, 1497 (1000 - pSettings->xVSS.PanZoomXb)); 1498 1499 // Set the panZoomTopLeftXEnd field. 1500 pEnv->SetIntField(object, fieldIds.panZoomTopLeftXEnd, 1501 pSettings->xVSS.PanZoomTopleftXb); 1502 1503 // Set the panZoomTopLeftYEnd field. 1504 pEnv->SetIntField(object, fieldIds.panZoomTopLeftYEnd, 1505 pSettings->xVSS.PanZoomTopleftYb); 1506 1507 // Set the mediaRendering field. 1508 pEnv->SetIntField(object, fieldIds.mediaRendering, 1509 videoEditJava_getMediaRenderingCToJava(pSettings->xVSS.MediaRendering)); 1510 1511 // Set the rgb file width and height 1512 pEnv->SetIntField(object, fieldIds.rgbFileWidth, 1513 pSettings->ClipProperties.uiStillPicWidth ); 1514 1515 pEnv->SetIntField(object, fieldIds.rgbFileHeight, 1516 pSettings->ClipProperties.uiStillPicHeight ); 1517 1518 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1519 "rgbFileWeight %d rgbFileHeight %d ", 1520 pSettings->ClipProperties.uiStillPicWidth , 1521 pSettings->ClipProperties.uiStillPicHeight); 1522 1523 // Set the video rotation 1524 pEnv->SetIntField(object, fieldIds.rotationDegree, 1525 pSettings->ClipProperties.videoRotationDegrees); 1526 1527 // Return the object. 1528 (*pObject) = object; 1529 } 1530 } 1531 } 1532 void 1533 videoEditPropClass_createProperties( 1534 bool* pResult, 1535 JNIEnv* pEnv, 1536 VideoEditPropClass_Properties* pProperties, 1537 jobject* pObject) 1538 { 1539 VideoEditJava_PropertiesFieldIds fieldIds; 1540 jclass clazz = NULL; 1541 jobject object = NULL; 1542 memset(&fieldIds, 0, sizeof(VideoEditJava_PropertiesFieldIds)); 1543 // Check if the previous action succeeded. 1544 if (*pResult) 1545 { 1546 // Log the function call. 1547 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 1548 "videoEditPropClass_createProperties()"); 1549 1550 // Retrieve the class. 1551 videoEditJava_getPropertiesClass(pResult, pEnv, &clazz); 1552 1553 // Retrieve the field ids. 1554 videoEditJava_getPropertiesFieldIds(pResult, pEnv, &fieldIds); 1555 } 1556 1557 // Only create an object if the class and fields could be located. 1558 if (*pResult) 1559 { 1560 // Allocate a new object. 1561 object = pEnv->AllocObject(clazz); 1562 if (NULL != object) 1563 { 1564 // Set the duration field. 1565 pEnv->SetIntField(object, fieldIds.duration, pProperties->uiClipDuration); 1566 1567 // Set the fileType field. 1568 pEnv->SetIntField(object, fieldIds.fileType, 1569 videoEditJava_getFileTypeCToJava(pProperties->FileType)); 1570 1571 // Set the videoFormat field. 1572 pEnv->SetIntField(object, fieldIds.videoFormat, 1573 videoEditJava_getVideoFormatCToJava(pProperties->VideoStreamType)); 1574 1575 // Set the videoDuration field. 1576 pEnv->SetIntField(object, fieldIds.videoDuration, pProperties->uiClipVideoDuration); 1577 1578 // Set the videoBitrate field. 1579 pEnv->SetIntField(object, fieldIds.videoBitrate, pProperties->uiVideoBitrate); 1580 1581 // Set the width field. 1582 pEnv->SetIntField(object, fieldIds.width, pProperties->uiVideoWidth); 1583 1584 // Set the height field. 1585 pEnv->SetIntField(object, fieldIds.height, pProperties->uiVideoHeight); 1586 1587 // Set the averageFrameRate field. 1588 pEnv->SetFloatField(object, fieldIds.averageFrameRate, pProperties->fAverageFrameRate); 1589 1590 // Set the profile field. 1591 pEnv->SetIntField(object, fieldIds.profile, 1592 pProperties->uiVideoProfile); 1593 1594 // Set the level field. 1595 pEnv->SetIntField(object, fieldIds.level, 1596 pProperties->uiVideoLevel); 1597 1598 // Set whether profile supported 1599 pEnv->SetBooleanField(object, fieldIds.profileSupported, 1600 pProperties->bProfileSupported); 1601 1602 // Set whether level supported 1603 pEnv->SetBooleanField(object, fieldIds.levelSupported, 1604 pProperties->bLevelSupported); 1605 1606 // Set the audioFormat field. 1607 pEnv->SetIntField(object, fieldIds.audioFormat, 1608 videoEditJava_getAudioFormatCToJava(pProperties->AudioStreamType)); 1609 1610 // Set the audioDuration field. 1611 pEnv->SetIntField(object, fieldIds.audioDuration, pProperties->uiClipAudioDuration); 1612 1613 // Set the audioBitrate field. 1614 pEnv->SetIntField(object, fieldIds.audioBitrate, pProperties->uiAudioBitrate); 1615 1616 // Set the audioChannels field. 1617 pEnv->SetIntField(object, fieldIds.audioChannels, pProperties->uiNbChannels); 1618 1619 // Set the audioSamplingFrequency field. 1620 pEnv->SetIntField(object, fieldIds.audioSamplingFrequency, 1621 pProperties->uiSamplingFrequency); 1622 1623 // Set the video rotation field. 1624 pEnv->SetIntField(object, fieldIds.videoRotation, pProperties->uiRotation); 1625 1626 // Return the object. 1627 (*pObject) = object; 1628 } 1629 } 1630 } 1631 1632 void 1633 videoEditClasses_freeClipSettings( 1634 M4VSS3GPP_ClipSettings** ppSettings) 1635 { 1636 // Check if memory was allocated for the ClipSettings. 1637 if (M4OSA_NULL != (*ppSettings)) 1638 { 1639 // Log the function call. 1640 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1641 "videoEditClasses_freeClipSettings()"); 1642 1643 // Free the input file path. 1644 videoEditOsal_free((*ppSettings)->pFile); 1645 (*ppSettings)->pFile = M4OSA_NULL; 1646 (*ppSettings)->filePathSize = 0; 1647 1648 // Free the clip settings. 1649 M4xVSS_FreeClipSettings((*ppSettings)); 1650 1651 // Free the settings structure. 1652 videoEditOsal_free((*ppSettings)); 1653 (*ppSettings) = M4OSA_NULL; 1654 } 1655 } 1656 1657 #ifdef VIDEOEDIT_LOGGING_ENABLED 1658 void 1659 videoEditClasses_logClipSettings( 1660 M4VSS3GPP_ClipSettings* pSettings, 1661 int indentation) 1662 { 1663 // Check if memory was allocated for the ClipSettings. 1664 if (M4OSA_NULL != pSettings) 1665 { 1666 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1667 "%*c pFile: %s", indentation, ' ', 1668 (M4OSA_NULL != pSettings->pFile) ? (char*)pSettings->pFile : "<null>"); 1669 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1670 "%*c FileType: %s", indentation, ' ', 1671 videoEditJava_getClipTypeString(pSettings->FileType)); 1672 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1673 "%*c filePathSize: %u", indentation, ' ', 1674 (unsigned int)pSettings->filePathSize); 1675 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1676 "%*c ClipProperties:", indentation, ' '); 1677 videoEditClasses_logClipProperties(&pSettings->ClipProperties, 1678 indentation + VIDEOEDIT_LOG_INDENTATION); 1679 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1680 "%*c uiBeginCutTime: %u ms", indentation, ' ', 1681 (unsigned int)pSettings->uiBeginCutTime); 1682 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1683 "%*c uiEndCutTime: %u ms", indentation, ' ', 1684 (unsigned int)pSettings->uiEndCutTime); 1685 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1686 "%*c uiBeginCutPercent: %u %%", indentation, ' ', 1687 (unsigned int)pSettings->xVSS.uiBeginCutPercent); 1688 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1689 "%*c uiEndCutPercent: %u %%", indentation, ' ', 1690 (unsigned int)pSettings->xVSS.uiEndCutPercent); 1691 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1692 "%*c uiDuration: %u ms", indentation, ' ', 1693 (unsigned int)pSettings->xVSS.uiDuration); 1694 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1695 "%*c isPanZoom: %s", indentation, ' ', 1696 pSettings->xVSS.isPanZoom ? "true" : "false"); 1697 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1698 "%*c PanZoomXa: %d ms", indentation, ' ', 1699 pSettings->xVSS.PanZoomXa); 1700 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1701 "%*c PanZoomTopleftXa: %d ms", indentation, ' ', 1702 pSettings->xVSS.PanZoomTopleftXa); 1703 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1704 "%*c PanZoomTopleftYa: %d ms", indentation, ' ', 1705 pSettings->xVSS.PanZoomTopleftYa); 1706 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1707 "%*c PanZoomXb: %d ms", indentation, ' ', 1708 pSettings->xVSS.PanZoomXb); 1709 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1710 "%*c PanZoomTopleftXb: %d ms", indentation, ' ', 1711 pSettings->xVSS.PanZoomTopleftXb); 1712 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1713 "%*c PanZoomTopleftYb: %d ms", indentation, ' ', 1714 pSettings->xVSS.PanZoomTopleftYb); 1715 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1716 "%*c MediaRendering: %s", indentation, ' ', 1717 videoEditJava_getMediaRenderingString(pSettings->xVSS.MediaRendering)); 1718 } 1719 else 1720 { 1721 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1722 "%*c <null>", indentation, ' '); 1723 } 1724 } 1725 #endif 1726 1727 1728 void 1729 videoEditClasses_getEditSettings( 1730 bool* pResult, 1731 JNIEnv* pEnv, 1732 jobject object, 1733 M4VSS3GPP_EditSettings** ppSettings, 1734 bool flag) 1735 { 1736 VideoEditJava_EditSettingsFieldIds fieldIds; 1737 jobjectArray clipSettingsArray = NULL; 1738 jsize clipSettingsArraySize = 0; 1739 jobject clipSettings = NULL; 1740 jobjectArray transitionSettingsArray = NULL; 1741 jsize transitionSettingsArraySize = 0; 1742 jobject transitionSettings = NULL; 1743 jobjectArray effectSettingsArray = NULL; 1744 jsize effectSettingsArraySize = 0; 1745 jobject effectSettings = NULL; 1746 jobject backgroundMusicSettings = NULL; 1747 int audioChannels = 0; 1748 M4VSS3GPP_EditSettings* pSettings = M4OSA_NULL; 1749 bool converted = true; 1750 memset(&fieldIds, 0, sizeof(VideoEditJava_EditSettingsFieldIds)); 1751 // Check if the previous action succeeded. 1752 if (*pResult) 1753 { 1754 // Log the function call. 1755 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 1756 "videoEditClasses_getEditSettings()"); 1757 1758 // Retrieve the field ids. 1759 videoEditJava_getEditSettingsFieldIds(pResult, pEnv, &fieldIds); 1760 } 1761 1762 // Only retrieve the EditSettings if the previous action succeeded. 1763 if (*pResult) 1764 { 1765 // Check if the object is valid. 1766 if (NULL != object) 1767 { 1768 // Retrieve the clipSettingsArray. 1769 videoEditJava_getArray(pResult, pEnv, object, 1770 fieldIds.clipSettingsArray, 1771 &clipSettingsArray, 1772 &clipSettingsArraySize); 1773 1774 // Retrieve the transitionSettingsArray. 1775 videoEditJava_getArray(pResult, pEnv, object, 1776 fieldIds.transitionSettingsArray, 1777 &transitionSettingsArray, 1778 &transitionSettingsArraySize); 1779 1780 // Retrieve the effectSettingsArray. 1781 videoEditJava_getArray(pResult, pEnv, object, 1782 fieldIds.effectSettingsArray, 1783 &effectSettingsArray, 1784 &effectSettingsArraySize); 1785 1786 // Retrieve the backgroundMusicSettings. 1787 videoEditJava_getObject(pResult, pEnv, object, fieldIds.backgroundMusicSettings, 1788 &backgroundMusicSettings); 1789 1790 // Check if the arrays and background music settings object could be retrieved. 1791 if (*pResult) 1792 { 1793 // Retrieve the number of channels. 1794 audioChannels = pEnv->GetIntField(object, fieldIds.audioChannels); 1795 } 1796 } 1797 } 1798 1799 // Only validate the EditSettings if the fields could be located. 1800 if (*pResult) 1801 { 1802 // Check if there is at least one clip. 1803 //videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1804 // (clipSettingsArraySize < 1), 1805 // "there should be at least one clip"); 1806 if(clipSettingsArraySize < 1) { 1807 return; 1808 } 1809 if(flag) 1810 { 1811 // Check if there are clips. 1812 if ((clipSettingsArraySize != 0) || (transitionSettingsArraySize != 0)) 1813 { 1814 // The number of transitions must be equal to the number of clips - 1. 1815 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1816 (clipSettingsArraySize != (transitionSettingsArraySize + 1)), 1817 "the number of transitions should be equal to the number of clips - 1"); 1818 } 1819 } 1820 } 1821 1822 // Only retrieve the EditSettings if the fields could be located. 1823 if (*pResult) 1824 { 1825 // Check if the object is valid. 1826 if (NULL != object) 1827 { 1828 // Allocate memory for the EditSettings. 1829 pSettings = (M4VSS3GPP_EditSettings*)videoEditOsal_alloc(pResult, pEnv, 1830 sizeof(M4VSS3GPP_EditSettings), "EditSettings"); 1831 1832 // Check if memory could be allocated for the EditSettings. 1833 if (*pResult) 1834 { 1835 // Set the number of clips that will be edited. 1836 pSettings->uiClipNumber = clipSettingsArraySize; 1837 1838 // Check if the clip settings array contains items. 1839 if (clipSettingsArraySize > 0) 1840 { 1841 // Allocate memory for the clip settings array. 1842 pSettings->pClipList = (M4VSS3GPP_ClipSettings **)videoEditOsal_alloc(pResult, 1843 pEnv, 1844 clipSettingsArraySize * sizeof(M4VSS3GPP_ClipSettings *), 1845 "ClipSettingsArray"); 1846 if (*pResult) 1847 { 1848 // Loop over all clip settings objects. 1849 for (int i = 0; ((*pResult) && (i < clipSettingsArraySize)); i++) 1850 { 1851 // Get the clip settings object. 1852 clipSettings = pEnv->GetObjectArrayElement(clipSettingsArray, i); 1853 1854 // Get the clip settings. 1855 videoEditClasses_getClipSettings(pResult, pEnv, clipSettings, 1856 &pSettings->pClipList[i]); 1857 1858 // Free the local references to avoid memory leaks 1859 pEnv->DeleteLocalRef(clipSettings); 1860 } 1861 } 1862 } 1863 1864 // Check if the transition settings array contains items. 1865 if (transitionSettingsArraySize > 0) 1866 { 1867 // Allocate memory for the transition settings array. 1868 pSettings->pTransitionList = 1869 (M4VSS3GPP_TransitionSettings **)videoEditOsal_alloc(pResult, 1870 pEnv, transitionSettingsArraySize * sizeof(M4VSS3GPP_TransitionSettings *), 1871 "TransitionSettingsArray"); 1872 if (*pResult) 1873 { 1874 // Loop over all transition settings objects. 1875 for (int i = 0; ((*pResult) && (i < transitionSettingsArraySize)); i++) 1876 { 1877 // Get the transition settings object. 1878 transitionSettings = 1879 pEnv->GetObjectArrayElement(transitionSettingsArray, i); 1880 1881 // Get the transition settings. 1882 videoEditClasses_getTransitionSettings(pResult, pEnv, 1883 transitionSettings, &pSettings->pTransitionList[i]); 1884 1885 // Free the local references to avoid memory leaks 1886 pEnv->DeleteLocalRef(transitionSettings); 1887 } 1888 } 1889 } 1890 1891 // Check if the effect settings array contains items. 1892 if (effectSettingsArraySize > 0) 1893 { 1894 // Allocate memory for the effect settings array. 1895 pSettings->Effects = (M4VSS3GPP_EffectSettings*)videoEditOsal_alloc(pResult, 1896 pEnv, 1897 effectSettingsArraySize * sizeof(M4VSS3GPP_EffectSettings), 1898 "EffectSettingsArray"); 1899 if (*pResult) 1900 { 1901 // Loop over all effect settings objects. 1902 for (int i = 0; ((*pResult) && (i < effectSettingsArraySize)); i++) 1903 { 1904 // Get the effect settings object. 1905 effectSettings = pEnv->GetObjectArrayElement(effectSettingsArray, i); 1906 1907 // Get the effect settings. 1908 videoEditClasses_getEffectSettings(pResult, pEnv, effectSettings, 1909 &pSettings->Effects[i]); 1910 1911 // Free the local references to avoid memory leaks 1912 pEnv->DeleteLocalRef(effectSettings); 1913 } 1914 } 1915 } 1916 1917 // Check if the clips, transitions and effects could be set. 1918 if (*pResult) 1919 { 1920 // Set the number of effects in the clip. 1921 pSettings->nbEffects = (M4OSA_UInt8)effectSettingsArraySize; 1922 1923 // Set the frame rate of the output video. 1924 pSettings->videoFrameRate = 1925 (M4VIDEOEDITING_VideoFramerate)videoEditJava_getVideoFrameRateJavaToC( 1926 &converted, pEnv->GetIntField(object, fieldIds.videoFrameRate)); 1927 1928 // Check if the frame rate is valid. 1929 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1930 !converted, "editSettings.videoFrameRate is invalid"); 1931 } 1932 1933 // Check if the frame rate could be set. 1934 if (*pResult) 1935 { 1936 // Set the path of the output file. 1937 pSettings->pOutputFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, 1938 object, fieldIds.outputFile, &pSettings->uiOutputPathSize); 1939 } 1940 1941 // Check if path of the output file could be set. 1942 if (*pResult) 1943 { 1944 // Set the path of the temporary file produced when using 1945 // the constant memory 3gp writer. 1946 pSettings->pTemporaryFile = M4OSA_NULL; 1947 1948 // Set the output video size. 1949 pSettings->xVSS.outputVideoSize = 1950 (M4VIDEOEDITING_VideoFrameSize)videoEditJava_getVideoFrameSizeJavaToC( 1951 &converted, pEnv->GetIntField(object, fieldIds.videoFrameSize)); 1952 1953 // Check if the output video size is valid. 1954 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1955 !converted, "editSettings.videoFrameSize is invalid"); 1956 } 1957 1958 // Check if the output video size could be set. 1959 if (*pResult) 1960 { 1961 // Set the output video format. 1962 pSettings->xVSS.outputVideoFormat = 1963 (M4VIDEOEDITING_VideoFormat)videoEditJava_getVideoFormatJavaToC( 1964 &converted, pEnv->GetIntField(object, fieldIds.videoFormat)); 1965 1966 // Check if the output video format is valid. 1967 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1968 !converted, "editSettings.videoFormat is invalid"); 1969 } 1970 1971 // Check if the output video format could be set. 1972 if (*pResult) 1973 { 1974 // Set the output audio format. 1975 pSettings->xVSS.outputAudioFormat = 1976 (M4VIDEOEDITING_AudioFormat)videoEditJava_getAudioFormatJavaToC( 1977 &converted, pEnv->GetIntField(object, fieldIds.audioFormat)); 1978 1979 // Check if the output audio format is valid. 1980 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1981 !converted, "editSettings.audioFormat is invalid"); 1982 } 1983 1984 // Check if the output audio format could be set. 1985 if (*pResult) 1986 { 1987 // Set the output audio sampling frequency when not replacing the audio, 1988 // or replacing it with MP3 audio. 1989 pSettings->xVSS.outputAudioSamplFreq = 1990 (M4VIDEOEDITING_AudioSamplingFrequency)\ 1991 videoEditJava_getAudioSamplingFrequencyJavaToC( 1992 &converted, pEnv->GetIntField(object, fieldIds.audioSamplingFreq)); 1993 1994 // Check if the output audio sampling frequency is valid. 1995 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 1996 !converted, "editSettings.audioSamplingFreq is invalid"); 1997 } 1998 1999 // Check if the output audio sampling frequency could be set. 2000 if (*pResult) 2001 { 2002 // Check if the number of audio channels is valid. 2003 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2004 ((0 != audioChannels ) || 2005 ((M4VIDEOEDITING_kNoneAudio != pSettings->xVSS.outputAudioFormat) && 2006 (M4VIDEOEDITING_kNullAudio != pSettings->xVSS.outputAudioFormat) ) ) && 2007 (1 != audioChannels ) && 2008 (2 != audioChannels ), 2009 "editSettings.audioChannels must be set to 0, 1 or 2"); 2010 } 2011 2012 // Check if the number of audio channels is valid. 2013 if (*pResult) 2014 { 2015 // Set the maximum output file size (MMS usecase). 2016 pSettings->xVSS.outputFileSize = (M4OSA_UInt32)pEnv->GetIntField(object, 2017 fieldIds.maxFileSize); 2018 2019 // Whether or not the audio is mono, only valid for AAC. 2020 pSettings->xVSS.bAudioMono = (M4OSA_Bool)(1 == audioChannels); 2021 2022 // Set the output video bitrate. 2023 pSettings->xVSS.outputVideoBitrate = (M4OSA_UInt32)pEnv->GetIntField(object, 2024 fieldIds.videoBitrate); 2025 2026 // Set the output video profile. 2027 pSettings->xVSS.outputVideoProfile = (M4OSA_UInt32)pEnv->GetIntField(object, 2028 fieldIds.videoProfile); 2029 2030 // Set the output video level. 2031 pSettings->xVSS.outputVideoLevel = (M4OSA_UInt32)pEnv->GetIntField(object, 2032 fieldIds.videoLevel); 2033 2034 // Set the output audio bitrate. 2035 pSettings->xVSS.outputAudioBitrate = (M4OSA_UInt32)pEnv->GetIntField(object, 2036 fieldIds.audioBitrate); 2037 2038 // Set the background music settings. 2039 videoEditClasses_getBackgroundMusicSettings(pResult, pEnv, 2040 backgroundMusicSettings, &pSettings->xVSS.pBGMtrack); 2041 2042 // Set the text rendering function (will be set elsewhere). 2043 pSettings->xVSS.pTextRenderingFct = M4OSA_NULL; 2044 pSettings->PTVolLevel = 2045 (M4OSA_Float)pEnv->GetIntField(object, fieldIds.primaryTrackVolume); 2046 } 2047 } 2048 2049 // Check if settings could be set. 2050 if (*pResult) 2051 { 2052 // Return the settings. 2053 (*ppSettings) = pSettings; 2054 } 2055 else 2056 { 2057 // Free the settings. 2058 videoEditClasses_freeEditSettings(&pSettings); 2059 } 2060 } 2061 } 2062 } 2063 2064 void 2065 videoEditClasses_freeEditSettings( 2066 M4VSS3GPP_EditSettings** ppSettings) 2067 { 2068 // Check if memory was allocated for the EditSettings. 2069 if (M4OSA_NULL != (*ppSettings)) 2070 { 2071 // Log the function call. 2072 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2073 "videoEditClasses_freeEditSettings()"); 2074 2075 // Free the background music settings. 2076 videoEditClasses_freeBackgroundMusicSettings(&(*ppSettings)->xVSS.pBGMtrack); 2077 2078 // Free the path of the output file. 2079 videoEditOsal_free((*ppSettings)->pOutputFile); 2080 (*ppSettings)->pOutputFile = M4OSA_NULL; 2081 (*ppSettings)->uiOutputPathSize = 0; 2082 2083 // Check if the EffectSettings should be freed. 2084 if (M4OSA_NULL != (*ppSettings)->Effects) 2085 { 2086 // Loop over all effect settings. 2087 for (int i = 0; i < (*ppSettings)->nbEffects; i++) 2088 { 2089 // Free the effect settings. 2090 videoEditClasses_freeEffectSettings(&(*ppSettings)->Effects[i]); 2091 } 2092 2093 // Free the memory for the effect settings array. 2094 videoEditOsal_free((*ppSettings)->Effects); 2095 (*ppSettings)->Effects = M4OSA_NULL; 2096 } 2097 2098 // Reset the number of effects in the clip. 2099 (*ppSettings)->nbEffects = 0; 2100 2101 // Check if there are clips. 2102 if (0 < (*ppSettings)->uiClipNumber) 2103 { 2104 // Check if the TransitionSettings should be freed. 2105 if (M4OSA_NULL != (*ppSettings)->pTransitionList) 2106 { 2107 // Loop over all transition settings. 2108 for (int i = 0; i < ((*ppSettings)->uiClipNumber - 1); i++) 2109 { 2110 // Free the transition settings. 2111 videoEditClasses_freeTransitionSettings(&(*ppSettings)->pTransitionList[i]); 2112 } 2113 2114 // Free the memory for the transition settings array. 2115 videoEditOsal_free((*ppSettings)->pTransitionList); 2116 (*ppSettings)->pTransitionList = M4OSA_NULL; 2117 } 2118 2119 // Check if the ClipSettings should be freed. 2120 if (M4OSA_NULL != (*ppSettings)->pClipList) 2121 { 2122 // Loop over all clip settings. 2123 for (int i = 0; i < (*ppSettings)->uiClipNumber; i++) 2124 { 2125 // Free the clip settings. 2126 videoEditClasses_freeClipSettings(&(*ppSettings)->pClipList[i]); 2127 } 2128 2129 // Free the memory for the clip settings array. 2130 videoEditOsal_free((*ppSettings)->pClipList); 2131 (*ppSettings)->pClipList = M4OSA_NULL; 2132 } 2133 } 2134 2135 // Reset the number of clips. 2136 (*ppSettings)->uiClipNumber = 0; 2137 2138 // Free the settings structure. 2139 videoEditOsal_free((*ppSettings)); 2140 (*ppSettings) = M4OSA_NULL; 2141 } 2142 } 2143 2144 #ifdef VIDEOEDIT_LOGGING_ENABLED 2145 void 2146 videoEditClasses_logEditSettings( 2147 M4VSS3GPP_EditSettings* pSettings, 2148 int indentation) 2149 { 2150 // Check if memory was allocated for the EditSettings. 2151 if (M4OSA_NULL != pSettings) 2152 { 2153 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2154 "%*c uiClipNumber: %d", indentation, ' ', 2155 pSettings->uiClipNumber); 2156 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2157 "%*c uiMasterClip: %d", indentation, ' ', 2158 pSettings->uiMasterClip); 2159 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2160 "%*c pClipList: %s", indentation, ' ', 2161 (M4OSA_NULL != pSettings->pClipList) ? " " : "<null>"); 2162 if (M4OSA_NULL != pSettings->pClipList) 2163 { 2164 indentation += VIDEOEDIT_LOG_INDENTATION; 2165 for (int i = 0; i < pSettings->uiClipNumber; i++) 2166 { 2167 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2168 "%*c pClipList[%d]:", indentation, ' ', 2169 i); 2170 videoEditClasses_logClipSettings(pSettings->pClipList[i], 2171 indentation + VIDEOEDIT_LOG_INDENTATION); 2172 } 2173 indentation -= VIDEOEDIT_LOG_INDENTATION; 2174 } 2175 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2176 "%*c pTransitionList: %s", indentation, ' ', 2177 (M4OSA_NULL != pSettings->pTransitionList) ? " " : "<null>"); 2178 if (M4OSA_NULL != pSettings->pTransitionList) 2179 { 2180 indentation += VIDEOEDIT_LOG_INDENTATION; 2181 for (int i = 0; i < (pSettings->uiClipNumber - 1); i++) 2182 { 2183 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2184 "%*c pTransitionList[%d]:", indentation, ' ', i); 2185 videoEditClasses_logTransitionSettings(pSettings->pTransitionList[i], 2186 indentation + VIDEOEDIT_LOG_INDENTATION); 2187 } 2188 indentation -= VIDEOEDIT_LOG_INDENTATION; 2189 } 2190 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2191 "%*c Effects: %s", indentation, ' ', 2192 (M4OSA_NULL != pSettings->Effects) ? " " : "<null>"); 2193 if (M4OSA_NULL != pSettings->Effects) 2194 { 2195 indentation += VIDEOEDIT_LOG_INDENTATION; 2196 for (int i = 0; i < pSettings->nbEffects; i++) 2197 { 2198 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2199 "%*c Effects[%d]:", indentation, ' ', i); 2200 videoEditClasses_logEffectSettings(&pSettings->Effects[i], 2201 indentation + VIDEOEDIT_LOG_INDENTATION); 2202 } 2203 indentation -= VIDEOEDIT_LOG_INDENTATION; 2204 } 2205 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2206 "%*c nbEffects: %d", indentation, ' ', 2207 pSettings->nbEffects); 2208 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2209 "%*c videoFrameRate: %s", indentation, ' ', 2210 videoEditJava_getVideoFrameRateString(pSettings->videoFrameRate)); 2211 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2212 "%*c pOutputFile: %s", indentation, ' ', 2213 (M4OSA_NULL != pSettings->pOutputFile) ? (char*)pSettings->pOutputFile : "<null>"); 2214 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2215 "%*c uiOutputPathSize: %u", indentation, ' ', 2216 (unsigned int)pSettings->uiOutputPathSize); 2217 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2218 "%*c pTemporaryFile: %s", indentation, ' ', 2219 (M4OSA_NULL != pSettings->pTemporaryFile) ?\ 2220 (char*)pSettings->pTemporaryFile : "<null>"); 2221 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2222 "%*c outputVideoSize: %s", indentation, ' ', 2223 videoEditJava_getVideoFrameSizeString(pSettings->xVSS.outputVideoSize)); 2224 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2225 "%*c outputVideoFormat: %s", indentation, ' ', 2226 videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoFormat)); 2227 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2228 "%*c outputVideoProfile: %u", indentation, ' ', 2229 videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoProfile)); 2230 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2231 "%*c outputVideoLevel: %u", indentation, ' ', 2232 videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoLevel)); 2233 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2234 "%*c outputAudioFormat: %s", indentation, ' ', 2235 videoEditJava_getAudioFormatString(pSettings->xVSS.outputAudioFormat)); 2236 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2237 "%*c outputAudioSamplFreq: %s", indentation, ' ', 2238 videoEditJava_getAudioSamplingFrequencyString(pSettings->xVSS.outputAudioSamplFreq)); 2239 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2240 "%*c outputFileSize: %u", indentation, ' ', 2241 (unsigned int)pSettings->xVSS.outputFileSize); 2242 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2243 "%*c bAudioMono: %s", indentation, ' ', 2244 pSettings->xVSS.bAudioMono ? "true" : "false"); 2245 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2246 "%*c outputVideoBitrate: %s", indentation, ' ', 2247 videoEditJava_getBitrateString(pSettings->xVSS.outputVideoBitrate)); 2248 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2249 "%*c outputAudioBitrate: %s", indentation, ' ', 2250 videoEditJava_getBitrateString(pSettings->xVSS.outputAudioBitrate)); 2251 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2252 "%*c pBGMtrack:", indentation, ' '); 2253 videoEditClasses_logBackgroundMusicSettings(pSettings->xVSS.pBGMtrack, 2254 indentation + VIDEOEDIT_LOG_INDENTATION); 2255 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2256 "%*c pTextRenderingFct: %s", indentation, ' ', 2257 (M4OSA_NULL != pSettings->xVSS.pTextRenderingFct) ? "set" : "<null>"); 2258 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2259 "%*c PTVolLevel: %u", indentation, ' ', 2260 (unsigned int)pSettings->PTVolLevel); 2261 } 2262 else 2263 { 2264 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2265 "%*c <null>", indentation, ' '); 2266 } 2267 } 2268 #endif 2269 2270 2271 void 2272 videoEditClasses_getEffectSettings( 2273 bool* pResult, 2274 JNIEnv* pEnv, 2275 jobject object, 2276 M4VSS3GPP_EffectSettings* pSettings) 2277 { 2278 2279 VideoEditJava_EffectSettingsFieldIds fieldIds; 2280 bool converted = true; 2281 memset(&fieldIds, 0, sizeof(VideoEditJava_EffectSettingsFieldIds)); 2282 2283 // Check if the previous action succeeded. 2284 if (*pResult) 2285 { 2286 // Log the function call. 2287 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2288 "videoEditClasses_getEffectSettings()"); 2289 2290 // Retrieve the field ids. 2291 videoEditJava_getEffectSettingsFieldIds(pResult, pEnv, &fieldIds); 2292 } 2293 2294 // Only validate the EffectSettings if the fields could be located. 2295 if (*pResult) 2296 { 2297 // Check if the effect is set. 2298 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2299 (NULL == object), 2300 "effect is null"); 2301 } 2302 2303 // Only retrieve the EffectSettings if the fields could be located and validated. 2304 if (*pResult) 2305 { 2306 // Set the start time in milliseconds. 2307 pSettings->uiStartTime = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.startTime); 2308 2309 // Set the duration in milliseconds. 2310 pSettings->uiDuration = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.duration); 2311 2312 // Set the video effect type, None, FadeIn, FadeOut, etc. 2313 pSettings->VideoEffectType = 2314 (M4VSS3GPP_VideoEffectType)videoEditJava_getVideoEffectJavaToC( 2315 &converted, pEnv->GetIntField(object, fieldIds.videoEffectType)); 2316 2317 // Check if the video effect type is valid. 2318 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2319 !converted, "effect.videoEffectType is invalid"); 2320 } 2321 2322 // Check if the video effect type could be set. 2323 if (*pResult) 2324 { 2325 // Set the external effect function. 2326 pSettings->ExtVideoEffectFct = M4OSA_NULL; 2327 2328 // Set the context given to the external effect function. 2329 pSettings->pExtVideoEffectFctCtxt = M4OSA_NULL; 2330 2331 // Set the audio effect type, None, FadeIn, FadeOut. 2332 pSettings->AudioEffectType = 2333 (M4VSS3GPP_AudioEffectType)videoEditJava_getAudioEffectJavaToC( 2334 &converted, pEnv->GetIntField(object, fieldIds.audioEffectType)); 2335 2336 // Check if the audio effect type is valid. 2337 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2338 !converted, "effect.audioEffectType is invalid"); 2339 } 2340 2341 // Check if the audio effect type could be set. 2342 if (*pResult) 2343 { 2344 // Set the start in percentage of the cut clip duration. 2345 pSettings->xVSS.uiStartPercent = (M4OSA_UInt32)pEnv->GetIntField(object, 2346 fieldIds.startPercent); 2347 2348 // Set the duration in percentage of the ((clip duration) - (effect starttime)). 2349 pSettings->xVSS.uiDurationPercent = (M4OSA_UInt32)pEnv->GetIntField(object, 2350 fieldIds.durationPercent); 2351 2352 // Set the framing file path (GIF/PNG file). 2353 pSettings->xVSS.pFramingFilePath = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, 2354 object, fieldIds.framingFile, M4OSA_NULL); 2355 2356 // Check if this is a framing effect. 2357 if (M4xVSS_kVideoEffectType_Framing == (M4xVSS_VideoEffectType)pSettings->VideoEffectType) 2358 { 2359 // Check if the framing file path is valid. 2360 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2361 (M4OSA_NULL == pSettings->xVSS.pFramingFilePath), "effect.framingFile is null"); 2362 } 2363 } 2364 2365 // Check if the framing file path could be retrieved. 2366 if (*pResult) 2367 { 2368 // Set the Framing RGB565 buffer. 2369 pSettings->xVSS.pFramingBuffer = M4OSA_NULL; 2370 2371 // Set the top-left X coordinate in the output picture 2372 // where the added frame will be displayed. 2373 pSettings->xVSS.topleft_x = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.topLeftX); 2374 2375 // Set the top-left Y coordinate in the output picture 2376 // where the added frame will be displayed. 2377 pSettings->xVSS.topleft_y = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.topLeftY); 2378 2379 // Set whether or not the framing image is resized to output video size. 2380 pSettings->xVSS.bResize = 2381 (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.framingResize); 2382 2383 // Set the new size to which framing buffer needs to be resized to 2384 pSettings->xVSS.framingScaledSize = 2385 (M4VIDEOEDITING_VideoFrameSize)pEnv->GetIntField(object, fieldIds.framingScaledSize); 2386 2387 // Set the text buffer. 2388 pSettings->xVSS.pTextBuffer = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object, 2389 fieldIds.text, &pSettings->xVSS.textBufferSize); 2390 } 2391 2392 // Check if the text buffer could be retrieved. 2393 if (*pResult) 2394 { 2395 // Set the data used by the font engine (size, color...). 2396 pSettings->xVSS.pRenderingData = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, 2397 object, fieldIds.textRenderingData, M4OSA_NULL); 2398 } 2399 2400 // Check if the text rendering data could be retrieved. 2401 if (*pResult) 2402 { 2403 // Set the text plane width. 2404 pSettings->xVSS.uiTextBufferWidth = (M4OSA_UInt32)pEnv->GetIntField(object, 2405 fieldIds.textBufferWidth); 2406 2407 // Set the text plane height. 2408 pSettings->xVSS.uiTextBufferHeight = (M4OSA_UInt32)pEnv->GetIntField(object, 2409 fieldIds.textBufferHeight); 2410 2411 // Set the processing rate of the effect added when using the Fifties effect. 2412 pSettings->xVSS.uiFiftiesOutFrameRate = (M4OSA_UInt32)pEnv->GetIntField(object, 2413 fieldIds.fiftiesFrameRate); 2414 2415 // Set the RGB16 input color of the effect added when using the rgb16 color effect. 2416 pSettings->xVSS.uiRgb16InputColor = (M4OSA_UInt16)pEnv->GetIntField(object, 2417 fieldIds.rgb16InputColor); 2418 2419 // Set the start percentage of Alpha blending. 2420 pSettings->xVSS.uialphaBlendingStart = (M4OSA_UInt8)pEnv->GetIntField(object, 2421 fieldIds.alphaBlendingStartPercent); 2422 2423 // Set the middle percentage of Alpha blending. 2424 pSettings->xVSS.uialphaBlendingMiddle = (M4OSA_UInt8)pEnv->GetIntField(object, 2425 fieldIds.alphaBlendingMiddlePercent); 2426 2427 // Set the end percentage of Alpha blending. 2428 pSettings->xVSS.uialphaBlendingEnd = (M4OSA_UInt8)pEnv->GetIntField(object, 2429 fieldIds.alphaBlendingEndPercent); 2430 2431 // Set the duration, in percentage of effect duration, of the FadeIn phase. 2432 pSettings->xVSS.uialphaBlendingFadeInTime = (M4OSA_UInt8)pEnv->GetIntField(object, 2433 fieldIds.alphaBlendingFadeInTimePercent); 2434 2435 // Set the duration, in percentage of effect duration, of the FadeOut phase. 2436 pSettings->xVSS.uialphaBlendingFadeOutTime = (M4OSA_UInt8)pEnv->GetIntField(object, 2437 fieldIds.alphaBlendingFadeOutTimePercent); 2438 2439 if (pSettings->xVSS.pFramingFilePath != M4OSA_NULL) 2440 { 2441 pSettings->xVSS.pFramingBuffer = 2442 (M4VIFI_ImagePlane *)M4OSA_32bitAlignedMalloc(sizeof(M4VIFI_ImagePlane), 2443 0x00,(M4OSA_Char *)"framing buffer"); 2444 } 2445 2446 if (pSettings->xVSS.pFramingBuffer != M4OSA_NULL) 2447 { 2448 // OverFrame height and width 2449 pSettings->xVSS.pFramingBuffer->u_width = pEnv->GetIntField(object, 2450 fieldIds.width); 2451 2452 pSettings->xVSS.pFramingBuffer->u_height = pEnv->GetIntField(object, 2453 fieldIds.height); 2454 2455 pSettings->xVSS.width = pSettings->xVSS.pFramingBuffer->u_width; 2456 pSettings->xVSS.height = pSettings->xVSS.pFramingBuffer->u_height; 2457 pSettings->xVSS.rgbType = M4VSS3GPP_kRGB565; 2458 2459 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2460 "pFramingBuffer u_width %d ", pSettings->xVSS.pFramingBuffer->u_width); 2461 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2462 "pFramingBuffer u_height %d", pSettings->xVSS.pFramingBuffer->u_height); 2463 2464 } 2465 2466 // Check if settings could be set. 2467 if (!(*pResult)) 2468 { 2469 // Free the settings. 2470 videoEditClasses_freeEffectSettings(pSettings); 2471 } 2472 } 2473 } 2474 2475 void 2476 videoEditClasses_freeEffectSettings( 2477 M4VSS3GPP_EffectSettings* pSettings) 2478 { 2479 // Check if memory was allocated for the EffectSettings. 2480 if (M4OSA_NULL != pSettings) 2481 { 2482 // Log the function call. 2483 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2484 "videoEditClasses_freeEffectSettings()"); 2485 2486 // Free the data used by the font engine (size, color...). 2487 videoEditOsal_free(pSettings->xVSS.pRenderingData); 2488 pSettings->xVSS.pRenderingData = M4OSA_NULL; 2489 2490 // Free the text buffer. 2491 videoEditOsal_free(pSettings->xVSS.pTextBuffer); 2492 pSettings->xVSS.pTextBuffer = M4OSA_NULL; 2493 pSettings->xVSS.textBufferSize = 0; 2494 2495 // Free the framing file path. 2496 videoEditOsal_free(pSettings->xVSS.pFramingFilePath); 2497 pSettings->xVSS.pFramingFilePath = M4OSA_NULL; 2498 } 2499 } 2500 2501 #ifdef VIDEOEDIT_LOGGING_ENABLED 2502 void 2503 videoEditClasses_logEffectSettings( 2504 M4VSS3GPP_EffectSettings* pSettings, 2505 int indentation) 2506 { 2507 // Check if memory was allocated for the EffectSettings. 2508 if (M4OSA_NULL != pSettings) 2509 { 2510 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2511 "%*c uiStartTime: %u ms", indentation, ' ', 2512 (unsigned int)pSettings->uiStartTime); 2513 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2514 "%*c uiDuration: %u ms", indentation, ' ', 2515 (unsigned int)pSettings->uiDuration); 2516 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2517 "%*c VideoEffectType: %s", indentation, ' ', 2518 videoEditJava_getVideoEffectString(pSettings->VideoEffectType)); 2519 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2520 "%*c ExtVideoEffectFct: %s", indentation, ' ', 2521 (M4OSA_NULL != pSettings->ExtVideoEffectFct) ? "set" : "<null>"); 2522 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2523 "%*c pExtVideoEffectFctCtxt: %s", indentation, ' ', 2524 (M4OSA_NULL != pSettings->pExtVideoEffectFctCtxt) ? "set" : "<null>"); 2525 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2526 "%*c AudioEffectType: %s", indentation, ' ', 2527 videoEditJava_getAudioEffectString(pSettings->AudioEffectType)); 2528 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2529 "%*c uiStartPercent: %u %%", indentation, ' ', 2530 (unsigned int)pSettings->xVSS.uiStartPercent); 2531 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2532 "%*c uiDurationPercent: %u %%", indentation, ' ', 2533 (unsigned int)pSettings->xVSS.uiDurationPercent); 2534 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2535 "%*c pFramingFilePath: %s", indentation, ' ', 2536 (M4OSA_NULL != pSettings->xVSS.pFramingFilePath) ?\ 2537 (char*)pSettings->xVSS.pFramingFilePath : "<null>"); 2538 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2539 "%*c pFramingBuffer: %s", indentation, ' ', 2540 (M4OSA_NULL != pSettings->xVSS.pFramingBuffer) ? "set" : "<null>"); 2541 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2542 "%*c topleft_x: %u", indentation, ' ', 2543 (unsigned int)pSettings->xVSS.topleft_x); 2544 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2545 "%*c topleft_y: %u", indentation, ' ', 2546 (unsigned int)pSettings->xVSS.topleft_y); 2547 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2548 "%*c bResize: %s", indentation, ' ', 2549 pSettings->xVSS.bResize ? "true" : "false"); 2550 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2551 "%*c pTextBuffer: %s", indentation, ' ', 2552 (M4OSA_NULL != pSettings->xVSS.pTextBuffer) ?\ 2553 (char*)pSettings->xVSS.pTextBuffer : "<null>"); 2554 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2555 "%*c textBufferSize: %u", indentation, ' ', 2556 (unsigned int)pSettings->xVSS.textBufferSize); 2557 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2558 "%*c pRenderingData: %s", indentation, ' ', 2559 (M4OSA_NULL != pSettings->xVSS.pRenderingData) ?\ 2560 (char*)pSettings->xVSS.pRenderingData : "<null>"); 2561 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2562 "%*c uiTextBufferWidth: %u", indentation, ' ', 2563 (unsigned int)pSettings->xVSS.uiTextBufferWidth); 2564 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2565 "%*c uiTextBufferHeight: %u", indentation, ' ', 2566 (unsigned int)pSettings->xVSS.uiTextBufferHeight); 2567 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2568 "%*c uiFiftiesOutFrameRate: %u", indentation, ' ', 2569 (unsigned int)pSettings->xVSS.uiFiftiesOutFrameRate); 2570 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2571 "%*c uiRgb16InputColor: %d", indentation, ' ', 2572 pSettings->xVSS.uiRgb16InputColor); 2573 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2574 "%*c uialphaBlendingStart: %d %%", indentation, ' ', 2575 pSettings->xVSS.uialphaBlendingStart); 2576 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2577 "%*c uialphaBlendingMiddle: %d %%", indentation, ' ', 2578 pSettings->xVSS.uialphaBlendingMiddle); 2579 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2580 "%*c uialphaBlendingEnd: %d %%", indentation, ' ', 2581 pSettings->xVSS.uialphaBlendingEnd); 2582 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2583 "%*c uialphaBlendingFadeInTime: %d %%", indentation, ' ', 2584 pSettings->xVSS.uialphaBlendingFadeInTime); 2585 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2586 "%*c uialphaBlendingFadeOutTime: %d %%", indentation, ' ', 2587 pSettings->xVSS.uialphaBlendingFadeOutTime); 2588 } 2589 else 2590 { 2591 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2592 "%*c <null>", indentation, ' '); 2593 } 2594 } 2595 #endif 2596 2597 2598 void 2599 videoEditClasses_getSlideTransitionSettings( 2600 bool* pResult, 2601 JNIEnv* pEnv, 2602 jobject object, 2603 M4xVSS_SlideTransitionSettings** ppSettings) 2604 { 2605 VideoEditJava_SlideTransitionSettingsFieldIds fieldIds = {NULL}; 2606 M4xVSS_SlideTransitionSettings* pSettings = M4OSA_NULL; 2607 bool converted = true; 2608 2609 // Check if the previous action succeeded. 2610 if (*pResult) 2611 { 2612 // Log the function call. 2613 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2614 "videoEditClasses_getSlideTransitionSettings()"); 2615 2616 // Retrieve the field ids. 2617 videoEditJava_getSlideTransitionSettingsFieldIds(pResult, pEnv, &fieldIds); 2618 } 2619 2620 2621 // Only validate the SlideTransitionSettings if the fields could be located. 2622 if (*pResult) 2623 { 2624 // Check if the clip is set. 2625 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2626 (NULL == object), 2627 "slideSettings is null"); 2628 } 2629 2630 // Only retrieve the SlideTransitionSettings if the fields could be located and validated. 2631 if (*pResult) 2632 { 2633 // Allocate memory for the SlideTransitionSettings. 2634 pSettings = (M4xVSS_SlideTransitionSettings*)videoEditOsal_alloc(pResult, pEnv, 2635 sizeof(M4xVSS_SlideTransitionSettings), "SlideTransitionSettings"); 2636 2637 // Check if memory could be allocated for the SlideTransitionSettings. 2638 if (*pResult) 2639 { 2640 // Set the direction of the slide. 2641 pSettings->direction = 2642 (M4xVSS_SlideTransition_Direction)videoEditJava_getSlideDirectionJavaToC( 2643 &converted, pEnv->GetIntField(object, fieldIds.direction)); 2644 2645 // Check if the direction is valid. 2646 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2647 !converted, "slideSettings.direction is invalid"); 2648 } 2649 2650 // Check if settings could be set. 2651 if (*pResult) 2652 { 2653 // Return the settings. 2654 (*ppSettings) = pSettings; 2655 } 2656 else 2657 { 2658 // Free the settings. 2659 videoEditClasses_freeSlideTransitionSettings(&pSettings); 2660 } 2661 } 2662 } 2663 2664 void 2665 videoEditClasses_freeSlideTransitionSettings( 2666 M4xVSS_SlideTransitionSettings** ppSettings) 2667 { 2668 // Check if memory was allocated for the SlideTransitionSettings. 2669 if (M4OSA_NULL != (*ppSettings)) 2670 { 2671 // Log the function call. 2672 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2673 "videoEditClasses_freeSlideTransitionSettings()"); 2674 2675 // Free the settings structure. 2676 videoEditOsal_free((*ppSettings)); 2677 (*ppSettings) = M4OSA_NULL; 2678 } 2679 } 2680 2681 #ifdef VIDEOEDIT_LOGGING_ENABLED 2682 void 2683 videoEditClasses_logSlideTransitionSettings( 2684 M4xVSS_SlideTransitionSettings* pSettings, 2685 int indentation) 2686 { 2687 // Check if memory was allocated for the SlideTransitionSettings. 2688 if (M4OSA_NULL != pSettings) 2689 { 2690 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2691 "%*c direction: %s", indentation, ' ', 2692 videoEditJava_getSlideDirectionString(pSettings->direction)); 2693 } 2694 else 2695 { 2696 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2697 "%*c <null>", indentation, ' '); 2698 } 2699 } 2700 #endif 2701 2702 2703 void 2704 videoEditClasses_getTransitionSettings( 2705 bool* pResult, 2706 JNIEnv* pEnv, 2707 jobject object, 2708 M4VSS3GPP_TransitionSettings** ppSettings) 2709 { 2710 2711 VideoEditJava_TransitionSettingsFieldIds fieldIds; 2712 jobject alphaSettings = NULL; 2713 jobject slideSettings = NULL; 2714 M4VSS3GPP_TransitionSettings* pSettings = M4OSA_NULL; 2715 bool converted = true; 2716 memset(&fieldIds, 0, sizeof(VideoEditJava_TransitionSettingsFieldIds)); 2717 2718 // Check if the previous action succeeded. 2719 if (*pResult) 2720 { 2721 // Log the function call. 2722 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2723 "videoEditClasses_getTransitionSettings()"); 2724 2725 // Retrieve the field ids. 2726 videoEditJava_getTransitionSettingsFieldIds(pResult, pEnv, &fieldIds); 2727 } 2728 2729 // Only validate the TransitionSettings if the fields could be located. 2730 if (*pResult) 2731 { 2732 // Check if the transition is set. 2733 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, 2734 (NULL == object), 2735 "transition is null"); 2736 } 2737 2738 // Check if the field ids could be located and validated. 2739 if (*pResult) 2740 { 2741 // Retrieve the alphaSettings. 2742 videoEditJava_getObject(pResult, pEnv, object, fieldIds.alphaSettings, &alphaSettings); 2743 2744 // Retrieve the slideSettings. 2745 videoEditJava_getObject(pResult, pEnv, object, fieldIds.slideSettings, &slideSettings); 2746 } 2747 2748 // Only retrieve the TransitionSettings if the fields could be located. 2749 if (*pResult) 2750 { 2751 // Allocate memory for the TransitionSettings. 2752 pSettings = (M4VSS3GPP_TransitionSettings*)videoEditOsal_alloc(pResult, 2753 pEnv, sizeof(M4VSS3GPP_TransitionSettings), "TransitionSettings"); 2754 2755 // Check if memory could be allocated for the TransitionSettings. 2756 if (*pResult) 2757 { 2758 // Set the duration of the transition, in milliseconds (set to 0 to get no transition). 2759 pSettings->uiTransitionDuration = (M4OSA_UInt32)pEnv->GetIntField(object, 2760 fieldIds.duration); 2761 2762 // Set the type of the video transition. 2763 pSettings->VideoTransitionType = 2764 (M4VSS3GPP_VideoTransitionType)videoEditJava_getVideoTransitionJavaToC( 2765 &converted, pEnv->GetIntField(object, fieldIds.videoTransitionType)); 2766 2767 // Check if the video transition type is valid. 2768 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted, 2769 "transition.videoTransitionType is invalid"); 2770 } 2771 2772 // Check if the video transition type could be set. 2773 if (*pResult) 2774 { 2775 // Set the external transition video effect function. 2776 pSettings->ExtVideoTransitionFct = M4OSA_NULL; 2777 2778 // Set the context of the external transition video effect function. 2779 pSettings->pExtVideoTransitionFctCtxt = M4OSA_NULL; 2780 2781 // Set the type of the audio transition. 2782 pSettings->AudioTransitionType = 2783 (M4VSS3GPP_AudioTransitionType)videoEditJava_getAudioTransitionJavaToC( 2784 &converted, pEnv->GetIntField(object, fieldIds.audioTransitionType)); 2785 2786 // Check if the audio transition type is valid. 2787 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted, 2788 "transition.audioTransitionType is invalid"); 2789 } 2790 2791 // Check if the audio transition type could be set. 2792 if (*pResult) 2793 { 2794 // Set the transition behaviour. 2795 pSettings->TransitionBehaviour = 2796 (M4VSS3GPP_TransitionBehaviour)videoEditJava_getTransitionBehaviourJavaToC( 2797 &converted, pEnv->GetIntField(object, fieldIds.transitionBehaviour)); 2798 2799 // Check if the transition behaviour is valid. 2800 videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted, 2801 "transition.transitionBehaviour is invalid"); 2802 } 2803 2804 // Check if the audio transition behaviour could be set. 2805 if (*pResult) 2806 { 2807 // Check if a slide transition or alpha magic setting object is expected. 2808 if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition) 2809 { 2810 // Set the slide transition settings. 2811 videoEditClasses_getSlideTransitionSettings(pResult, pEnv, slideSettings, 2812 &pSettings->xVSS.transitionSpecific.pSlideTransitionSettings); 2813 } 2814 else if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_AlphaMagic) 2815 { 2816 // Set the alpha magic settings. 2817 videoEditClasses_getAlphaMagicSettings(pResult, pEnv, alphaSettings, 2818 &pSettings->xVSS.transitionSpecific.pAlphaMagicSettings); 2819 } 2820 } 2821 2822 // Check if settings could be set. 2823 if (*pResult) 2824 { 2825 // Return the settings. 2826 (*ppSettings) = pSettings; 2827 } 2828 else 2829 { 2830 // Free the settings. 2831 videoEditClasses_freeTransitionSettings(&pSettings); 2832 } 2833 } 2834 } 2835 2836 void 2837 videoEditClasses_freeTransitionSettings( 2838 M4VSS3GPP_TransitionSettings** ppSettings) 2839 { 2840 // Check if memory was allocated for the TransitionSettings. 2841 if (M4OSA_NULL != (*ppSettings)) 2842 { 2843 // Log the function call. 2844 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2845 "videoEditClasses_freeTransitionSettings()"); 2846 2847 // Check if a slide transition or alpha magic setting structure is expected. 2848 if ((int)(*ppSettings)->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition) 2849 { 2850 // Free the slide transition settings. 2851 videoEditClasses_freeSlideTransitionSettings( 2852 &(*ppSettings)->xVSS.transitionSpecific.pSlideTransitionSettings); 2853 } 2854 else 2855 { 2856 // Free the alpha magic settings. 2857 videoEditClasses_freeAlphaMagicSettings( 2858 &(*ppSettings)->xVSS.transitionSpecific.pAlphaMagicSettings); 2859 } 2860 2861 // Free the settings structure. 2862 videoEditOsal_free((*ppSettings)); 2863 (*ppSettings) = M4OSA_NULL; 2864 } 2865 } 2866 2867 #ifdef VIDEOEDIT_LOGGING_ENABLED 2868 void 2869 videoEditClasses_logTransitionSettings( 2870 M4VSS3GPP_TransitionSettings* pSettings, 2871 int indentation) 2872 { 2873 // Check if memory was allocated for the TransitionSettings. 2874 if (M4OSA_NULL != pSettings) 2875 { 2876 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2877 "%*c uiTransitionDuration: %u ms", indentation, ' ', 2878 (unsigned int)pSettings->uiTransitionDuration); 2879 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2880 "%*c VideoTransitionType: %s", indentation, ' ', 2881 videoEditJava_getVideoTransitionString(pSettings->VideoTransitionType)); 2882 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2883 "%*c ExtVideoTransitionFct: %s", indentation, ' ', 2884 (M4OSA_NULL != pSettings->ExtVideoTransitionFct) ? "set" : "<null>"); 2885 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2886 "%*c pExtVideoTransitionFctCtxt: %s", indentation, ' ', 2887 (M4OSA_NULL != pSettings->pExtVideoTransitionFctCtxt) ? "set" : "<null>"); 2888 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2889 "%*c AudioTransitionType: %s", indentation, ' ', 2890 videoEditJava_getAudioTransitionString(pSettings->AudioTransitionType)); 2891 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2892 "%*c TransitionBehaviour: %s", indentation, ' ', 2893 videoEditJava_getTransitionBehaviourString(pSettings->TransitionBehaviour)); 2894 2895 // Check if a slide transition or alpha magic setting structure is expected. 2896 if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition) 2897 { 2898 // Log the slide transition settings. 2899 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2900 "%*c pSlideTransitionSettings:", indentation, ' '); 2901 videoEditClasses_logSlideTransitionSettings\ 2902 (pSettings->xVSS.transitionSpecific.pSlideTransitionSettings, 2903 indentation + VIDEOEDIT_LOG_INDENTATION); 2904 } 2905 else 2906 { 2907 // Log the alpha magic settings. 2908 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2909 "%*c pAlphaMagicSettings:", indentation, ' '); 2910 videoEditClasses_logAlphaMagicSettings\ 2911 (pSettings->xVSS.transitionSpecific.pAlphaMagicSettings, 2912 indentation + VIDEOEDIT_LOG_INDENTATION); 2913 } 2914 } 2915 else 2916 { 2917 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 2918 "%*c <null>", indentation, ' '); 2919 } 2920 } 2921 #endif 2922 #ifdef VIDEOEDIT_LOGGING_ENABLED 2923 void 2924 videoEditPropClass_logProperties( 2925 VideoEditPropClass_Properties* pProperties, 2926 int indentation) 2927 { 2928 // Check if memory was allocated for the Properties. 2929 if (M4OSA_NULL != pProperties) 2930 { 2931 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2932 "%*c uiClipDuration: %u", indentation, ' ', 2933 (unsigned int)pProperties->uiClipDuration); 2934 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2935 "%*c FileType: %s", indentation, ' ', 2936 videoEditJava_getFileTypeString(pProperties->FileType)); 2937 2938 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2939 "%*c VideoStreamType: %s", indentation, ' ', 2940 videoEditJava_getVideoFormatString(pProperties->VideoStreamType)); 2941 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2942 "%*c uiClipVideoDuration: %u", indentation, ' ', 2943 (unsigned int)pProperties->uiClipVideoDuration); 2944 2945 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2946 "%*c uiVideoBitrate: %s", indentation, ' ', 2947 videoEditJava_getBitrateString(pProperties->uiVideoBitrate)); 2948 2949 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2950 "%*c uiVideoWidth: %u", indentation, ' ', 2951 (unsigned int)pProperties->uiVideoWidth); 2952 2953 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2954 "%*c uiVideoHeight: %u", indentation, ' ', 2955 (unsigned int)(unsigned int)pProperties->uiVideoHeight); 2956 2957 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2958 "%*c fAverageFrameRate: %.3f", indentation, ' ', 2959 pProperties->fAverageFrameRate); 2960 2961 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2962 "%*c AudioStreamType: %s", indentation, ' ', 2963 videoEditJava_getAudioFormatString(pProperties->AudioStreamType)); 2964 2965 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2966 "%*c uiClipAudioDuration: %u", indentation, ' ', 2967 (unsigned int)pProperties->uiClipAudioDuration); 2968 2969 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2970 "%*c uiAudioBitrate: %s", indentation, ' ', 2971 videoEditJava_getBitrateString(pProperties->uiAudioBitrate)); 2972 2973 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2974 "%*c uiNbChannels: %u", indentation, ' ', 2975 (unsigned int)pProperties->uiNbChannels); 2976 2977 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2978 "%*c uiSamplingFrequency: %u", indentation, ' ', 2979 (unsigned int)pProperties->uiSamplingFrequency); 2980 } 2981 else 2982 { 2983 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES", 2984 "%*c <null>", indentation, ' '); 2985 } 2986 } 2987 #endif 2988 2989 2990 void 2991 videoEditClasses_createVersion( 2992 bool* pResult, 2993 JNIEnv* pEnv, 2994 M4_VersionInfo* pVersionInfo, 2995 jobject* pObject) 2996 { 2997 2998 VideoEditJava_VersionFieldIds fieldIds; 2999 jclass clazz = NULL; 3000 jobject object = NULL; 3001 memset(&fieldIds, 0, sizeof(VideoEditJava_VersionFieldIds)); 3002 // Check if the previous action succeeded. 3003 if (*pResult) 3004 { 3005 // Log the function call. 3006 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3007 "videoEditClasses_createVersion()"); 3008 3009 // Retrieve the class. 3010 videoEditJava_getVersionClass(pResult, pEnv, &clazz); 3011 3012 // Retrieve the field ids. 3013 videoEditJava_getVersionFieldIds(pResult, pEnv, &fieldIds); 3014 } 3015 3016 // Only create an object if the class and fields could be located. 3017 if (*pResult) 3018 { 3019 // Allocate a new object. 3020 object = pEnv->AllocObject(clazz); 3021 3022 // check if alloc is done 3023 videoEditJava_checkAndThrowRuntimeException(pResult, pEnv, 3024 (NULL == object), 3025 M4ERR_ALLOC); 3026 if (NULL != object) 3027 { 3028 // Set the major field. 3029 pEnv->SetIntField(object, fieldIds.major, pVersionInfo->m_major); 3030 3031 // Set the minor field. 3032 pEnv->SetIntField(object, fieldIds.minor, pVersionInfo->m_minor); 3033 3034 // Set the revision field. 3035 pEnv->SetIntField(object, fieldIds.revision, pVersionInfo->m_revision); 3036 3037 // Return the object. 3038 (*pObject) = object; 3039 } 3040 } 3041 } 3042 3043 #ifdef VIDEOEDIT_LOGGING_ENABLED 3044 void 3045 videoEditClasses_logVersion( 3046 M4_VersionInfo* pVersionInfo, 3047 int indentation) 3048 { 3049 // Check if memory was allocated for the Version. 3050 if (M4OSA_NULL != pVersionInfo) 3051 { 3052 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3053 "%*c major: %u ms", indentation, ' ', 3054 (unsigned int)pVersionInfo->m_major); 3055 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3056 "%*c minor: %u", indentation, ' ', 3057 (unsigned int)pVersionInfo->m_minor); 3058 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3059 "%*c revision: %u", indentation, ' ', 3060 (unsigned int)pVersionInfo->m_revision); 3061 } 3062 else 3063 { 3064 VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3065 "%*c <null>", indentation, ' '); 3066 } 3067 } 3068 #endif 3069 3070 3071 void* 3072 videoEditClasses_getContext( 3073 bool* pResult, 3074 JNIEnv* pEnv, 3075 jobject object) 3076 { 3077 void* pContext = M4OSA_NULL; 3078 jclass clazz = NULL; 3079 VideoEditJava_EngineFieldIds fieldIds = {NULL}; 3080 3081 // Check if the previous action succeeded. 3082 if (*pResult) 3083 { 3084 // Log the function call. 3085 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3086 "videoEditClasses_getContext()"); 3087 3088 // Retrieve the class. 3089 videoEditJava_getEngineClass(pResult, pEnv, &clazz); 3090 3091 // Retrieve the field ids. 3092 videoEditJava_getEngineFieldIds(pResult, pEnv, &fieldIds); 3093 } 3094 3095 // Check if the class and field ids could be located. 3096 if (*pResult) 3097 { 3098 // Retrieve the context pointer. 3099 pContext = (void *)pEnv->GetIntField(object, fieldIds.context); 3100 } 3101 3102 // Return the context pointer. 3103 return(pContext); 3104 } 3105 3106 void 3107 videoEditClasses_setContext( 3108 bool* pResult, 3109 JNIEnv* pEnv, 3110 jobject object, 3111 void* pContext) 3112 { 3113 jclass clazz = NULL; 3114 VideoEditJava_EngineFieldIds fieldIds = {NULL}; 3115 3116 // Check if the previous action succeeded. 3117 if (*pResult) 3118 { 3119 // Log the function call. 3120 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3121 "videoEditClasses_setContext()"); 3122 3123 // Retrieve the class. 3124 videoEditJava_getEngineClass(pResult, pEnv, &clazz); 3125 3126 // Retrieve the field ids. 3127 videoEditJava_getEngineFieldIds(pResult, pEnv, &fieldIds); 3128 } 3129 3130 // Check if the class and field ids could be located. 3131 if (*pResult) 3132 { 3133 // Set the context field. 3134 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3135 "The context value from JAVA before setting is = 0x%x", 3136 pEnv->GetIntField(object, fieldIds.context)); 3137 3138 pEnv->SetIntField(object, fieldIds.context, (int)pContext); 3139 M4OSA_TRACE1_1("The context value in JNI is = 0x%x",pContext); 3140 3141 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", 3142 "The context value from JAVA after setting is = 0x%x", 3143 pEnv->GetIntField(object, fieldIds.context)); 3144 } 3145 } 3146 3147