android_frameworks_base/media/jni/mediaeditor/VideoEditorClasses.cpp
wfeng6 c96a7294a4 To avoid the JNI memory leaks in video editor codes
There is a protential memory leak in video editor JNI codes.
When importing so many video clips, the number of local reference
will exceed 512, which will cause the Dalvik virtual machine
crash. The patch will free each local reference when it's no
longer used to avoid memory leaks.

Change-Id: Iecd986c83f05a1103641746d6d43eef0a9c5ee40
Author: Wei Feng <wei.feng@intel.com>
Signed-off-by: Wei Feng <wei.feng@intel.com>
Singed-off-by: Shuo Gao <shuo.gao@intel.com>
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
Signed-off-by: Jack Ren <jack.ren@intel.com>
Author-tracking-BZ: 40786
2012-08-17 10:22:57 +08:00

3146 lines
141 KiB
C++
Executable File

/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <VideoEditorClasses.h>
#include <VideoEditorJava.h>
#include <VideoEditorLogging.h>
#include <VideoEditorOsal.h>
extern "C" {
#include <M4OSA_Clock.h>
#include <M4OSA_CharStar.h>
#include <M4OSA_FileCommon.h>
#include <M4OSA_FileReader.h>
#include <M4OSA_FileWriter.h>
#include <M4OSA_Memory.h>
#include <M4OSA_Debug.h>
#include <M4OSA_Thread.h>
#include <M4VSS3GPP_API.h>
#include <M4xVSS_API.h>
#include <M4VSS3GPP_ErrorCodes.h>
#include <M4MCS_ErrorCodes.h>
#include <M4READER_Common.h>
#include <M4WRITER_common.h>
#include <M4DECODER_Common.h>
};
#define VIDEOEDIT_PROP_JAVA_RESULT_STRING_MAX (128)
#define VIDEOEDIT_JAVA__RESULT_STRING_MAX (128)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioEffect)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kAudioEffectType_None),
VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_IN", M4VSS3GPP_kAudioEffectType_FadeIn),
VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_OUT", M4VSS3GPP_kAudioEffectType_FadeOut)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioEffect, AUDIO_EFFECT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioFormat)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NO_AUDIO", M4VIDEOEDITING_kNoneAudio),
VIDEOEDIT_JAVA_CONSTANT_INIT("AMR_NB", M4VIDEOEDITING_kAMR_NB),
VIDEOEDIT_JAVA_CONSTANT_INIT("AAC", M4VIDEOEDITING_kAAC),
VIDEOEDIT_JAVA_CONSTANT_INIT("AAC_PLUS", M4VIDEOEDITING_kAACplus),
VIDEOEDIT_JAVA_CONSTANT_INIT("ENHANCED_AAC_PLUS", M4VIDEOEDITING_keAACplus),
VIDEOEDIT_JAVA_CONSTANT_INIT("MP3", M4VIDEOEDITING_kMP3),
VIDEOEDIT_JAVA_CONSTANT_INIT("EVRC", M4VIDEOEDITING_kEVRC),
VIDEOEDIT_JAVA_CONSTANT_INIT("PCM", M4VIDEOEDITING_kPCM),
VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_AUDIO", M4VIDEOEDITING_kNullAudio),
VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED_AUDIO", M4VIDEOEDITING_kUnsupportedAudio)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioFormat, AUDIO_FORMAT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioSamplingFrequency)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_DEFAULT", M4VIDEOEDITING_kDefault_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_8000", M4VIDEOEDITING_k8000_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_16000", M4VIDEOEDITING_k16000_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_22050", M4VIDEOEDITING_k22050_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_24000", M4VIDEOEDITING_k24000_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_32000", M4VIDEOEDITING_k32000_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_44100", M4VIDEOEDITING_k44100_ASF),
VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_48000", M4VIDEOEDITING_k48000_ASF)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioSamplingFrequency,AUDIO_SAMPLING_FREQUENCY_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioTransition)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kAudioTransitionType_None),
VIDEOEDIT_JAVA_CONSTANT_INIT("CROSS_FADE", M4VSS3GPP_kAudioTransitionType_CrossFade)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioTransition, AUDIO_TRANSITION_CLASS_NAME, M4OSA_NULL,
M4OSA_NULL)
static const char*
videoEditClasses_getUnknownBitrateString(int bitrate)
{
static char string[VIDEOEDIT_JAVA__RESULT_STRING_MAX] = "";
M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1, (M4OSA_Char*)"%d", bitrate);
// Return the bitrate string.
return(string);
}
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Bitrate)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("VARIABLE", M4VIDEOEDITING_kVARIABLE_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("UNDEFINED", M4VIDEOEDITING_kUndefinedBitrate),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_9_2_KBPS", M4VIDEOEDITING_k9_2_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_12_2_KBPS", M4VIDEOEDITING_k12_2_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_16_KBPS", M4VIDEOEDITING_k16_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_24_KBPS", M4VIDEOEDITING_k24_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_32_KBPS", M4VIDEOEDITING_k32_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_48_KBPS", M4VIDEOEDITING_k48_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_64_KBPS", M4VIDEOEDITING_k64_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_96_KBPS", M4VIDEOEDITING_k96_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_128_KBPS", M4VIDEOEDITING_k128_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_192_KBPS", M4VIDEOEDITING_k192_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_256_KBPS", M4VIDEOEDITING_k256_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_288_KBPS", M4VIDEOEDITING_k288_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_384_KBPS", M4VIDEOEDITING_k384_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_512_KBPS", M4VIDEOEDITING_k512_KBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_800_KBPS", M4VIDEOEDITING_k800_KBPS),
/*+ New Encoder bitrates */
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_2_MBPS", M4VIDEOEDITING_k2_MBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_5_MBPS", M4VIDEOEDITING_k5_MBPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("BR_8_MBPS", M4VIDEOEDITING_k8_MBPS)
/*- New Encoder bitrates */
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Bitrate, BITRATE_CLASS_NAME,
videoEditClasses_getUnknownBitrateString, videoEditClasses_getUnknownBitrateString)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(ClipType)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("THREE_GPP", M4VIDEOEDITING_kFileType_3GPP),
VIDEOEDIT_JAVA_CONSTANT_INIT("MP4", M4VIDEOEDITING_kFileType_MP4),
VIDEOEDIT_JAVA_CONSTANT_INIT("AMR", M4VIDEOEDITING_kFileType_AMR),
VIDEOEDIT_JAVA_CONSTANT_INIT("MP3", M4VIDEOEDITING_kFileType_MP3),
VIDEOEDIT_JAVA_CONSTANT_INIT("PCM", M4VIDEOEDITING_kFileType_PCM),
VIDEOEDIT_JAVA_CONSTANT_INIT("JPG", M4VIDEOEDITING_kFileType_JPG),
VIDEOEDIT_JAVA_CONSTANT_INIT("PNG", M4VIDEOEDITING_kFileType_PNG),
VIDEOEDIT_JAVA_CONSTANT_INIT("M4V", M4VIDEOEDITING_kFileType_M4V),
VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kFileType_Unsupported)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(ClipType, FILE_TYPE_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Engine)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("TASK_LOADING_SETTINGS", TASK_LOADING_SETTINGS),
VIDEOEDIT_JAVA_CONSTANT_INIT("TASK_ENCODING", TASK_ENCODING)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME, M4OSA_NULL,
M4OSA_NULL)
static const char*
videoEditClasses_getUnknownErrorName(int error)
{
static char string[VIDEOEDIT_JAVA__RESULT_STRING_MAX] = "ERR_INTERNAL";
// Format the unknown error string.
M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1, (M4OSA_Char*)"ERR_INTERNAL(%s)",
videoEditOsal_getResultString(error));
// Return the error string.
return(string);
}
static const char*
videoEditClasses_getUnknownErrorString(int error)
{
// Return the result string.
return(videoEditOsal_getResultString(error));
}
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Error)
{
// M4OSA_Clock.h
VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_TIMESCALE_TOO_BIG", \
M4WAR_TIMESCALE_TOO_BIG ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_CLOCK_BAD_REF_YEAR", \
M4ERR_CLOCK_BAD_REF_YEAR ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FILE_NOT_FOUND", \
M4ERR_FILE_NOT_FOUND ),
VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_TRANSCODING_NECESSARY", \
M4VSS3GPP_WAR_TRANSCODING_NECESSARY ),
VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_MAX_OUTPUT_SIZE_EXCEEDED", \
M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BUFFER_OUT_TOO_SMALL", \
M4xVSSWAR_BUFFER_OUT_TOO_SMALL ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NOMORE_SPACE_FOR_FILE", \
M4xVSSERR_NO_MORE_SPACE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_FILE_TYPE", \
M4VSS3GPP_ERR_INVALID_FILE_TYPE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_EFFECT_KIND", \
M4VSS3GPP_ERR_INVALID_EFFECT_KIND ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_EFFECT_TYPE", \
M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_AUDIO_EFFECT_TYPE", \
M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_TRANSITION_TYPE", \
M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_AUDIO_TRANSITION_TYPE", \
M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_ENCODING_FRAME_RATE", \
M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EXTERNAL_EFFECT_NULL", \
M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EXTERNAL_TRANSITION_NULL", \
M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BEGIN_CUT_LARGER_THAN_DURATION", \
M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BEGIN_CUT_LARGER_THAN_END_CUT", \
M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_OVERLAPPING_TRANSITIONS", \
M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS ),
#ifdef M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ANALYSIS_DATA_SIZE_TOO_SMALL", \
M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL ),
#endif
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_3GPP_FILE", \
M4VSS3GPP_ERR_INVALID_3GPP_FILE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT", \
M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT", \
M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AMR_EDITING_UNSUPPORTED", \
M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_VIDEO_AU_TOO_LARGE", \
M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_AU_TOO_LARGE", \
M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_CORRUPTED_AU", \
M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU ),
#ifdef M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_CORRUPTED_AU", \
M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU ),
#endif
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ENCODER_ACCES_UNIT_ERROR", \
M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT", \
M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_H263_PROFILE", \
M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE", \
M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_MPEG4_RVLC", \
M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT", \
M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE", \
M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE",\
M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_CLIP_ANALYSIS_VERSION", \
M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION ),
#ifdef M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_CLIP_ANALYSIS_PLATFORM", \
M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM ),
#endif
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_FORMAT", \
M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE", \
M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_TIME_SCALE", \
M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING", \
M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_MP3_ASSEMBLY", \
M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NO_SUPPORTED_STREAM_IN_FILE", \
M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ADDVOLUME_EQUALS_ZERO", \
M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION", \
M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT", \
M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_ADDED_AUDIO_STREAM", \
M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_MIXING_UNSUPPORTED", \
M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED ),
#ifdef M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_MIXING_MP3_UNSUPPORTED", \
M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED ),
#endif
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK", \
M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK ),
#ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_AAC", \
M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC ),
#endif
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_CANNOT_BE_MIXED", \
M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED ),
#ifdef M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED", \
M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED ),
#endif
#ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_EVRC", \
M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC ),
#endif
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_H263_PROFILE_NOT_SUPPORTED", \
M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE", \
M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE ),
VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INTERNAL", \
M4NO_ERROR ),
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Error, ERROR_CLASS_NAME,
videoEditClasses_getUnknownErrorName, videoEditClasses_getUnknownErrorString)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(FileType)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("THREE_GPP", VideoEditClasses_kFileType_3GPP),
VIDEOEDIT_JAVA_CONSTANT_INIT("MP4", VideoEditClasses_kFileType_MP4),
VIDEOEDIT_JAVA_CONSTANT_INIT("AMR", VideoEditClasses_kFileType_AMR),
VIDEOEDIT_JAVA_CONSTANT_INIT("MP3", VideoEditClasses_kFileType_MP3),
VIDEOEDIT_JAVA_CONSTANT_INIT("PCM", VideoEditClasses_kFileType_PCM),
VIDEOEDIT_JAVA_CONSTANT_INIT("JPG", VideoEditClasses_kFileType_JPG),
VIDEOEDIT_JAVA_CONSTANT_INIT("GIF", VideoEditClasses_kFileType_GIF),
VIDEOEDIT_JAVA_CONSTANT_INIT("PNG", VideoEditClasses_kFileType_PNG),
VIDEOEDIT_JAVA_CONSTANT_INIT("M4V", VideoEditClasses_kFileType_M4V),
VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", VideoEditClasses_kFileType_Unsupported)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(FileType, FILE_TYPE_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(MediaRendering)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("RESIZING", M4xVSS_kResizing),
VIDEOEDIT_JAVA_CONSTANT_INIT("CROPPING", M4xVSS_kCropping),
VIDEOEDIT_JAVA_CONSTANT_INIT("BLACK_BORDERS", M4xVSS_kBlackBorders)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(MediaRendering, MEDIA_RENDERING_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(SlideDirection)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("RIGHT_OUT_LEFT_IN", M4xVSS_SlideTransition_RightOutLeftIn),
VIDEOEDIT_JAVA_CONSTANT_INIT("LEFT_OUT_RIGTH_IN", M4xVSS_SlideTransition_LeftOutRightIn),
VIDEOEDIT_JAVA_CONSTANT_INIT("TOP_OUT_BOTTOM_IN", M4xVSS_SlideTransition_TopOutBottomIn),
VIDEOEDIT_JAVA_CONSTANT_INIT("BOTTOM_OUT_TOP_IN", M4xVSS_SlideTransition_BottomOutTopIn)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(SlideDirection, SLIDE_DIRECTION_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(TransitionBehaviour)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("SPEED_UP", M4VSS3GPP_TransitionBehaviour_SpeedUp),
VIDEOEDIT_JAVA_CONSTANT_INIT("LINEAR", M4VSS3GPP_TransitionBehaviour_Linear),
VIDEOEDIT_JAVA_CONSTANT_INIT("SPEED_DOWN", M4VSS3GPP_TransitionBehaviour_SpeedDown),
VIDEOEDIT_JAVA_CONSTANT_INIT("SLOW_MIDDLE", M4VSS3GPP_TransitionBehaviour_SlowMiddle),
VIDEOEDIT_JAVA_CONSTANT_INIT("FAST_MIDDLE", M4VSS3GPP_TransitionBehaviour_FastMiddle)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(TransitionBehaviour, TRANSITION_BEHAVIOUR_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoEffect)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kVideoEffectType_None),
VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_FROM_BLACK", M4VSS3GPP_kVideoEffectType_FadeFromBlack),
VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_TO_BLACK", M4VSS3GPP_kVideoEffectType_FadeToBlack),
VIDEOEDIT_JAVA_CONSTANT_INIT("EXTERNAL", M4VSS3GPP_kVideoEffectType_External),
VIDEOEDIT_JAVA_CONSTANT_INIT("BLACK_AND_WHITE", M4xVSS_kVideoEffectType_BlackAndWhite),
VIDEOEDIT_JAVA_CONSTANT_INIT("PINK", M4xVSS_kVideoEffectType_Pink),
VIDEOEDIT_JAVA_CONSTANT_INIT("GREEN", M4xVSS_kVideoEffectType_Green),
VIDEOEDIT_JAVA_CONSTANT_INIT("SEPIA", M4xVSS_kVideoEffectType_Sepia),
VIDEOEDIT_JAVA_CONSTANT_INIT("NEGATIVE", M4xVSS_kVideoEffectType_Negative),
VIDEOEDIT_JAVA_CONSTANT_INIT("FRAMING", M4xVSS_kVideoEffectType_Framing),
VIDEOEDIT_JAVA_CONSTANT_INIT("TEXT", M4xVSS_kVideoEffectType_Text),
VIDEOEDIT_JAVA_CONSTANT_INIT("ZOOM_IN", M4xVSS_kVideoEffectType_ZoomIn),
VIDEOEDIT_JAVA_CONSTANT_INIT("ZOOM_OUT", M4xVSS_kVideoEffectType_ZoomOut),
VIDEOEDIT_JAVA_CONSTANT_INIT("FIFTIES", M4xVSS_kVideoEffectType_Fifties),
VIDEOEDIT_JAVA_CONSTANT_INIT("COLORRGB16", M4xVSS_kVideoEffectType_ColorRGB16),
VIDEOEDIT_JAVA_CONSTANT_INIT("GRADIENT", M4xVSS_kVideoEffectType_Gradient),
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoEffect, VIDEO_EFFECT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFormat)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NO_VIDEO", M4VIDEOEDITING_kNoneVideo),
VIDEOEDIT_JAVA_CONSTANT_INIT("H263", M4VIDEOEDITING_kH263),
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4", M4VIDEOEDITING_kMPEG4),
VIDEOEDIT_JAVA_CONSTANT_INIT("H264", M4VIDEOEDITING_kH264),
VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_VIDEO", M4VIDEOEDITING_kNullVideo),
VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kUnsupportedVideo),
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFormat, VIDEO_FORMAT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameRate)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_5_FPS", M4VIDEOEDITING_k5_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_7_5_FPS", M4VIDEOEDITING_k7_5_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_10_FPS", M4VIDEOEDITING_k10_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_12_5_FPS", M4VIDEOEDITING_k12_5_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_15_FPS", M4VIDEOEDITING_k15_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_20_FPS", M4VIDEOEDITING_k20_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_25_FPS", M4VIDEOEDITING_k25_FPS),
VIDEOEDIT_JAVA_CONSTANT_INIT("FR_30_FPS", M4VIDEOEDITING_k30_FPS)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameRate, VIDEO_FRAME_RATE_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameSize)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("SQCIF", M4VIDEOEDITING_kSQCIF),
VIDEOEDIT_JAVA_CONSTANT_INIT("QQVGA", M4VIDEOEDITING_kQQVGA),
VIDEOEDIT_JAVA_CONSTANT_INIT("QCIF", M4VIDEOEDITING_kQCIF),
VIDEOEDIT_JAVA_CONSTANT_INIT("QVGA", M4VIDEOEDITING_kQVGA),
VIDEOEDIT_JAVA_CONSTANT_INIT("CIF", M4VIDEOEDITING_kCIF),
VIDEOEDIT_JAVA_CONSTANT_INIT("VGA", M4VIDEOEDITING_kVGA),
VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA", M4VIDEOEDITING_kWVGA),
VIDEOEDIT_JAVA_CONSTANT_INIT("NTSC", M4VIDEOEDITING_kNTSC),
VIDEOEDIT_JAVA_CONSTANT_INIT("nHD", M4VIDEOEDITING_k640_360),
VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA16x9", M4VIDEOEDITING_k854_480),
VIDEOEDIT_JAVA_CONSTANT_INIT("V720p", M4VIDEOEDITING_k1280_720),
VIDEOEDIT_JAVA_CONSTANT_INIT("W720p", M4VIDEOEDITING_k1080_720),
VIDEOEDIT_JAVA_CONSTANT_INIT("S720p", M4VIDEOEDITING_k960_720),
VIDEOEDIT_JAVA_CONSTANT_INIT("V1080p", M4VIDEOEDITING_k1920_1080)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameSize, VIDEO_FRAME_SIZE_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoTransition)
{
VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kVideoTransitionType_None),
VIDEOEDIT_JAVA_CONSTANT_INIT("CROSS_FADE", M4VSS3GPP_kVideoTransitionType_CrossFade),
VIDEOEDIT_JAVA_CONSTANT_INIT("EXTERNAL", M4VSS3GPP_kVideoTransitionType_External),
VIDEOEDIT_JAVA_CONSTANT_INIT("ALPHA_MAGIC", M4xVSS_kVideoTransitionType_AlphaMagic),
VIDEOEDIT_JAVA_CONSTANT_INIT("SLIDE_TRANSITION", M4xVSS_kVideoTransitionType_SlideTransition),
VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_BLACK", M4xVSS_kVideoTransitionType_FadeBlack)
};
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoTransition, VIDEO_TRANSITION_CLASS_NAME,
M4OSA_NULL, M4OSA_NULL)
VIDEOEDIT_JAVA_DEFINE_FIELDS(AlphaMagic)
{
VIDEOEDIT_JAVA_FIELD_INIT("file", "Ljava/lang/String;"),
VIDEOEDIT_JAVA_FIELD_INIT("blendingPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("invertRotation", "Z" ),
VIDEOEDIT_JAVA_FIELD_INIT("rgbWidth", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("rgbHeight", "I" )
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(AlphaMagic, ALPHA_MAGIC_SETTINGS_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(Properties)
{
VIDEOEDIT_JAVA_FIELD_INIT("duration", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("fileType", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("videoDuration", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("videoBitrate", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("width", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("height", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("averageFrameRate", "F"),
VIDEOEDIT_JAVA_FIELD_INIT("profile", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("level", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("profileSupported", "Z"),
VIDEOEDIT_JAVA_FIELD_INIT("levelSupported", "Z"),
VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioDuration", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioChannels", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFrequency", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("videoRotation", "I")
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Properties, PROPERTIES_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(BackgroundMusic)
{
VIDEOEDIT_JAVA_FIELD_INIT("file", "Ljava/lang/String;"),
VIDEOEDIT_JAVA_FIELD_INIT("fileType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("insertionTime", "J" ),
VIDEOEDIT_JAVA_FIELD_INIT("volumePercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("beginLoop", "J" ),
VIDEOEDIT_JAVA_FIELD_INIT("endLoop", "J" ),
VIDEOEDIT_JAVA_FIELD_INIT("enableDucking", "Z" ),
VIDEOEDIT_JAVA_FIELD_INIT("duckingThreshold","I" ),
VIDEOEDIT_JAVA_FIELD_INIT("lowVolume", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("isLooping", "Z" )
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(BackgroundMusic, BACKGROUND_MUSIC_SETTINGS_CLASS_NAME)
/*
VIDEOEDIT_JAVA_DEFINE_FIELDS(BestEditSettings)
{
VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("audioChannels", "I")
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(BestEditSettings, BEST_EDIT_SETTINGS_CLASS_NAME)
*/
VIDEOEDIT_JAVA_DEFINE_FIELDS(ClipSettings)
{
VIDEOEDIT_JAVA_FIELD_INIT("clipPath", "Ljava/lang/String;"),
VIDEOEDIT_JAVA_FIELD_INIT("fileType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("beginCutTime", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("endCutTime", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("beginCutPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("endCutPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomEnabled", "Z" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomPercentStart", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftXStart", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftYStart", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomPercentEnd", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftXEnd", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftYEnd", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("mediaRendering", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("rgbWidth", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("rgbHeight", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("rotationDegree", "I" )
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(ClipSettings, CLIP_SETTINGS_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(EditSettings)
{
VIDEOEDIT_JAVA_FIELD_INIT("clipSettingsArray", "[L"CLIP_SETTINGS_CLASS_NAME";" ),
VIDEOEDIT_JAVA_FIELD_INIT("transitionSettingsArray", "[L"TRANSITION_SETTINGS_CLASS_NAME";" ),
VIDEOEDIT_JAVA_FIELD_INIT("effectSettingsArray", "[L"EFFECT_SETTINGS_CLASS_NAME";" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoFrameRate", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("outputFile", "Ljava/lang/String;" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoFormat", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoProfile", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoLevel", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioFormat", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFreq", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("maxFileSize", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioChannels", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoBitrate", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("backgroundMusicSettings",\
"L"BACKGROUND_MUSIC_SETTINGS_CLASS_NAME";"),
VIDEOEDIT_JAVA_FIELD_INIT("primaryTrackVolume", "I" )
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(EditSettings, EDIT_SETTINGS_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(EffectSettings)
{
VIDEOEDIT_JAVA_FIELD_INIT("startTime", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("duration", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoEffectType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioEffectType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("startPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("durationPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("framingFile", "Ljava/lang/String;"),
VIDEOEDIT_JAVA_FIELD_INIT("framingBuffer", "[I" ),
VIDEOEDIT_JAVA_FIELD_INIT("bitmapType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("width", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("height", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("topLeftX", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("topLeftY", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("framingResize", "Z" ),
VIDEOEDIT_JAVA_FIELD_INIT("framingScaledSize", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("text", "Ljava/lang/String;"),
VIDEOEDIT_JAVA_FIELD_INIT("textRenderingData", "Ljava/lang/String;"),
VIDEOEDIT_JAVA_FIELD_INIT("textBufferWidth", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("textBufferHeight", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("fiftiesFrameRate", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("rgb16InputColor", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingStartPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingMiddlePercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingEndPercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingFadeInTimePercent", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingFadeOutTimePercent", "I" )
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(EffectSettings, EFFECT_SETTINGS_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(Engine)
{
VIDEOEDIT_JAVA_FIELD_INIT("mManualEditContext", "I")
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(SlideTransitionSettings)
{
VIDEOEDIT_JAVA_FIELD_INIT("direction", "I")
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(SlideTransitionSettings, SLIDE_TRANSITION_SETTINGS_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(TransitionSettings)
{
VIDEOEDIT_JAVA_FIELD_INIT("duration", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("videoTransitionType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("audioTransitionType", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("transitionBehaviour", "I" ),
VIDEOEDIT_JAVA_FIELD_INIT("alphaSettings", "L"ALPHA_MAGIC_SETTINGS_CLASS_NAME";" ),
VIDEOEDIT_JAVA_FIELD_INIT("slideSettings", "L"SLIDE_TRANSITION_SETTINGS_CLASS_NAME";")
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(TransitionSettings, TRANSITION_SETTINGS_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_FIELDS(Version)
{
VIDEOEDIT_JAVA_FIELD_INIT("major", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("minor", "I"),
VIDEOEDIT_JAVA_FIELD_INIT("revision", "I")
};
VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Version, VERSION_CLASS_NAME)
VIDEOEDIT_JAVA_DEFINE_METHODS(Engine)
{
VIDEOEDIT_JAVA_METHOD_INIT("onProgressUpdate", "(II)V")
};
VIDEOEDIT_JAVA_DEFINE_METHOD_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME)
static const char*
videoEditClasses_getBrandString(M4OSA_UInt32 brand)
{
static char brandString[11] = "0x00000000";
const char* pBrandString = M4OSA_NULL;
M4OSA_UInt8* pBrand = (M4OSA_UInt8*)&brand;
M4OSA_UInt32 brandHost = 0;
// Convert the brand from big endian to host.
brandHost = pBrand[0];
brandHost = brandHost << 8;
brandHost += pBrand[1];
brandHost = brandHost << 8;
brandHost += pBrand[2];
brandHost = brandHost << 8;
brandHost += pBrand[3];
switch (brandHost)
{
case M4VIDEOEDITING_BRAND_0000:
pBrandString = "0000";
break;
case M4VIDEOEDITING_BRAND_3G2A:
pBrandString = "3G2A";
break;
case M4VIDEOEDITING_BRAND_3GP4:
pBrandString = "3GP4";
break;
case M4VIDEOEDITING_BRAND_3GP5:
pBrandString = "3GP5";
break;
case M4VIDEOEDITING_BRAND_3GP6:
pBrandString = "3GP6";
break;
case M4VIDEOEDITING_BRAND_AVC1:
pBrandString = "AVC1";
break;
case M4VIDEOEDITING_BRAND_EMP:
pBrandString = "EMP";
break;
case M4VIDEOEDITING_BRAND_ISOM:
pBrandString = "ISOM";
break;
case M4VIDEOEDITING_BRAND_MP41:
pBrandString = "MP41";
break;
case M4VIDEOEDITING_BRAND_MP42:
pBrandString = "MP42";
break;
case M4VIDEOEDITING_BRAND_VFJ1:
pBrandString = "VFJ1";
break;
default:
M4OSA_chrSPrintf((M4OSA_Char *)brandString,
sizeof(brandString) - 1,
(M4OSA_Char*)"0x%08X", brandHost);
pBrandString = brandString;
break;
}
// Return the brand string.
return(pBrandString);
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
static void
videoEditClasses_logFtypBox(
M4VIDEOEDITING_FtypBox* pBox,
int indentation)
{
// Check if memory was allocated for the FtypBox.
if (M4OSA_NULL != pBox)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c major_brand: %s", indentation, ' ',
videoEditClasses_getBrandString(pBox->major_brand));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c minor_version: %08X", indentation, ' ',
(unsigned int)pBox->minor_version);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c nbCompatibleBrands: %u", indentation, ' ',
(unsigned int)pBox->nbCompatibleBrands);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c compatible_brands:", indentation, ' ');
indentation += VIDEOEDIT_LOG_INDENTATION;
for (int i = 0; (i < (int)pBox->nbCompatibleBrands) &&\
(i < M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS); i++)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c compatible_brand[%d]: %s", indentation, ' ',
i, videoEditClasses_getBrandString(pBox->compatible_brands[i]));
}
indentation -= VIDEOEDIT_LOG_INDENTATION;
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>",
indentation, ' ');
}
}
#endif
void
videoEditClasses_init(
bool* pResult,
JNIEnv* pEnv)
{
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",\
"videoEditClasses_init()");
// Initialize the constants.
videoEditJava_initAudioEffectConstants(pResult, pEnv);
videoEditJava_initAudioFormatConstants(pResult, pEnv);
videoEditJava_initAudioSamplingFrequencyConstants(pResult, pEnv);
videoEditJava_initAudioTransitionConstants(pResult, pEnv);
videoEditJava_initBitrateConstants(pResult, pEnv);
videoEditJava_initClipTypeConstants(pResult, pEnv);
videoEditJava_initEngineConstants(pResult, pEnv);
videoEditJava_initErrorConstants(pResult, pEnv);
videoEditJava_initFileTypeConstants(pResult, pEnv);
videoEditJava_initMediaRenderingConstants(pResult, pEnv);
videoEditJava_initSlideDirectionConstants(pResult, pEnv);
videoEditJava_initTransitionBehaviourConstants(pResult, pEnv);
videoEditJava_initVideoEffectConstants(pResult, pEnv);
videoEditJava_initVideoFormatConstants(pResult, pEnv);
videoEditJava_initVideoFrameRateConstants(pResult, pEnv);
videoEditJava_initVideoFrameSizeConstants(pResult, pEnv);
videoEditJava_initVideoTransitionConstants(pResult, pEnv);
// Initialize the fields.
videoEditJava_initAlphaMagicFields(pResult, pEnv);
videoEditJava_initBackgroundMusicFields(pResult, pEnv);
videoEditJava_initClipSettingsFields(pResult, pEnv);
videoEditJava_initEditSettingsFields(pResult, pEnv);
videoEditJava_initEffectSettingsFields(pResult, pEnv);
videoEditJava_initEngineFields(pResult, pEnv);
videoEditJava_initSlideTransitionSettingsFields(pResult, pEnv);
videoEditJava_initTransitionSettingsFields(pResult, pEnv);
videoEditJava_initVersionFields(pResult, pEnv);
// Initialize the methods.
videoEditJava_initEngineMethods(pResult, pEnv);
}
}
void
videoEditPropClass_init(
bool* pResult,
JNIEnv* pEnv)
{
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",\
"videoEditPropClass_init()");
// Initialize the constants.
videoEditJava_initAudioFormatConstants(pResult, pEnv);
videoEditJava_initErrorConstants(pResult, pEnv);
videoEditJava_initFileTypeConstants(pResult, pEnv);
videoEditJava_initVideoFormatConstants(pResult, pEnv);
// Initialize the fields.
videoEditJava_initPropertiesFields(pResult, pEnv);
}
}
void
videoEditClasses_getAlphaMagicSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4xVSS_AlphaMagicSettings** ppSettings)
{
VideoEditJava_AlphaMagicFieldIds fieldIds;
M4xVSS_AlphaMagicSettings* pSettings = M4OSA_NULL;
memset(&fieldIds, 0, sizeof(VideoEditJava_AlphaMagicFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getAlphaMagicSettings()");
// Retrieve the field ids.
videoEditJava_getAlphaMagicFieldIds(pResult, pEnv, &fieldIds);
}
// Only validate the AlphaMagicSettings if the fields could be located.
if (*pResult)
{
// Check if the clip is set.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(NULL == object),
"alphaSettings is null");
}
// Only retrieve the AlphaMagicSettings if the fields could be located and validated.
if (*pResult)
{
// Allocate memory for the AlphaMagicSettings.
pSettings = (M4xVSS_AlphaMagicSettings*)videoEditOsal_alloc(pResult, pEnv,
sizeof(M4xVSS_AlphaMagicSettings), "AlphaMagicSettings");
// Check if memory could be allocated for the AlphaMagicSettings.
if (*pResult)
{
// Set the alpha magic file path (JPG file).
pSettings->pAlphaFilePath = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
fieldIds.file, M4OSA_NULL);
// Check if the alpha magic file path is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(M4OSA_NULL == pSettings->pAlphaFilePath), "alphaSettings.file is null");
}
// Check if the alpha file path could be retrieved.
if (*pResult)
{
// Set the blending percentage between 0 and 100.
pSettings->blendingPercent = (M4OSA_UInt8)pEnv->GetIntField(object,
fieldIds.blendingPercent);
// Set the direct effect or reverse.
pSettings->isreverse = (M4OSA_Bool)pEnv->GetBooleanField(object,
fieldIds.invertRotation);
// Get the rgb width
pSettings->width = (M4OSA_UInt32) pEnv->GetIntField(object, fieldIds.rgbWidth );
pSettings->height = (M4OSA_UInt32) pEnv->GetIntField(object, fieldIds.rgbHeight );
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"((((((((((path %s", pSettings->pAlphaFilePath);
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"------- getAlphaMagicSettings width %d", pEnv->GetIntField(object,
fieldIds.rgbWidth ));
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"-------- getAlphaMagicSettings Height %d",
pEnv->GetIntField(object, fieldIds.rgbHeight ));
}
// Check if settings could be set.
if (*pResult)
{
// Return the settings.
(*ppSettings) = pSettings;
}
else
{
// Free the settings.
videoEditClasses_freeAlphaMagicSettings(&pSettings);
}
}
}
void
videoEditClasses_freeAlphaMagicSettings(
M4xVSS_AlphaMagicSettings** ppSettings)
{
// Check if memory was allocated for the AlphaMagicSettings.
if (M4OSA_NULL != (*ppSettings))
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeAlphaMagicSettings()");
// Free the alpha file path.
videoEditOsal_free((*ppSettings)->pAlphaFilePath);
(*ppSettings)->pAlphaFilePath = M4OSA_NULL;
// Free the settings structure.
videoEditOsal_free((*ppSettings));
(*ppSettings) = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logAlphaMagicSettings(
M4xVSS_AlphaMagicSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the AlphaMagicSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pAlphaFilePath: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pAlphaFilePath) ? \
(char *)pSettings->pAlphaFilePath : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c blendingPercent: %u %%", indentation, ' ',
(unsigned int)pSettings->blendingPercent);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c isreverse: %s", indentation, ' ',
pSettings->isreverse ? "true" : "false");
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void
videoEditClasses_getBackgroundMusicSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4xVSS_BGMSettings** ppSettings)
{
VideoEditJava_BackgroundMusicFieldIds fieldIds;
M4xVSS_BGMSettings* pSettings = M4OSA_NULL;
bool converted = true;
memset(&fieldIds, 0, sizeof(VideoEditJava_BackgroundMusicFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getBackgroundMusicSettings()");
// Retrieve the field ids.
videoEditJava_getBackgroundMusicFieldIds(pResult, pEnv, &fieldIds);
}
// Only retrieve the BackgroundMusicSettings if the fields could be located.
if (*pResult)
{
// Check if the object is valid.
if (NULL != object)
{
// Allocate memory for the BackgroundMusicSettings.
pSettings = (M4xVSS_BGMSettings*)videoEditOsal_alloc(pResult, pEnv,
sizeof(M4xVSS_BGMSettings), "BackgroundMusicSettings");
// Check if memory could be allocated for the BackgroundMusicSettings.
if (*pResult)
{
// Set the input file path.
pSettings->pFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
fieldIds.file, M4OSA_NULL);
// Check if the input file path is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(M4OSA_NULL == pSettings->pFile), "backgroundMusicSettings.file is null");
}
// Check if the input file path could be retrieved.
if (*pResult)
{
// Set the file type .3gp, .amr, .mp3.
pSettings->FileType = M4VIDEOEDITING_kFileType_PCM;
/*(M4VIDEOEDITING_FileType)videoEditJava_getClipTypeJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.fileType));*/
// Check if the file type is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "backgroundMusicSettings.fileType is invalid");
}
// Check if the file type could be retrieved.
if (*pResult)
{
// Set the time, in milliseconds, at which the added audio track is inserted.
pSettings->uiAddCts = (M4OSA_UInt32)pEnv->GetLongField(object,
fieldIds.insertionTime);
// Set the volume, in percentage (0..100), of the added audio track.
pSettings->uiAddVolume = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.volumePercent);
// Set the start time of the loop in milli seconds.
pSettings->uiBeginLoop = (M4OSA_UInt32)pEnv->GetLongField(object,
fieldIds.beginLoop);
// Set the end time of the loop in milli seconds.
pSettings->uiEndLoop = (M4OSA_UInt32)pEnv->GetLongField(object,
fieldIds.endLoop);
// Set the end time of the loop in milli seconds.
pSettings->b_DuckingNeedeed =
(M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.enableDucking);
// Set the end time of the loop in milli seconds.
pSettings->InDucking_threshold =
(M4OSA_Int32)pEnv->GetIntField(object, fieldIds.duckingThreshold);
// Set the end time of the loop in milli seconds.
pSettings->lowVolume =
(M4OSA_Float)(((M4OSA_Float)pEnv->GetIntField(object, fieldIds.lowVolume)));
// Set the end time of the loop in milli seconds.
pSettings->bLoop = (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.isLooping);
// Set sampling freq and channels
pSettings->uiSamplingFrequency = M4VIDEOEDITING_k32000_ASF;
pSettings->uiNumChannels = 2;
}
// Check if settings could be set.
if (*pResult)
{
// Return the settings.
(*ppSettings) = pSettings;
}
else
{
// Free the settings.
videoEditClasses_freeBackgroundMusicSettings(&pSettings);
}
}
}
}
void
videoEditClasses_freeBackgroundMusicSettings(
M4xVSS_BGMSettings** ppSettings)
{
// Check if memory was allocated for the BackgroundMusicSettings.
if (M4OSA_NULL != (*ppSettings))
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeBackgroundMusicSettings()");
// Free the input file path.
videoEditOsal_free((*ppSettings)->pFile);
(*ppSettings)->pFile = M4OSA_NULL;
// Free the settings structure.
videoEditOsal_free((*ppSettings));
(*ppSettings) = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logBackgroundMusicSettings(
M4xVSS_BGMSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the BackgroundMusicSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c pFile: %s",
indentation, ' ',
(M4OSA_NULL != pSettings->pFile) ? (char *)pSettings->pFile : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c FileType: %s", indentation, ' ',
videoEditJava_getClipTypeString(pSettings->FileType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiAddCts: %u ms",
indentation, ' ', (unsigned int)pSettings->uiAddCts);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiAddVolume: %u %%",
indentation, ' ', (unsigned int)pSettings->uiAddVolume);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiBeginLoop: %u ms",
indentation, ' ', (unsigned int)pSettings->uiBeginLoop);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiEndLoop: %u ms",
indentation, ' ', (unsigned int)pSettings->uiEndLoop);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c b_DuckingNeedeed:\
%u ", indentation, ' ', (bool)pSettings->b_DuckingNeedeed);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c InDucking_threshold: \
%u ms", indentation, ' ', (unsigned int)pSettings->InDucking_threshold);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c lowVolume: %2.2f ",\
indentation, ' ', (float)pSettings->lowVolume);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c bLoop: %u ms",\
indentation, ' ', (bool)pSettings->bLoop);
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>",
indentation, ' ');
}
}
#endif
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logClipProperties(
M4VIDEOEDITING_ClipProperties* pProperties,
int indentation)
{
// Check if memory was allocated for the ClipProperties.
if (M4OSA_NULL != pProperties)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bAnalysed: %s", indentation, ' ',
pProperties->bAnalysed ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c Version: %d.%d.%d", indentation, ' ',
pProperties->Version[0], pProperties->Version[1], pProperties->Version[2]);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiClipDuration: %u", indentation, ' ',
(unsigned int)pProperties->uiClipDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c FileType: %s", indentation, ' ',
videoEditJava_getClipTypeString(pProperties->FileType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c ftyp:",
indentation, ' ');
videoEditClasses_logFtypBox(&pProperties->ftyp, indentation + VIDEOEDIT_LOG_INDENTATION);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c VideoStreamType: %s", indentation, ' ',
videoEditJava_getVideoFormatString(pProperties->VideoStreamType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiClipVideoDuration: %u", indentation, ' ',
(unsigned int)pProperties->uiClipVideoDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiVideoBitrate: %s", indentation, ' ',
videoEditJava_getBitrateString(pProperties->uiVideoBitrate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiVideoMaxAuSize: %u", indentation, ' ',
(unsigned int)pProperties->uiVideoMaxAuSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiVideoWidth: %u", indentation, ' ',
(unsigned int)pProperties->uiVideoWidth);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiVideoHeight: %u", indentation, ' ',
(unsigned int)(unsigned int)pProperties->uiVideoHeight);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiVideoTimeScale: %u", indentation, ' ',
(unsigned int)pProperties->uiVideoTimeScale);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c fAverageFrameRate: %.3f", indentation, ' ',
pProperties->fAverageFrameRate);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bMPEG4dataPartition: %s", indentation, ' ',
pProperties->bMPEG4dataPartition ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bMPEG4rvlc: %s", indentation, ' ',
pProperties->bMPEG4rvlc ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bMPEG4resynchMarker: %s", indentation, ' ',
pProperties->bMPEG4resynchMarker ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c AudioStreamType: %s", indentation, ' ',
videoEditJava_getAudioFormatString(pProperties->AudioStreamType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiClipAudioDuration: %u", indentation, ' ',
(unsigned int)pProperties->uiClipAudioDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiAudioBitrate: %s", indentation, ' ',
videoEditJava_getBitrateString(pProperties->uiAudioBitrate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiAudioMaxAuSize: %u", indentation, ' ',
(unsigned int)pProperties->uiAudioMaxAuSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiNbChannels: %u", indentation, ' ',
(unsigned int)pProperties->uiNbChannels);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiSamplingFrequency: %u", indentation, ' ',
(unsigned int)pProperties->uiSamplingFrequency);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiExtendedSamplingFrequency: %u", indentation, ' ',
(unsigned int)pProperties->uiExtendedSamplingFrequency);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiDecodedPcmSize: %u", indentation, ' ',
(unsigned int)pProperties->uiDecodedPcmSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bVideoIsEditable: %s", indentation, ' ',
pProperties->bVideoIsEditable ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bAudioIsEditable: %s", indentation, ' ',
pProperties->bAudioIsEditable ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bVideoIsCompatibleWithMasterClip: %s", indentation, ' ',
pProperties->bVideoIsCompatibleWithMasterClip ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bAudioIsCompatibleWithMasterClip: %s", indentation, ' ',
pProperties->bAudioIsCompatibleWithMasterClip ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiClipAudioVolumePercentage: %d", indentation, ' ',
pProperties->uiClipAudioVolumePercentage);
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>",
indentation, ' ');
}
}
#endif
void
videoEditClasses_getClipSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4VSS3GPP_ClipSettings** ppSettings)
{
VideoEditJava_ClipSettingsFieldIds fieldIds;
M4VSS3GPP_ClipSettings* pSettings = M4OSA_NULL;
M4OSA_ERR result = M4NO_ERROR;
bool converted = true;
memset(&fieldIds, 0, sizeof(VideoEditJava_ClipSettingsFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getClipSettings()");
// Retrieve the field ids.
videoEditJava_getClipSettingsFieldIds(pResult, pEnv, &fieldIds);
}
// Only validate the ClipSettings if the fields could be located.
if (*pResult)
{
// Check if the clip is set.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(NULL == object),
"clip is null");
}
// Only retrieve the ClipSettings if the fields could be located and validated.
if (*pResult)
{
// Allocate memory for the ClipSettings.
pSettings = (M4VSS3GPP_ClipSettings *)videoEditOsal_alloc(pResult, pEnv,
sizeof(M4VSS3GPP_ClipSettings), "ClipSettings");
// Check if memory could be allocated for the ClipSettings.
if (*pResult)
{
// Log the API call.
VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4xVSS_CreateClipSettings()");
// Initialize the ClipSettings.
result = M4xVSS_CreateClipSettings(pSettings, NULL, 0, 0);
// Log the result.
VIDEOEDIT_LOG_RESULT(ANDROID_LOG_INFO, "VIDEO_EDITOR",
videoEditOsal_getResultString(result));
// Check if the initialization succeeded.
videoEditJava_checkAndThrowRuntimeException(pResult, pEnv,
(M4NO_ERROR != result), result);
}
// Check if the allocation and initialization succeeded
//(required because pSettings is dereferenced).
if (*pResult)
{
// Set the input file path.
pSettings->pFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
fieldIds.clipPath, &pSettings->filePathSize);
// Check if the file path is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(M4OSA_NULL == pSettings->pFile), "clip.clipPath is null");
}
// Check if the input file could be retrieved.
if (*pResult)
{
// Set the file type .3gp, .amr, .mp3.
pSettings->FileType = (M4VIDEOEDITING_FileType)videoEditJava_getClipTypeJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.fileType));
if (( pSettings->FileType == M4VIDEOEDITING_kFileType_JPG) ||
( pSettings->FileType == M4VIDEOEDITING_kFileType_PNG)) {
pSettings->FileType = M4VIDEOEDITING_kFileType_ARGB8888;
}
// Check if the file type is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "clip.fileType is invalid");
}
// Check if the file type could be retrieved.
if (*pResult)
{
// Set the begin cut time, in milliseconds.
pSettings->uiBeginCutTime =
(M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.beginCutTime);
// Set the end cut time, in milliseconds.
pSettings->uiEndCutTime = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.endCutTime);
// Set the begin cut time, in percent of clip duration (only for 3GPP clip !).
pSettings->xVSS.uiBeginCutPercent =
(M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.beginCutPercent);
// Set the end cut time, in percent of clip duration (only for 3GPP clip !).
pSettings->xVSS.uiEndCutPercent =
(M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.endCutPercent);
// Set the duration of the clip, if different from 0,
// has priority on uiEndCutTime or uiEndCutPercent.
pSettings->xVSS.uiDuration = 0;
// Set whether or not the pan and zoom mode is enabled.
pSettings->xVSS.isPanZoom =
(M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.panZoomEnabled);
// Set the pan and zoom start zoom percentage.
pSettings->xVSS.PanZoomXa =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomPercentStart);
// Set the pan and zoom start x.
pSettings->xVSS.PanZoomTopleftXa =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftXStart);
// Set the pan and zoom start y.
pSettings->xVSS.PanZoomTopleftYa =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftYStart);
// Set the pan and zoom end zoom percentage.
pSettings->xVSS.PanZoomXb =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomPercentEnd);
// Set the pan and zoom end x.
pSettings->xVSS.PanZoomTopleftXb =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftXEnd);
// Set the pan and zoom end y.
pSettings->xVSS.PanZoomTopleftYb =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftYEnd);
// Set the media rendering mode, only used with JPEG to crop, resize,
// or render black borders.
pSettings->xVSS.MediaRendering =
(M4xVSS_MediaRendering)videoEditJava_getMediaRenderingJavaToC(
&converted, pEnv->GetIntField(object,fieldIds.mediaRendering));
// Check if the media rendering is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
"clip.mediaRendering is invalid");
// Capture the rgb file width and height
pSettings->ClipProperties.uiStillPicWidth =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.rgbFileWidth);
pSettings->ClipProperties.uiStillPicHeight =
(M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.rgbFileHeight);
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", \
"getClipSettings-- rgbFileWidth %d ",
pSettings->ClipProperties.uiStillPicWidth);
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", \
"getClipSettings-- rgbFileHeight %d ",
pSettings->ClipProperties.uiStillPicHeight);
// Set the video rotation degree
pSettings->ClipProperties.videoRotationDegrees =
(M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.rotationDegree);
}
// Check if settings could be set.
if (*pResult)
{
// Return the settings.
(*ppSettings) = pSettings;
}
else
{
// Free the settings.
videoEditClasses_freeClipSettings(&pSettings);
}
}
}
void
videoEditClasses_createClipSettings(
bool* pResult,
JNIEnv* pEnv,
M4VSS3GPP_ClipSettings* pSettings,
jobject* pObject)
{
VideoEditJava_ClipSettingsFieldIds fieldIds;
jclass clazz = NULL;
jobject object = NULL;
memset(&fieldIds, 0, sizeof(VideoEditJava_ClipSettingsFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_createClipSettings()");
// Retrieve the class.
videoEditJava_getClipSettingsClass(pResult, pEnv, &clazz);
// Retrieve the field ids.
videoEditJava_getClipSettingsFieldIds(pResult, pEnv, &fieldIds);
}
// Only create an object if the class and fields could be located.
if (*pResult)
{
// Allocate a new object.
object = pEnv->AllocObject(clazz);
if (NULL != object)
{
// Set the clipPath field.
pEnv->SetObjectField(object, fieldIds.clipPath, NULL);
// Set the fileType field.
pEnv->SetIntField(object, fieldIds.fileType, videoEditJava_getClipTypeCToJava(
pSettings->FileType));
// Set the beginCutTime field.
pEnv->SetIntField(object, fieldIds.beginCutTime, pSettings->uiBeginCutTime);
// Set the endCutTime field.
pEnv->SetIntField(object, fieldIds.endCutTime, pSettings->uiEndCutTime);
// Set the beginCutPercent field.
pEnv->SetIntField(object, fieldIds.beginCutPercent, pSettings->xVSS.uiBeginCutPercent);
// Set the endCutPercent field.
pEnv->SetIntField(object, fieldIds.endCutPercent, pSettings->xVSS.uiEndCutPercent);
// Set the panZoomEnabled field.
pEnv->SetBooleanField(object, fieldIds.panZoomEnabled, pSettings->xVSS.isPanZoom);
// Set the panZoomPercentStart field.
pEnv->SetIntField(object, fieldIds.panZoomPercentStart,
(1000 - pSettings->xVSS.PanZoomXa));
// Set the panZoomTopLeftXStart field.
pEnv->SetIntField(object, fieldIds.panZoomTopLeftXStart,
pSettings->xVSS.PanZoomTopleftXa);
// Set the panZoomTopLeftYStart field.
pEnv->SetIntField(object, fieldIds.panZoomTopLeftYStart,
pSettings->xVSS.PanZoomTopleftYa);
// Set the panZoomPercentEnd field.
pEnv->SetIntField(object, fieldIds.panZoomPercentEnd,
(1000 - pSettings->xVSS.PanZoomXb));
// Set the panZoomTopLeftXEnd field.
pEnv->SetIntField(object, fieldIds.panZoomTopLeftXEnd,
pSettings->xVSS.PanZoomTopleftXb);
// Set the panZoomTopLeftYEnd field.
pEnv->SetIntField(object, fieldIds.panZoomTopLeftYEnd,
pSettings->xVSS.PanZoomTopleftYb);
// Set the mediaRendering field.
pEnv->SetIntField(object, fieldIds.mediaRendering,
videoEditJava_getMediaRenderingCToJava(pSettings->xVSS.MediaRendering));
// Set the rgb file width and height
pEnv->SetIntField(object, fieldIds.rgbFileWidth,
pSettings->ClipProperties.uiStillPicWidth );
pEnv->SetIntField(object, fieldIds.rgbFileHeight,
pSettings->ClipProperties.uiStillPicHeight );
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"rgbFileWeight %d rgbFileHeight %d ",
pSettings->ClipProperties.uiStillPicWidth ,
pSettings->ClipProperties.uiStillPicHeight);
// Set the video rotation
pEnv->SetIntField(object, fieldIds.rotationDegree,
pSettings->ClipProperties.videoRotationDegrees);
// Return the object.
(*pObject) = object;
}
}
}
void
videoEditPropClass_createProperties(
bool* pResult,
JNIEnv* pEnv,
VideoEditPropClass_Properties* pProperties,
jobject* pObject)
{
VideoEditJava_PropertiesFieldIds fieldIds;
jclass clazz = NULL;
jobject object = NULL;
memset(&fieldIds, 0, sizeof(VideoEditJava_PropertiesFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"videoEditPropClass_createProperties()");
// Retrieve the class.
videoEditJava_getPropertiesClass(pResult, pEnv, &clazz);
// Retrieve the field ids.
videoEditJava_getPropertiesFieldIds(pResult, pEnv, &fieldIds);
}
// Only create an object if the class and fields could be located.
if (*pResult)
{
// Allocate a new object.
object = pEnv->AllocObject(clazz);
if (NULL != object)
{
// Set the duration field.
pEnv->SetIntField(object, fieldIds.duration, pProperties->uiClipDuration);
// Set the fileType field.
pEnv->SetIntField(object, fieldIds.fileType,
videoEditJava_getFileTypeCToJava(pProperties->FileType));
// Set the videoFormat field.
pEnv->SetIntField(object, fieldIds.videoFormat,
videoEditJava_getVideoFormatCToJava(pProperties->VideoStreamType));
// Set the videoDuration field.
pEnv->SetIntField(object, fieldIds.videoDuration, pProperties->uiClipVideoDuration);
// Set the videoBitrate field.
pEnv->SetIntField(object, fieldIds.videoBitrate, pProperties->uiVideoBitrate);
// Set the width field.
pEnv->SetIntField(object, fieldIds.width, pProperties->uiVideoWidth);
// Set the height field.
pEnv->SetIntField(object, fieldIds.height, pProperties->uiVideoHeight);
// Set the averageFrameRate field.
pEnv->SetFloatField(object, fieldIds.averageFrameRate, pProperties->fAverageFrameRate);
// Set the profile field.
pEnv->SetIntField(object, fieldIds.profile,
pProperties->uiVideoProfile);
// Set the level field.
pEnv->SetIntField(object, fieldIds.level,
pProperties->uiVideoLevel);
// Set whether profile supported
pEnv->SetBooleanField(object, fieldIds.profileSupported,
pProperties->bProfileSupported);
// Set whether level supported
pEnv->SetBooleanField(object, fieldIds.levelSupported,
pProperties->bLevelSupported);
// Set the audioFormat field.
pEnv->SetIntField(object, fieldIds.audioFormat,
videoEditJava_getAudioFormatCToJava(pProperties->AudioStreamType));
// Set the audioDuration field.
pEnv->SetIntField(object, fieldIds.audioDuration, pProperties->uiClipAudioDuration);
// Set the audioBitrate field.
pEnv->SetIntField(object, fieldIds.audioBitrate, pProperties->uiAudioBitrate);
// Set the audioChannels field.
pEnv->SetIntField(object, fieldIds.audioChannels, pProperties->uiNbChannels);
// Set the audioSamplingFrequency field.
pEnv->SetIntField(object, fieldIds.audioSamplingFrequency,
pProperties->uiSamplingFrequency);
// Set the video rotation field.
pEnv->SetIntField(object, fieldIds.videoRotation, pProperties->uiRotation);
// Return the object.
(*pObject) = object;
}
}
}
void
videoEditClasses_freeClipSettings(
M4VSS3GPP_ClipSettings** ppSettings)
{
// Check if memory was allocated for the ClipSettings.
if (M4OSA_NULL != (*ppSettings))
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeClipSettings()");
// Free the input file path.
videoEditOsal_free((*ppSettings)->pFile);
(*ppSettings)->pFile = M4OSA_NULL;
(*ppSettings)->filePathSize = 0;
// Free the clip settings.
M4xVSS_FreeClipSettings((*ppSettings));
// Free the settings structure.
videoEditOsal_free((*ppSettings));
(*ppSettings) = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logClipSettings(
M4VSS3GPP_ClipSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the ClipSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pFile: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pFile) ? (char*)pSettings->pFile : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c FileType: %s", indentation, ' ',
videoEditJava_getClipTypeString(pSettings->FileType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c filePathSize: %u", indentation, ' ',
(unsigned int)pSettings->filePathSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c ClipProperties:", indentation, ' ');
videoEditClasses_logClipProperties(&pSettings->ClipProperties,
indentation + VIDEOEDIT_LOG_INDENTATION);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiBeginCutTime: %u ms", indentation, ' ',
(unsigned int)pSettings->uiBeginCutTime);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiEndCutTime: %u ms", indentation, ' ',
(unsigned int)pSettings->uiEndCutTime);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiBeginCutPercent: %u %%", indentation, ' ',
(unsigned int)pSettings->xVSS.uiBeginCutPercent);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiEndCutPercent: %u %%", indentation, ' ',
(unsigned int)pSettings->xVSS.uiEndCutPercent);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiDuration: %u ms", indentation, ' ',
(unsigned int)pSettings->xVSS.uiDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c isPanZoom: %s", indentation, ' ',
pSettings->xVSS.isPanZoom ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PanZoomXa: %d ms", indentation, ' ',
pSettings->xVSS.PanZoomXa);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PanZoomTopleftXa: %d ms", indentation, ' ',
pSettings->xVSS.PanZoomTopleftXa);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PanZoomTopleftYa: %d ms", indentation, ' ',
pSettings->xVSS.PanZoomTopleftYa);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PanZoomXb: %d ms", indentation, ' ',
pSettings->xVSS.PanZoomXb);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PanZoomTopleftXb: %d ms", indentation, ' ',
pSettings->xVSS.PanZoomTopleftXb);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PanZoomTopleftYb: %d ms", indentation, ' ',
pSettings->xVSS.PanZoomTopleftYb);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c MediaRendering: %s", indentation, ' ',
videoEditJava_getMediaRenderingString(pSettings->xVSS.MediaRendering));
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void
videoEditClasses_getEditSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4VSS3GPP_EditSettings** ppSettings,
bool flag)
{
VideoEditJava_EditSettingsFieldIds fieldIds;
jobjectArray clipSettingsArray = NULL;
jsize clipSettingsArraySize = 0;
jobject clipSettings = NULL;
jobjectArray transitionSettingsArray = NULL;
jsize transitionSettingsArraySize = 0;
jobject transitionSettings = NULL;
jobjectArray effectSettingsArray = NULL;
jsize effectSettingsArraySize = 0;
jobject effectSettings = NULL;
jobject backgroundMusicSettings = NULL;
int audioChannels = 0;
M4VSS3GPP_EditSettings* pSettings = M4OSA_NULL;
bool converted = true;
memset(&fieldIds, 0, sizeof(VideoEditJava_EditSettingsFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getEditSettings()");
// Retrieve the field ids.
videoEditJava_getEditSettingsFieldIds(pResult, pEnv, &fieldIds);
}
// Only retrieve the EditSettings if the previous action succeeded.
if (*pResult)
{
// Check if the object is valid.
if (NULL != object)
{
// Retrieve the clipSettingsArray.
videoEditJava_getArray(pResult, pEnv, object,
fieldIds.clipSettingsArray,
&clipSettingsArray,
&clipSettingsArraySize);
// Retrieve the transitionSettingsArray.
videoEditJava_getArray(pResult, pEnv, object,
fieldIds.transitionSettingsArray,
&transitionSettingsArray,
&transitionSettingsArraySize);
// Retrieve the effectSettingsArray.
videoEditJava_getArray(pResult, pEnv, object,
fieldIds.effectSettingsArray,
&effectSettingsArray,
&effectSettingsArraySize);
// Retrieve the backgroundMusicSettings.
videoEditJava_getObject(pResult, pEnv, object, fieldIds.backgroundMusicSettings,
&backgroundMusicSettings);
// Check if the arrays and background music settings object could be retrieved.
if (*pResult)
{
// Retrieve the number of channels.
audioChannels = pEnv->GetIntField(object, fieldIds.audioChannels);
}
}
}
// Only validate the EditSettings if the fields could be located.
if (*pResult)
{
// Check if there is at least one clip.
//videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
// (clipSettingsArraySize < 1),
// "there should be at least one clip");
if(clipSettingsArraySize < 1) {
return;
}
if(flag)
{
// Check if there are clips.
if ((clipSettingsArraySize != 0) || (transitionSettingsArraySize != 0))
{
// The number of transitions must be equal to the number of clips - 1.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(clipSettingsArraySize != (transitionSettingsArraySize + 1)),
"the number of transitions should be equal to the number of clips - 1");
}
}
}
// Only retrieve the EditSettings if the fields could be located.
if (*pResult)
{
// Check if the object is valid.
if (NULL != object)
{
// Allocate memory for the EditSettings.
pSettings = (M4VSS3GPP_EditSettings*)videoEditOsal_alloc(pResult, pEnv,
sizeof(M4VSS3GPP_EditSettings), "EditSettings");
// Check if memory could be allocated for the EditSettings.
if (*pResult)
{
// Set the number of clips that will be edited.
pSettings->uiClipNumber = clipSettingsArraySize;
// Check if the clip settings array contains items.
if (clipSettingsArraySize > 0)
{
// Allocate memory for the clip settings array.
pSettings->pClipList = (M4VSS3GPP_ClipSettings **)videoEditOsal_alloc(pResult,
pEnv,
clipSettingsArraySize * sizeof(M4VSS3GPP_ClipSettings *),
"ClipSettingsArray");
if (*pResult)
{
// Loop over all clip settings objects.
for (int i = 0; ((*pResult) && (i < clipSettingsArraySize)); i++)
{
// Get the clip settings object.
clipSettings = pEnv->GetObjectArrayElement(clipSettingsArray, i);
// Get the clip settings.
videoEditClasses_getClipSettings(pResult, pEnv, clipSettings,
&pSettings->pClipList[i]);
// Free the local references to avoid memory leaks
pEnv->DeleteLocalRef(clipSettings);
}
}
}
// Check if the transition settings array contains items.
if (transitionSettingsArraySize > 0)
{
// Allocate memory for the transition settings array.
pSettings->pTransitionList =
(M4VSS3GPP_TransitionSettings **)videoEditOsal_alloc(pResult,
pEnv, transitionSettingsArraySize * sizeof(M4VSS3GPP_TransitionSettings *),
"TransitionSettingsArray");
if (*pResult)
{
// Loop over all transition settings objects.
for (int i = 0; ((*pResult) && (i < transitionSettingsArraySize)); i++)
{
// Get the transition settings object.
transitionSettings =
pEnv->GetObjectArrayElement(transitionSettingsArray, i);
// Get the transition settings.
videoEditClasses_getTransitionSettings(pResult, pEnv,
transitionSettings, &pSettings->pTransitionList[i]);
// Free the local references to avoid memory leaks
pEnv->DeleteLocalRef(transitionSettings);
}
}
}
// Check if the effect settings array contains items.
if (effectSettingsArraySize > 0)
{
// Allocate memory for the effect settings array.
pSettings->Effects = (M4VSS3GPP_EffectSettings*)videoEditOsal_alloc(pResult,
pEnv,
effectSettingsArraySize * sizeof(M4VSS3GPP_EffectSettings),
"EffectSettingsArray");
if (*pResult)
{
// Loop over all effect settings objects.
for (int i = 0; ((*pResult) && (i < effectSettingsArraySize)); i++)
{
// Get the effect settings object.
effectSettings = pEnv->GetObjectArrayElement(effectSettingsArray, i);
// Get the effect settings.
videoEditClasses_getEffectSettings(pResult, pEnv, effectSettings,
&pSettings->Effects[i]);
// Free the local references to avoid memory leaks
pEnv->DeleteLocalRef(effectSettings);
}
}
}
// Check if the clips, transitions and effects could be set.
if (*pResult)
{
// Set the number of effects in the clip.
pSettings->nbEffects = (M4OSA_UInt8)effectSettingsArraySize;
// Set the frame rate of the output video.
pSettings->videoFrameRate =
(M4VIDEOEDITING_VideoFramerate)videoEditJava_getVideoFrameRateJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.videoFrameRate));
// Check if the frame rate is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "editSettings.videoFrameRate is invalid");
}
// Check if the frame rate could be set.
if (*pResult)
{
// Set the path of the output file.
pSettings->pOutputFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv,
object, fieldIds.outputFile, &pSettings->uiOutputPathSize);
}
// Check if path of the output file could be set.
if (*pResult)
{
// Set the path of the temporary file produced when using
// the constant memory 3gp writer.
pSettings->pTemporaryFile = M4OSA_NULL;
// Set the output video size.
pSettings->xVSS.outputVideoSize =
(M4VIDEOEDITING_VideoFrameSize)videoEditJava_getVideoFrameSizeJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.videoFrameSize));
// Check if the output video size is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "editSettings.videoFrameSize is invalid");
}
// Check if the output video size could be set.
if (*pResult)
{
// Set the output video format.
pSettings->xVSS.outputVideoFormat =
(M4VIDEOEDITING_VideoFormat)videoEditJava_getVideoFormatJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.videoFormat));
// Check if the output video format is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "editSettings.videoFormat is invalid");
}
// Check if the output video format could be set.
if (*pResult)
{
// Set the output audio format.
pSettings->xVSS.outputAudioFormat =
(M4VIDEOEDITING_AudioFormat)videoEditJava_getAudioFormatJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.audioFormat));
// Check if the output audio format is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "editSettings.audioFormat is invalid");
}
// Check if the output audio format could be set.
if (*pResult)
{
// Set the output audio sampling frequency when not replacing the audio,
// or replacing it with MP3 audio.
pSettings->xVSS.outputAudioSamplFreq =
(M4VIDEOEDITING_AudioSamplingFrequency)\
videoEditJava_getAudioSamplingFrequencyJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.audioSamplingFreq));
// Check if the output audio sampling frequency is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "editSettings.audioSamplingFreq is invalid");
}
// Check if the output audio sampling frequency could be set.
if (*pResult)
{
// Check if the number of audio channels is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
((0 != audioChannels ) ||
((M4VIDEOEDITING_kNoneAudio != pSettings->xVSS.outputAudioFormat) &&
(M4VIDEOEDITING_kNullAudio != pSettings->xVSS.outputAudioFormat) ) ) &&
(1 != audioChannels ) &&
(2 != audioChannels ),
"editSettings.audioChannels must be set to 0, 1 or 2");
}
// Check if the number of audio channels is valid.
if (*pResult)
{
// Set the maximum output file size (MMS usecase).
pSettings->xVSS.outputFileSize = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.maxFileSize);
// Whether or not the audio is mono, only valid for AAC.
pSettings->xVSS.bAudioMono = (M4OSA_Bool)(1 == audioChannels);
// Set the output video bitrate.
pSettings->xVSS.outputVideoBitrate = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.videoBitrate);
// Set the output video profile.
pSettings->xVSS.outputVideoProfile = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.videoProfile);
// Set the output video level.
pSettings->xVSS.outputVideoLevel = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.videoLevel);
// Set the output audio bitrate.
pSettings->xVSS.outputAudioBitrate = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.audioBitrate);
// Set the background music settings.
videoEditClasses_getBackgroundMusicSettings(pResult, pEnv,
backgroundMusicSettings, &pSettings->xVSS.pBGMtrack);
// Set the text rendering function (will be set elsewhere).
pSettings->xVSS.pTextRenderingFct = M4OSA_NULL;
pSettings->PTVolLevel =
(M4OSA_Float)pEnv->GetIntField(object, fieldIds.primaryTrackVolume);
}
}
// Check if settings could be set.
if (*pResult)
{
// Return the settings.
(*ppSettings) = pSettings;
}
else
{
// Free the settings.
videoEditClasses_freeEditSettings(&pSettings);
}
}
}
}
void
videoEditClasses_freeEditSettings(
M4VSS3GPP_EditSettings** ppSettings)
{
// Check if memory was allocated for the EditSettings.
if (M4OSA_NULL != (*ppSettings))
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeEditSettings()");
// Free the background music settings.
videoEditClasses_freeBackgroundMusicSettings(&(*ppSettings)->xVSS.pBGMtrack);
// Free the path of the output file.
videoEditOsal_free((*ppSettings)->pOutputFile);
(*ppSettings)->pOutputFile = M4OSA_NULL;
(*ppSettings)->uiOutputPathSize = 0;
// Check if the EffectSettings should be freed.
if (M4OSA_NULL != (*ppSettings)->Effects)
{
// Loop over all effect settings.
for (int i = 0; i < (*ppSettings)->nbEffects; i++)
{
// Free the effect settings.
videoEditClasses_freeEffectSettings(&(*ppSettings)->Effects[i]);
}
// Free the memory for the effect settings array.
videoEditOsal_free((*ppSettings)->Effects);
(*ppSettings)->Effects = M4OSA_NULL;
}
// Reset the number of effects in the clip.
(*ppSettings)->nbEffects = 0;
// Check if there are clips.
if (0 < (*ppSettings)->uiClipNumber)
{
// Check if the TransitionSettings should be freed.
if (M4OSA_NULL != (*ppSettings)->pTransitionList)
{
// Loop over all transition settings.
for (int i = 0; i < ((*ppSettings)->uiClipNumber - 1); i++)
{
// Free the transition settings.
videoEditClasses_freeTransitionSettings(&(*ppSettings)->pTransitionList[i]);
}
// Free the memory for the transition settings array.
videoEditOsal_free((*ppSettings)->pTransitionList);
(*ppSettings)->pTransitionList = M4OSA_NULL;
}
// Check if the ClipSettings should be freed.
if (M4OSA_NULL != (*ppSettings)->pClipList)
{
// Loop over all clip settings.
for (int i = 0; i < (*ppSettings)->uiClipNumber; i++)
{
// Free the clip settings.
videoEditClasses_freeClipSettings(&(*ppSettings)->pClipList[i]);
}
// Free the memory for the clip settings array.
videoEditOsal_free((*ppSettings)->pClipList);
(*ppSettings)->pClipList = M4OSA_NULL;
}
}
// Reset the number of clips.
(*ppSettings)->uiClipNumber = 0;
// Free the settings structure.
videoEditOsal_free((*ppSettings));
(*ppSettings) = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logEditSettings(
M4VSS3GPP_EditSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the EditSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiClipNumber: %d", indentation, ' ',
pSettings->uiClipNumber);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiMasterClip: %d", indentation, ' ',
pSettings->uiMasterClip);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pClipList: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pClipList) ? " " : "<null>");
if (M4OSA_NULL != pSettings->pClipList)
{
indentation += VIDEOEDIT_LOG_INDENTATION;
for (int i = 0; i < pSettings->uiClipNumber; i++)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pClipList[%d]:", indentation, ' ',
i);
videoEditClasses_logClipSettings(pSettings->pClipList[i],
indentation + VIDEOEDIT_LOG_INDENTATION);
}
indentation -= VIDEOEDIT_LOG_INDENTATION;
}
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pTransitionList: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pTransitionList) ? " " : "<null>");
if (M4OSA_NULL != pSettings->pTransitionList)
{
indentation += VIDEOEDIT_LOG_INDENTATION;
for (int i = 0; i < (pSettings->uiClipNumber - 1); i++)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pTransitionList[%d]:", indentation, ' ', i);
videoEditClasses_logTransitionSettings(pSettings->pTransitionList[i],
indentation + VIDEOEDIT_LOG_INDENTATION);
}
indentation -= VIDEOEDIT_LOG_INDENTATION;
}
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c Effects: %s", indentation, ' ',
(M4OSA_NULL != pSettings->Effects) ? " " : "<null>");
if (M4OSA_NULL != pSettings->Effects)
{
indentation += VIDEOEDIT_LOG_INDENTATION;
for (int i = 0; i < pSettings->nbEffects; i++)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c Effects[%d]:", indentation, ' ', i);
videoEditClasses_logEffectSettings(&pSettings->Effects[i],
indentation + VIDEOEDIT_LOG_INDENTATION);
}
indentation -= VIDEOEDIT_LOG_INDENTATION;
}
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c nbEffects: %d", indentation, ' ',
pSettings->nbEffects);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c videoFrameRate: %s", indentation, ' ',
videoEditJava_getVideoFrameRateString(pSettings->videoFrameRate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pOutputFile: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pOutputFile) ? (char*)pSettings->pOutputFile : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiOutputPathSize: %u", indentation, ' ',
(unsigned int)pSettings->uiOutputPathSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pTemporaryFile: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pTemporaryFile) ?\
(char*)pSettings->pTemporaryFile : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputVideoSize: %s", indentation, ' ',
videoEditJava_getVideoFrameSizeString(pSettings->xVSS.outputVideoSize));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputVideoFormat: %s", indentation, ' ',
videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoFormat));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputVideoProfile: %u", indentation, ' ',
videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoProfile));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputVideoLevel: %u", indentation, ' ',
videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoLevel));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputAudioFormat: %s", indentation, ' ',
videoEditJava_getAudioFormatString(pSettings->xVSS.outputAudioFormat));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputAudioSamplFreq: %s", indentation, ' ',
videoEditJava_getAudioSamplingFrequencyString(pSettings->xVSS.outputAudioSamplFreq));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputFileSize: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.outputFileSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bAudioMono: %s", indentation, ' ',
pSettings->xVSS.bAudioMono ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputVideoBitrate: %s", indentation, ' ',
videoEditJava_getBitrateString(pSettings->xVSS.outputVideoBitrate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c outputAudioBitrate: %s", indentation, ' ',
videoEditJava_getBitrateString(pSettings->xVSS.outputAudioBitrate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pBGMtrack:", indentation, ' ');
videoEditClasses_logBackgroundMusicSettings(pSettings->xVSS.pBGMtrack,
indentation + VIDEOEDIT_LOG_INDENTATION);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pTextRenderingFct: %s", indentation, ' ',
(M4OSA_NULL != pSettings->xVSS.pTextRenderingFct) ? "set" : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c PTVolLevel: %u", indentation, ' ',
(unsigned int)pSettings->PTVolLevel);
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void
videoEditClasses_getEffectSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4VSS3GPP_EffectSettings* pSettings)
{
VideoEditJava_EffectSettingsFieldIds fieldIds;
bool converted = true;
memset(&fieldIds, 0, sizeof(VideoEditJava_EffectSettingsFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getEffectSettings()");
// Retrieve the field ids.
videoEditJava_getEffectSettingsFieldIds(pResult, pEnv, &fieldIds);
}
// Only validate the EffectSettings if the fields could be located.
if (*pResult)
{
// Check if the effect is set.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(NULL == object),
"effect is null");
}
// Only retrieve the EffectSettings if the fields could be located and validated.
if (*pResult)
{
// Set the start time in milliseconds.
pSettings->uiStartTime = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.startTime);
// Set the duration in milliseconds.
pSettings->uiDuration = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.duration);
// Set the video effect type, None, FadeIn, FadeOut, etc.
pSettings->VideoEffectType =
(M4VSS3GPP_VideoEffectType)videoEditJava_getVideoEffectJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.videoEffectType));
// Check if the video effect type is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "effect.videoEffectType is invalid");
}
// Check if the video effect type could be set.
if (*pResult)
{
// Set the external effect function.
pSettings->ExtVideoEffectFct = M4OSA_NULL;
// Set the context given to the external effect function.
pSettings->pExtVideoEffectFctCtxt = M4OSA_NULL;
// Set the audio effect type, None, FadeIn, FadeOut.
pSettings->AudioEffectType =
(M4VSS3GPP_AudioEffectType)videoEditJava_getAudioEffectJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.audioEffectType));
// Check if the audio effect type is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "effect.audioEffectType is invalid");
}
// Check if the audio effect type could be set.
if (*pResult)
{
// Set the start in percentage of the cut clip duration.
pSettings->xVSS.uiStartPercent = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.startPercent);
// Set the duration in percentage of the ((clip duration) - (effect starttime)).
pSettings->xVSS.uiDurationPercent = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.durationPercent);
// Set the framing file path (GIF/PNG file).
pSettings->xVSS.pFramingFilePath = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv,
object, fieldIds.framingFile, M4OSA_NULL);
// Check if this is a framing effect.
if (M4xVSS_kVideoEffectType_Framing == (M4xVSS_VideoEffectType)pSettings->VideoEffectType)
{
// Check if the framing file path is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(M4OSA_NULL == pSettings->xVSS.pFramingFilePath), "effect.framingFile is null");
}
}
// Check if the framing file path could be retrieved.
if (*pResult)
{
// Set the Framing RGB565 buffer.
pSettings->xVSS.pFramingBuffer = M4OSA_NULL;
// Set the top-left X coordinate in the output picture
// where the added frame will be displayed.
pSettings->xVSS.topleft_x = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.topLeftX);
// Set the top-left Y coordinate in the output picture
// where the added frame will be displayed.
pSettings->xVSS.topleft_y = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.topLeftY);
// Set whether or not the framing image is resized to output video size.
pSettings->xVSS.bResize =
(M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.framingResize);
// Set the new size to which framing buffer needs to be resized to
pSettings->xVSS.framingScaledSize =
(M4VIDEOEDITING_VideoFrameSize)pEnv->GetIntField(object, fieldIds.framingScaledSize);
// Set the text buffer.
pSettings->xVSS.pTextBuffer = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
fieldIds.text, &pSettings->xVSS.textBufferSize);
}
// Check if the text buffer could be retrieved.
if (*pResult)
{
// Set the data used by the font engine (size, color...).
pSettings->xVSS.pRenderingData = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv,
object, fieldIds.textRenderingData, M4OSA_NULL);
}
// Check if the text rendering data could be retrieved.
if (*pResult)
{
// Set the text plane width.
pSettings->xVSS.uiTextBufferWidth = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.textBufferWidth);
// Set the text plane height.
pSettings->xVSS.uiTextBufferHeight = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.textBufferHeight);
// Set the processing rate of the effect added when using the Fifties effect.
pSettings->xVSS.uiFiftiesOutFrameRate = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.fiftiesFrameRate);
// Set the RGB16 input color of the effect added when using the rgb16 color effect.
pSettings->xVSS.uiRgb16InputColor = (M4OSA_UInt16)pEnv->GetIntField(object,
fieldIds.rgb16InputColor);
// Set the start percentage of Alpha blending.
pSettings->xVSS.uialphaBlendingStart = (M4OSA_UInt8)pEnv->GetIntField(object,
fieldIds.alphaBlendingStartPercent);
// Set the middle percentage of Alpha blending.
pSettings->xVSS.uialphaBlendingMiddle = (M4OSA_UInt8)pEnv->GetIntField(object,
fieldIds.alphaBlendingMiddlePercent);
// Set the end percentage of Alpha blending.
pSettings->xVSS.uialphaBlendingEnd = (M4OSA_UInt8)pEnv->GetIntField(object,
fieldIds.alphaBlendingEndPercent);
// Set the duration, in percentage of effect duration, of the FadeIn phase.
pSettings->xVSS.uialphaBlendingFadeInTime = (M4OSA_UInt8)pEnv->GetIntField(object,
fieldIds.alphaBlendingFadeInTimePercent);
// Set the duration, in percentage of effect duration, of the FadeOut phase.
pSettings->xVSS.uialphaBlendingFadeOutTime = (M4OSA_UInt8)pEnv->GetIntField(object,
fieldIds.alphaBlendingFadeOutTimePercent);
if (pSettings->xVSS.pFramingFilePath != M4OSA_NULL)
{
pSettings->xVSS.pFramingBuffer =
(M4VIFI_ImagePlane *)M4OSA_32bitAlignedMalloc(sizeof(M4VIFI_ImagePlane),
0x00,(M4OSA_Char *)"framing buffer");
}
if (pSettings->xVSS.pFramingBuffer != M4OSA_NULL)
{
// OverFrame height and width
pSettings->xVSS.pFramingBuffer->u_width = pEnv->GetIntField(object,
fieldIds.width);
pSettings->xVSS.pFramingBuffer->u_height = pEnv->GetIntField(object,
fieldIds.height);
pSettings->xVSS.width = pSettings->xVSS.pFramingBuffer->u_width;
pSettings->xVSS.height = pSettings->xVSS.pFramingBuffer->u_height;
pSettings->xVSS.rgbType = M4VSS3GPP_kRGB565;
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"pFramingBuffer u_width %d ", pSettings->xVSS.pFramingBuffer->u_width);
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"pFramingBuffer u_height %d", pSettings->xVSS.pFramingBuffer->u_height);
}
// Check if settings could be set.
if (!(*pResult))
{
// Free the settings.
videoEditClasses_freeEffectSettings(pSettings);
}
}
}
void
videoEditClasses_freeEffectSettings(
M4VSS3GPP_EffectSettings* pSettings)
{
// Check if memory was allocated for the EffectSettings.
if (M4OSA_NULL != pSettings)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeEffectSettings()");
// Free the data used by the font engine (size, color...).
videoEditOsal_free(pSettings->xVSS.pRenderingData);
pSettings->xVSS.pRenderingData = M4OSA_NULL;
// Free the text buffer.
videoEditOsal_free(pSettings->xVSS.pTextBuffer);
pSettings->xVSS.pTextBuffer = M4OSA_NULL;
pSettings->xVSS.textBufferSize = 0;
// Free the framing file path.
videoEditOsal_free(pSettings->xVSS.pFramingFilePath);
pSettings->xVSS.pFramingFilePath = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logEffectSettings(
M4VSS3GPP_EffectSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the EffectSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiStartTime: %u ms", indentation, ' ',
(unsigned int)pSettings->uiStartTime);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiDuration: %u ms", indentation, ' ',
(unsigned int)pSettings->uiDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c VideoEffectType: %s", indentation, ' ',
videoEditJava_getVideoEffectString(pSettings->VideoEffectType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c ExtVideoEffectFct: %s", indentation, ' ',
(M4OSA_NULL != pSettings->ExtVideoEffectFct) ? "set" : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pExtVideoEffectFctCtxt: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pExtVideoEffectFctCtxt) ? "set" : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c AudioEffectType: %s", indentation, ' ',
videoEditJava_getAudioEffectString(pSettings->AudioEffectType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiStartPercent: %u %%", indentation, ' ',
(unsigned int)pSettings->xVSS.uiStartPercent);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiDurationPercent: %u %%", indentation, ' ',
(unsigned int)pSettings->xVSS.uiDurationPercent);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pFramingFilePath: %s", indentation, ' ',
(M4OSA_NULL != pSettings->xVSS.pFramingFilePath) ?\
(char*)pSettings->xVSS.pFramingFilePath : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pFramingBuffer: %s", indentation, ' ',
(M4OSA_NULL != pSettings->xVSS.pFramingBuffer) ? "set" : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c topleft_x: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.topleft_x);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c topleft_y: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.topleft_y);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c bResize: %s", indentation, ' ',
pSettings->xVSS.bResize ? "true" : "false");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pTextBuffer: %s", indentation, ' ',
(M4OSA_NULL != pSettings->xVSS.pTextBuffer) ?\
(char*)pSettings->xVSS.pTextBuffer : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c textBufferSize: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.textBufferSize);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pRenderingData: %s", indentation, ' ',
(M4OSA_NULL != pSettings->xVSS.pRenderingData) ?\
(char*)pSettings->xVSS.pRenderingData : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiTextBufferWidth: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.uiTextBufferWidth);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiTextBufferHeight: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.uiTextBufferHeight);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiFiftiesOutFrameRate: %u", indentation, ' ',
(unsigned int)pSettings->xVSS.uiFiftiesOutFrameRate);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiRgb16InputColor: %d", indentation, ' ',
pSettings->xVSS.uiRgb16InputColor);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uialphaBlendingStart: %d %%", indentation, ' ',
pSettings->xVSS.uialphaBlendingStart);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uialphaBlendingMiddle: %d %%", indentation, ' ',
pSettings->xVSS.uialphaBlendingMiddle);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uialphaBlendingEnd: %d %%", indentation, ' ',
pSettings->xVSS.uialphaBlendingEnd);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uialphaBlendingFadeInTime: %d %%", indentation, ' ',
pSettings->xVSS.uialphaBlendingFadeInTime);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uialphaBlendingFadeOutTime: %d %%", indentation, ' ',
pSettings->xVSS.uialphaBlendingFadeOutTime);
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void
videoEditClasses_getSlideTransitionSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4xVSS_SlideTransitionSettings** ppSettings)
{
VideoEditJava_SlideTransitionSettingsFieldIds fieldIds = {NULL};
M4xVSS_SlideTransitionSettings* pSettings = M4OSA_NULL;
bool converted = true;
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getSlideTransitionSettings()");
// Retrieve the field ids.
videoEditJava_getSlideTransitionSettingsFieldIds(pResult, pEnv, &fieldIds);
}
// Only validate the SlideTransitionSettings if the fields could be located.
if (*pResult)
{
// Check if the clip is set.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(NULL == object),
"slideSettings is null");
}
// Only retrieve the SlideTransitionSettings if the fields could be located and validated.
if (*pResult)
{
// Allocate memory for the SlideTransitionSettings.
pSettings = (M4xVSS_SlideTransitionSettings*)videoEditOsal_alloc(pResult, pEnv,
sizeof(M4xVSS_SlideTransitionSettings), "SlideTransitionSettings");
// Check if memory could be allocated for the SlideTransitionSettings.
if (*pResult)
{
// Set the direction of the slide.
pSettings->direction =
(M4xVSS_SlideTransition_Direction)videoEditJava_getSlideDirectionJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.direction));
// Check if the direction is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
!converted, "slideSettings.direction is invalid");
}
// Check if settings could be set.
if (*pResult)
{
// Return the settings.
(*ppSettings) = pSettings;
}
else
{
// Free the settings.
videoEditClasses_freeSlideTransitionSettings(&pSettings);
}
}
}
void
videoEditClasses_freeSlideTransitionSettings(
M4xVSS_SlideTransitionSettings** ppSettings)
{
// Check if memory was allocated for the SlideTransitionSettings.
if (M4OSA_NULL != (*ppSettings))
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeSlideTransitionSettings()");
// Free the settings structure.
videoEditOsal_free((*ppSettings));
(*ppSettings) = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logSlideTransitionSettings(
M4xVSS_SlideTransitionSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the SlideTransitionSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c direction: %s", indentation, ' ',
videoEditJava_getSlideDirectionString(pSettings->direction));
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void
videoEditClasses_getTransitionSettings(
bool* pResult,
JNIEnv* pEnv,
jobject object,
M4VSS3GPP_TransitionSettings** ppSettings)
{
VideoEditJava_TransitionSettingsFieldIds fieldIds;
jobject alphaSettings = NULL;
jobject slideSettings = NULL;
M4VSS3GPP_TransitionSettings* pSettings = M4OSA_NULL;
bool converted = true;
memset(&fieldIds, 0, sizeof(VideoEditJava_TransitionSettingsFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getTransitionSettings()");
// Retrieve the field ids.
videoEditJava_getTransitionSettingsFieldIds(pResult, pEnv, &fieldIds);
}
// Only validate the TransitionSettings if the fields could be located.
if (*pResult)
{
// Check if the transition is set.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
(NULL == object),
"transition is null");
}
// Check if the field ids could be located and validated.
if (*pResult)
{
// Retrieve the alphaSettings.
videoEditJava_getObject(pResult, pEnv, object, fieldIds.alphaSettings, &alphaSettings);
// Retrieve the slideSettings.
videoEditJava_getObject(pResult, pEnv, object, fieldIds.slideSettings, &slideSettings);
}
// Only retrieve the TransitionSettings if the fields could be located.
if (*pResult)
{
// Allocate memory for the TransitionSettings.
pSettings = (M4VSS3GPP_TransitionSettings*)videoEditOsal_alloc(pResult,
pEnv, sizeof(M4VSS3GPP_TransitionSettings), "TransitionSettings");
// Check if memory could be allocated for the TransitionSettings.
if (*pResult)
{
// Set the duration of the transition, in milliseconds (set to 0 to get no transition).
pSettings->uiTransitionDuration = (M4OSA_UInt32)pEnv->GetIntField(object,
fieldIds.duration);
// Set the type of the video transition.
pSettings->VideoTransitionType =
(M4VSS3GPP_VideoTransitionType)videoEditJava_getVideoTransitionJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.videoTransitionType));
// Check if the video transition type is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
"transition.videoTransitionType is invalid");
}
// Check if the video transition type could be set.
if (*pResult)
{
// Set the external transition video effect function.
pSettings->ExtVideoTransitionFct = M4OSA_NULL;
// Set the context of the external transition video effect function.
pSettings->pExtVideoTransitionFctCtxt = M4OSA_NULL;
// Set the type of the audio transition.
pSettings->AudioTransitionType =
(M4VSS3GPP_AudioTransitionType)videoEditJava_getAudioTransitionJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.audioTransitionType));
// Check if the audio transition type is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
"transition.audioTransitionType is invalid");
}
// Check if the audio transition type could be set.
if (*pResult)
{
// Set the transition behaviour.
pSettings->TransitionBehaviour =
(M4VSS3GPP_TransitionBehaviour)videoEditJava_getTransitionBehaviourJavaToC(
&converted, pEnv->GetIntField(object, fieldIds.transitionBehaviour));
// Check if the transition behaviour is valid.
videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
"transition.transitionBehaviour is invalid");
}
// Check if the audio transition behaviour could be set.
if (*pResult)
{
// Check if a slide transition or alpha magic setting object is expected.
if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition)
{
// Set the slide transition settings.
videoEditClasses_getSlideTransitionSettings(pResult, pEnv, slideSettings,
&pSettings->xVSS.transitionSpecific.pSlideTransitionSettings);
}
else if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_AlphaMagic)
{
// Set the alpha magic settings.
videoEditClasses_getAlphaMagicSettings(pResult, pEnv, alphaSettings,
&pSettings->xVSS.transitionSpecific.pAlphaMagicSettings);
}
}
// Check if settings could be set.
if (*pResult)
{
// Return the settings.
(*ppSettings) = pSettings;
}
else
{
// Free the settings.
videoEditClasses_freeTransitionSettings(&pSettings);
}
}
}
void
videoEditClasses_freeTransitionSettings(
M4VSS3GPP_TransitionSettings** ppSettings)
{
// Check if memory was allocated for the TransitionSettings.
if (M4OSA_NULL != (*ppSettings))
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_freeTransitionSettings()");
// Check if a slide transition or alpha magic setting structure is expected.
if ((int)(*ppSettings)->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition)
{
// Free the slide transition settings.
videoEditClasses_freeSlideTransitionSettings(
&(*ppSettings)->xVSS.transitionSpecific.pSlideTransitionSettings);
}
else
{
// Free the alpha magic settings.
videoEditClasses_freeAlphaMagicSettings(
&(*ppSettings)->xVSS.transitionSpecific.pAlphaMagicSettings);
}
// Free the settings structure.
videoEditOsal_free((*ppSettings));
(*ppSettings) = M4OSA_NULL;
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logTransitionSettings(
M4VSS3GPP_TransitionSettings* pSettings,
int indentation)
{
// Check if memory was allocated for the TransitionSettings.
if (M4OSA_NULL != pSettings)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c uiTransitionDuration: %u ms", indentation, ' ',
(unsigned int)pSettings->uiTransitionDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c VideoTransitionType: %s", indentation, ' ',
videoEditJava_getVideoTransitionString(pSettings->VideoTransitionType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c ExtVideoTransitionFct: %s", indentation, ' ',
(M4OSA_NULL != pSettings->ExtVideoTransitionFct) ? "set" : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pExtVideoTransitionFctCtxt: %s", indentation, ' ',
(M4OSA_NULL != pSettings->pExtVideoTransitionFctCtxt) ? "set" : "<null>");
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c AudioTransitionType: %s", indentation, ' ',
videoEditJava_getAudioTransitionString(pSettings->AudioTransitionType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c TransitionBehaviour: %s", indentation, ' ',
videoEditJava_getTransitionBehaviourString(pSettings->TransitionBehaviour));
// Check if a slide transition or alpha magic setting structure is expected.
if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition)
{
// Log the slide transition settings.
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pSlideTransitionSettings:", indentation, ' ');
videoEditClasses_logSlideTransitionSettings\
(pSettings->xVSS.transitionSpecific.pSlideTransitionSettings,
indentation + VIDEOEDIT_LOG_INDENTATION);
}
else
{
// Log the alpha magic settings.
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c pAlphaMagicSettings:", indentation, ' ');
videoEditClasses_logAlphaMagicSettings\
(pSettings->xVSS.transitionSpecific.pAlphaMagicSettings,
indentation + VIDEOEDIT_LOG_INDENTATION);
}
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditPropClass_logProperties(
VideoEditPropClass_Properties* pProperties,
int indentation)
{
// Check if memory was allocated for the Properties.
if (M4OSA_NULL != pProperties)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiClipDuration: %u", indentation, ' ',
(unsigned int)pProperties->uiClipDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c FileType: %s", indentation, ' ',
videoEditJava_getFileTypeString(pProperties->FileType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c VideoStreamType: %s", indentation, ' ',
videoEditJava_getVideoFormatString(pProperties->VideoStreamType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiClipVideoDuration: %u", indentation, ' ',
(unsigned int)pProperties->uiClipVideoDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiVideoBitrate: %s", indentation, ' ',
videoEditJava_getBitrateString(pProperties->uiVideoBitrate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiVideoWidth: %u", indentation, ' ',
(unsigned int)pProperties->uiVideoWidth);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiVideoHeight: %u", indentation, ' ',
(unsigned int)(unsigned int)pProperties->uiVideoHeight);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c fAverageFrameRate: %.3f", indentation, ' ',
pProperties->fAverageFrameRate);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c AudioStreamType: %s", indentation, ' ',
videoEditJava_getAudioFormatString(pProperties->AudioStreamType));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiClipAudioDuration: %u", indentation, ' ',
(unsigned int)pProperties->uiClipAudioDuration);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiAudioBitrate: %s", indentation, ' ',
videoEditJava_getBitrateString(pProperties->uiAudioBitrate));
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiNbChannels: %u", indentation, ' ',
(unsigned int)pProperties->uiNbChannels);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c uiSamplingFrequency: %u", indentation, ' ',
(unsigned int)pProperties->uiSamplingFrequency);
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void
videoEditClasses_createVersion(
bool* pResult,
JNIEnv* pEnv,
M4_VersionInfo* pVersionInfo,
jobject* pObject)
{
VideoEditJava_VersionFieldIds fieldIds;
jclass clazz = NULL;
jobject object = NULL;
memset(&fieldIds, 0, sizeof(VideoEditJava_VersionFieldIds));
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_createVersion()");
// Retrieve the class.
videoEditJava_getVersionClass(pResult, pEnv, &clazz);
// Retrieve the field ids.
videoEditJava_getVersionFieldIds(pResult, pEnv, &fieldIds);
}
// Only create an object if the class and fields could be located.
if (*pResult)
{
// Allocate a new object.
object = pEnv->AllocObject(clazz);
// check if alloc is done
videoEditJava_checkAndThrowRuntimeException(pResult, pEnv,
(NULL == object),
M4ERR_ALLOC);
if (NULL != object)
{
// Set the major field.
pEnv->SetIntField(object, fieldIds.major, pVersionInfo->m_major);
// Set the minor field.
pEnv->SetIntField(object, fieldIds.minor, pVersionInfo->m_minor);
// Set the revision field.
pEnv->SetIntField(object, fieldIds.revision, pVersionInfo->m_revision);
// Return the object.
(*pObject) = object;
}
}
}
#ifdef VIDEOEDIT_LOGGING_ENABLED
void
videoEditClasses_logVersion(
M4_VersionInfo* pVersionInfo,
int indentation)
{
// Check if memory was allocated for the Version.
if (M4OSA_NULL != pVersionInfo)
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c major: %u ms", indentation, ' ',
(unsigned int)pVersionInfo->m_major);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c minor: %u", indentation, ' ',
(unsigned int)pVersionInfo->m_minor);
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c revision: %u", indentation, ' ',
(unsigned int)pVersionInfo->m_revision);
}
else
{
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"%*c <null>", indentation, ' ');
}
}
#endif
void*
videoEditClasses_getContext(
bool* pResult,
JNIEnv* pEnv,
jobject object)
{
void* pContext = M4OSA_NULL;
jclass clazz = NULL;
VideoEditJava_EngineFieldIds fieldIds = {NULL};
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_getContext()");
// Retrieve the class.
videoEditJava_getEngineClass(pResult, pEnv, &clazz);
// Retrieve the field ids.
videoEditJava_getEngineFieldIds(pResult, pEnv, &fieldIds);
}
// Check if the class and field ids could be located.
if (*pResult)
{
// Retrieve the context pointer.
pContext = (void *)pEnv->GetIntField(object, fieldIds.context);
}
// Return the context pointer.
return(pContext);
}
void
videoEditClasses_setContext(
bool* pResult,
JNIEnv* pEnv,
jobject object,
void* pContext)
{
jclass clazz = NULL;
VideoEditJava_EngineFieldIds fieldIds = {NULL};
// Check if the previous action succeeded.
if (*pResult)
{
// Log the function call.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"videoEditClasses_setContext()");
// Retrieve the class.
videoEditJava_getEngineClass(pResult, pEnv, &clazz);
// Retrieve the field ids.
videoEditJava_getEngineFieldIds(pResult, pEnv, &fieldIds);
}
// Check if the class and field ids could be located.
if (*pResult)
{
// Set the context field.
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"The context value from JAVA before setting is = 0x%x",
pEnv->GetIntField(object, fieldIds.context));
pEnv->SetIntField(object, fieldIds.context, (int)pContext);
M4OSA_TRACE1_1("The context value in JNI is = 0x%x",pContext);
VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
"The context value from JAVA after setting is = 0x%x",
pEnv->GetIntField(object, fieldIds.context));
}
}