C++程序  |  604行  |  20.04 KB

/*
 * 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.
 */

#ifndef VIDEO_EDITOR_CLASSES_H
#define VIDEO_EDITOR_CLASSES_H

#include <VideoEditorJava.h>
#include <VideoEditorClasses.h>
/**
 ************************************************************************
 * @file        VideoEditorClasses.h
 * @brief       Interface for JNI methods/defines that have specific
 *              access to class, objects and method Ids defined in Java layer
 ************************************************************************
*/


extern "C" {
#include <M4xVSS_API.h>
#include <M4VSS3GPP_API.h>
#include <M4VSS3GPP_ErrorCodes.h>
#include <M4MCS_ErrorCodes.h>
#include <M4READER_Common.h>
#include <M4WRITER_common.h>
};

/*
 * Java layer class/object name strings
 */
#define PACKAGE_NAME                           "android/media/videoeditor"

#define MANUAL_EDIT_ENGINE_CLASS_NAME          PACKAGE_NAME"/MediaArtistNativeHelper"
#define MEDIA_PROPERTIES_ENGINE_CLASS_NAME     PACKAGE_NAME"/MediaArtistNativeHelper"

#define AUDIO_FORMAT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioFormat"
#define RESULTS_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Results"
#define VERSION_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Version"
#define AUDIO_SAMPLING_FREQUENCY_CLASS_NAME    MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSamplingFrequency"
#define BITRATE_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Bitrate"
#define ERROR_CLASS_NAME                       MANUAL_EDIT_ENGINE_CLASS_NAME"$Result"
#define FILE_TYPE_CLASS_NAME                   MANUAL_EDIT_ENGINE_CLASS_NAME"$FileType"
#define MEDIA_RENDERING_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$MediaRendering"
#define VIDEO_FORMAT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFormat"
#define VIDEO_FRAME_RATE_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameRate"
#define VIDEO_FRAME_SIZE_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameSize"
#define VIDEO_PROFILE_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoProfile"
#define ALPHA_MAGIC_SETTINGS_CLASS_NAME        MANUAL_EDIT_ENGINE_CLASS_NAME"$AlphaMagicSettings"
#define AUDIO_EFFECT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioEffect"
#define AUDIO_TRANSITION_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioTransition"
#define BACKGROUND_MUSIC_SETTINGS_CLASS_NAME   MANUAL_EDIT_ENGINE_CLASS_NAME"$BackgroundMusicSettings"
#define CLIP_SETTINGS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$ClipSettings"
#define EDIT_SETTINGS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$EditSettings"
#define EFFECT_SETTINGS_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$EffectSettings"
#define SLIDE_DIRECTION_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideDirection"
#define SLIDE_TRANSITION_SETTINGS_CLASS_NAME   MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideTransitionSettings"
#define TRANSITION_BEHAVIOUR_CLASS_NAME        MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionBehaviour"
#define TRANSITION_SETTINGS_CLASS_NAME         MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionSettings"
#define VIDEO_EFFECT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoEffect"
#define VIDEO_TRANSITION_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoTransition"
#define PREVIEW_CLIPS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClips"
#define PREVIEW_SETTING_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewSettings"
#define PREVIEW_PROPERTIES_CLASS_NAME          MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClipProperties"
#define AUDIO_SETTINGS_CLASS_NAME              MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSettings"
#define PROPERTIES_CLASS_NAME                  MANUAL_EDIT_ENGINE_CLASS_NAME"$Properties"

#define TASK_IDLE                                   0
#define TASK_LOADING_SETTINGS                       1
#define TASK_ENCODING                               2

/*
 * File type enum
 */
typedef enum
{
    VideoEditClasses_kFileType_3GPP,
    VideoEditClasses_kFileType_MP4,
    VideoEditClasses_kFileType_AMR,
    VideoEditClasses_kFileType_MP3,
    VideoEditClasses_kFileType_PCM,
    VideoEditClasses_kFileType_JPG,
    VideoEditClasses_kFileType_BMP,
    VideoEditClasses_kFileType_GIF,
    VideoEditClasses_kFileType_PNG,
    VideoEditClasses_kFileType_ARGB8888,
    VideoEditClasses_kFileType_M4V,
    VideoEditClasses_kFileType_Unsupported
} VideoEditClasses_FileType;

/*
 * Alpha magic transition structure
 */
typedef struct
{
    jfieldID file;
    jfieldID blendingPercent;
    jfieldID invertRotation;
    jfieldID rgbWidth;
    jfieldID rgbHeight;
} VideoEditJava_AlphaMagicFieldIds;

typedef struct
{
    jfieldID file;
    jfieldID fileType;
    jfieldID insertionTime;
    jfieldID volumePercent;
    jfieldID beginLoop;
    jfieldID endLoop;
    jfieldID enableDucking;
    jfieldID duckingThreshold;
    jfieldID lowVolume;
    jfieldID isLooping;
} VideoEditJava_BackgroundMusicFieldIds;
/*
 * Structure to hold media properties from native layer
 */
typedef struct {
    M4OSA_UInt32 uiClipDuration;
    VideoEditClasses_FileType  FileType;
    M4VIDEOEDITING_VideoFormat VideoStreamType;
    M4OSA_UInt32 uiClipVideoDuration;
    M4OSA_UInt32 uiVideoBitrate;
    M4OSA_UInt32 uiVideoWidth;
    M4OSA_UInt32 uiVideoHeight;
    M4OSA_Float  fAverageFrameRate;
    M4OSA_UInt32 uiVideoProfile; /**< H263 or MPEG-4 or H264 profile(from core decoder) */
    M4OSA_UInt32 uiVideoLevel;   /**< H263 or MPEG-4 or H264 level*/
    M4OSA_Bool bProfileSupported;
    M4OSA_Bool bLevelSupported;
    M4VIDEOEDITING_AudioFormat AudioStreamType;
    M4OSA_UInt32 uiClipAudioDuration;
    M4OSA_UInt32 uiAudioBitrate;
    M4OSA_UInt32 uiNbChannels;
    M4OSA_UInt32 uiSamplingFrequency;
    M4OSA_UInt32 uiRotation;
} VideoEditPropClass_Properties;

typedef struct
{
    jfieldID duration;
    jfieldID fileType;
    jfieldID videoFormat;
    jfieldID videoDuration;
    jfieldID videoBitrate;
    jfieldID width;
    jfieldID height;
    jfieldID averageFrameRate;
    jfieldID profile;
    jfieldID level;
    jfieldID profileSupported;
    jfieldID levelSupported;
    jfieldID audioFormat;
    jfieldID audioDuration;
    jfieldID audioBitrate;
    jfieldID audioChannels;
    jfieldID audioSamplingFrequency;
    jfieldID videoRotation;
} VideoEditJava_PropertiesFieldIds;


typedef struct
{
    jfieldID clipPath;
    jfieldID fileType;
    jfieldID beginCutTime;
    jfieldID endCutTime;
    jfieldID beginCutPercent;
    jfieldID endCutPercent;
    jfieldID panZoomEnabled;
    jfieldID panZoomPercentStart;
    jfieldID panZoomTopLeftXStart;
    jfieldID panZoomTopLeftYStart;
    jfieldID panZoomPercentEnd;
    jfieldID panZoomTopLeftXEnd;
    jfieldID panZoomTopLeftYEnd;
    jfieldID mediaRendering;
    jfieldID rgbFileWidth;
    jfieldID rgbFileHeight;
    jfieldID rotationDegree;
} VideoEditJava_ClipSettingsFieldIds;

typedef struct
{
    jfieldID clipSettingsArray;
    jfieldID transitionSettingsArray;
    jfieldID effectSettingsArray;
    jfieldID videoFrameRate;
    jfieldID outputFile;
    jfieldID videoFrameSize;
    jfieldID videoFormat;
    jfieldID videoProfile;
    jfieldID videoLevel;
    jfieldID audioFormat;
    jfieldID audioSamplingFreq;
    jfieldID maxFileSize;
    jfieldID audioChannels;
    jfieldID videoBitrate;
    jfieldID audioBitrate;
    jfieldID backgroundMusicSettings;
    jfieldID primaryTrackVolume;
} VideoEditJava_EditSettingsFieldIds;


typedef struct
{
    jfieldID startTime;
    jfieldID duration;
    jfieldID videoEffectType;
    jfieldID audioEffectType;
    jfieldID startPercent;
    jfieldID durationPercent;
    jfieldID framingFile;
    jfieldID framingBuffer;
    jfieldID bitmapType;
    jfieldID width;
    jfieldID height;
    jfieldID topLeftX;
    jfieldID topLeftY;
    jfieldID framingResize;
    jfieldID framingScaledSize;
    jfieldID text;
    jfieldID textRenderingData;
    jfieldID textBufferWidth;
    jfieldID textBufferHeight;
    jfieldID fiftiesFrameRate;
    jfieldID rgb16InputColor;
    jfieldID alphaBlendingStartPercent;
    jfieldID alphaBlendingMiddlePercent;
    jfieldID alphaBlendingEndPercent;
    jfieldID alphaBlendingFadeInTimePercent;
    jfieldID alphaBlendingFadeOutTimePercent;
} VideoEditJava_EffectSettingsFieldIds;

typedef struct
{
    jfieldID context;
} VideoEditJava_EngineFieldIds;

typedef struct
{
    jfieldID direction;
} VideoEditJava_SlideTransitionSettingsFieldIds;

typedef struct
{
    jfieldID duration;
    jfieldID videoTransitionType;
    jfieldID audioTransitionType;
    jfieldID transitionBehaviour;
    jfieldID alphaSettings;
    jfieldID slideSettings;
} VideoEditJava_TransitionSettingsFieldIds;

typedef struct
{
    jfieldID major;
    jfieldID minor;
    jfieldID revision;
} VideoEditJava_VersionFieldIds;


typedef struct
{
    jmethodID onProgressUpdate;
} VideoEditJava_EngineMethodIds;


VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect           )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat           )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency)
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition       )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate               )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine                )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error                 )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType              )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering        )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection        )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour   )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect           )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat           )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate        )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize        )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile          )
VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition       )


VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic               )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic          )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings             )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings           )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine                   )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings  )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings       )
VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version                  )

VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine                  )

/*
 * Init all Edit settings related structures
 */
void
videoEditClasses_init(
                bool*                               pResult,
                JNIEnv*                             pEnv);
/**
 ************************************************************************
 * @brief    Media Properties init function.
 * @param    pResult    (OUT) Pointer to hold result
 * @param    pEnv       (IN)  JVM Interface pointer
 ************************************************************************
*/
void
videoEditPropClass_init(
                bool*                               pResult,
                JNIEnv*                             pEnv);
/**
 ************************************************************************
 * @brief    Interface to populate Media Properties.
 * @param    pResult        (IN/OUT)    Pointer to hold result
 * @param    pEnv           (IN)        JVM Interface pointer
 * @param    pProperties    (IN)        Media propeties structure pointer
 * @param    pObject        (OUT)       Java object to hold media
 *                                      properties for java layer.
 ************************************************************************
*/
void
videoEditPropClass_createProperties(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                VideoEditPropClass_Properties*      pProperties,
                jobject*                            pObject);

/**
 ************************************************************************
 * @brief    Interface to log/display media properties.
 * @param    pProperties    (IN) Pointer holding media properties
 * @param    indentation    (IN) Indentation to follow in display
 ************************************************************************
*/
void
videoEditPropClass_logProperties(
                VideoEditPropClass_Properties*      pProperties,
                int                                 indentation);

/*
 * Get alpha magic transition settings
 */
void
videoEditClasses_getAlphaMagicSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4xVSS_AlphaMagicSettings**         ppSettings);

/*
 * Free alpha magic transition settings structure
 */
void
videoEditClasses_freeAlphaMagicSettings(
                M4xVSS_AlphaMagicSettings**         ppSettings);

/*
 * Log alpha magic transition settings
 */
void
videoEditClasses_logAlphaMagicSettings(
                M4xVSS_AlphaMagicSettings*          pSettings,
                int                                 indentation);

/*
 * Get Background Track settings
 */
void
videoEditClasses_getBackgroundMusicSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4xVSS_BGMSettings**                ppSettings);

/*
 * Free Background Track settings structure
 */
void
videoEditClasses_freeBackgroundMusicSettings(
                M4xVSS_BGMSettings**                ppSettings);

/*
 * Log Background Track settings
 */
void
videoEditClasses_logBackgroundMusicSettings(
                M4xVSS_BGMSettings*                 pSettings,
                int                                 indentation);

/*
 * Log clip properties
 */
void
videoEditClasses_logClipProperties(
                M4VIDEOEDITING_ClipProperties*      pProperties,
                int                                 indentation);

/*
 * Get clip settings from Java
 */
void
videoEditClasses_getClipSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4VSS3GPP_ClipSettings**            ppSettings);
/**
 ************************************************************************
 * @brief   Interface function to retrieve media properties for a given
 *          file.
 * @param   pEnv    (IN)    Pointer holding media properties
 * @param   thiz    (IN)    Indentation to follow in display
 * @param   file    (IN)    File path for which media properties has
 *                          to be retrieved.
 ************************************************************************
*/
jobject
videoEditProp_getProperties(
                JNIEnv*                             pEnv,
                jobject                             thiz,
                jstring                             file);

/*
 * Create/Set the clip settings to java Object
 */
void
videoEditClasses_createClipSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                M4VSS3GPP_ClipSettings*             pSettings,
                jobject*                            pObject);

/*
 * Free clip settings structure
 */
void
videoEditClasses_freeClipSettings(
                M4VSS3GPP_ClipSettings**            ppSettings);

/*
 * Log clip settings structure
 */
void
videoEditClasses_logClipSettings(
                M4VSS3GPP_ClipSettings*             pSettings,
                int                                 indentation);

/*
 * Get Edit settings from Java
 */
void
videoEditClasses_getEditSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4VSS3GPP_EditSettings**            ppSettings,
                bool                                flag);

/*
 * Free Edit Settings structure
 */
void
videoEditClasses_freeEditSettings(
                M4VSS3GPP_EditSettings**            ppSettings);

/*
 * Log Edit settings structure
 */
void
videoEditClasses_logEditSettings(
                M4VSS3GPP_EditSettings*             pSettings,
                int                                 indentation);

/*
 * Get Effect settings from Java
 */
void
videoEditClasses_getEffectSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4VSS3GPP_EffectSettings*           pSettings);

/*
 * Free Effect settings structure
 */
void
videoEditClasses_freeEffectSettings(
                M4VSS3GPP_EffectSettings*           pSettings);

/*
 * Log Effect settings
 */
void
videoEditClasses_logEffectSettings(
                M4VSS3GPP_EffectSettings*           pSettings,
                int                                 indentation);

/*
 * Get Transition-Sliding settings from Java
 */
void
videoEditClasses_getSlideTransitionSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4xVSS_SlideTransitionSettings**    ppSettings);

/*
 * Free Transition-Sliding structure
 */
void
videoEditClasses_freeSlideTransitionSettings(
                M4xVSS_SlideTransitionSettings**    ppSettings);

/*
 * Free Transition-Sliding structure
 */
void
videoEditClasses_logSlideTransitionSettings(
                M4xVSS_SlideTransitionSettings*     pSettings,
                int                                 indentation);

/*
 * Get Transition settings from Java
 */
void
videoEditClasses_getTransitionSettings(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                M4VSS3GPP_TransitionSettings**      ppSettings);

/*
 * Free Transition settings structure
 */
void
videoEditClasses_freeTransitionSettings(
                M4VSS3GPP_TransitionSettings**      ppSettings);

/*
 * Log Transition settings
 */
void
videoEditClasses_logTransitionSettings(
                M4VSS3GPP_TransitionSettings*       pSettings,
                int                                 indentation);

/*
 * Set version information to Java object
 */
void
videoEditClasses_createVersion(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                M4_VersionInfo*                     pVersionInfo,
                jobject*                            pObject);

/*
 * Log Version information
 */
void
videoEditClasses_logVersion(
                M4_VersionInfo*                     pVersionInfo,
                int                                 indentation);


void*
videoEditClasses_getContext(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object);

void
videoEditClasses_setContext(
                bool*                               pResult,
                JNIEnv*                             pEnv,
                jobject                             object,
                void*                               pContext);


#endif // VIDEO_EDITOR_CLASSES_H