Merge "Fix for 4142219 Don't hard code platform-specific limitations (Jni/ Java)"
This commit is contained in:
committed by
Android (Google) Code Review
commit
c0a2222552
@@ -139,6 +139,19 @@ public:
|
||||
*/
|
||||
int getVideoEditorCapParamByName(const char *name) const;
|
||||
|
||||
/**
|
||||
* Returns the value for the given param name for the video editor export codec format
|
||||
* param or -1 if error.
|
||||
* Supported param name are:
|
||||
* videoeditor.export.profile - export video profile
|
||||
* videoeditor.export.level - export video level
|
||||
* Supported param codec are:
|
||||
* 1 for h263
|
||||
* 2 for h264
|
||||
* 3 for mpeg4
|
||||
*/
|
||||
int getVideoEditorExportParamByName(const char *name, int codec) const;
|
||||
|
||||
/**
|
||||
* Returns the audio encoders supported.
|
||||
*/
|
||||
@@ -332,7 +345,14 @@ private:
|
||||
int mCameraId;
|
||||
Vector<int> mLevels;
|
||||
};
|
||||
|
||||
struct ExportVideoProfile {
|
||||
ExportVideoProfile(int codec, int profile, int level)
|
||||
:mCodec(codec),mProfile(profile),mLevel(level) {}
|
||||
~ExportVideoProfile() {}
|
||||
int mCodec;
|
||||
int mProfile;
|
||||
int mLevel;
|
||||
};
|
||||
struct VideoEditorCap {
|
||||
VideoEditorCap(int inFrameWidth, int inFrameHeight,
|
||||
int outFrameWidth, int outFrameHeight)
|
||||
@@ -374,6 +394,7 @@ private:
|
||||
static AudioEncoderCap* createAudioEncoderCap(const char **atts);
|
||||
static VideoEditorCap* createVideoEditorCap(
|
||||
const char **atts, MediaProfiles *profiles);
|
||||
static ExportVideoProfile* createExportVideoProfile(const char **atts);
|
||||
|
||||
static CamcorderProfile* createCamcorderProfile(
|
||||
int cameraId, const char **atts, Vector<int>& cameraIds);
|
||||
@@ -418,6 +439,8 @@ private:
|
||||
static void createDefaultImageEncodingQualityLevels(MediaProfiles *profiles);
|
||||
static void createDefaultImageDecodingMaxMemory(MediaProfiles *profiles);
|
||||
static void createDefaultVideoEditorCap(MediaProfiles *profiles);
|
||||
static void createDefaultExportVideoProfiles(MediaProfiles *profiles);
|
||||
|
||||
static VideoEncoderCap* createDefaultH263VideoEncoderCap();
|
||||
static VideoEncoderCap* createDefaultM4vVideoEncoderCap();
|
||||
static AudioEncoderCap* createDefaultAmrNBEncoderCap();
|
||||
@@ -475,6 +498,7 @@ private:
|
||||
RequiredProfiles *mRequiredProfileRefs;
|
||||
Vector<int> mCameraIds;
|
||||
VideoEditorCap* mVideoEditorCap;
|
||||
Vector<ExportVideoProfile*> mVideoEditorExportProfiles;
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
||||
@@ -79,7 +79,8 @@ class MediaArtistNativeHelper {
|
||||
private boolean mRegenerateAudio = true;
|
||||
|
||||
private String mExportFilename = null;
|
||||
|
||||
private int mExportVideoCodec = 0;
|
||||
private int mExportAudioCodec = 0;
|
||||
private int mProgressToApp;
|
||||
|
||||
private String mRenderPreviewOverlayFile;
|
||||
@@ -765,17 +766,14 @@ class MediaArtistNativeHelper {
|
||||
/** No video present in output clip. Used to generate audio only clip */
|
||||
public static final int NO_VIDEO = 0;
|
||||
|
||||
/** H263 baseline format. */
|
||||
/** H263 video format. */
|
||||
public static final int H263 = 1;
|
||||
|
||||
/** MPEG4 video Simple Profile format. */
|
||||
public static final int MPEG4 = 2;
|
||||
|
||||
/** MPEG4 video Simple Profile format with support for EMP. */
|
||||
public static final int MPEG4_EMP = 3;
|
||||
|
||||
/** H264 video */
|
||||
public static final int H264 = 4;
|
||||
public static final int H264 = 2;
|
||||
|
||||
/** MPEG4 video format. */
|
||||
public static final int MPEG4 = 3;
|
||||
|
||||
/** No transcoding. Output video format is same as input video format */
|
||||
public static final int NULL_VIDEO = 254;
|
||||
@@ -784,96 +782,6 @@ class MediaArtistNativeHelper {
|
||||
public static final int UNSUPPORTED = 255;
|
||||
}
|
||||
|
||||
/** Defines video profiles and levels. */
|
||||
public final class VideoProfile {
|
||||
/** H263, Profile 0, Level 10. */
|
||||
public static final int H263_PROFILE_0_LEVEL_10 = MediaProperties.H263_PROFILE_0_LEVEL_10;
|
||||
|
||||
/** H263, Profile 0, Level 20. */
|
||||
public static final int H263_PROFILE_0_LEVEL_20 = MediaProperties.H263_PROFILE_0_LEVEL_20;
|
||||
|
||||
/** H263, Profile 0, Level 30. */
|
||||
public static final int H263_PROFILE_0_LEVEL_30 = MediaProperties.H263_PROFILE_0_LEVEL_30;
|
||||
|
||||
/** H263, Profile 0, Level 40. */
|
||||
public static final int H263_PROFILE_0_LEVEL_40 = MediaProperties.H263_PROFILE_0_LEVEL_40;
|
||||
|
||||
/** H263, Profile 0, Level 45. */
|
||||
public static final int H263_PROFILE_0_LEVEL_45 = MediaProperties.H263_PROFILE_0_LEVEL_45;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 0. */
|
||||
public static final int MPEG4_SP_LEVEL_0 = MediaProperties.MPEG4_SP_LEVEL_0;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 0B. */
|
||||
public static final int MPEG4_SP_LEVEL_0B = MediaProperties.MPEG4_SP_LEVEL_0B;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 1. */
|
||||
public static final int MPEG4_SP_LEVEL_1 = MediaProperties.MPEG4_SP_LEVEL_1;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 2. */
|
||||
public static final int MPEG4_SP_LEVEL_2 = MediaProperties.MPEG4_SP_LEVEL_2;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 3. */
|
||||
public static final int MPEG4_SP_LEVEL_3 = MediaProperties.MPEG4_SP_LEVEL_3;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 4A. */
|
||||
public static final int MPEG4_SP_LEVEL_4A = MediaProperties.MPEG4_SP_LEVEL_4A;
|
||||
|
||||
/** MPEG4, Simple Profile, Level 0. */
|
||||
public static final int MPEG4_SP_LEVEL_5 = MediaProperties.MPEG4_SP_LEVEL_5;
|
||||
|
||||
/** H264, Profile 0, Level 1. */
|
||||
public static final int H264_PROFILE_0_LEVEL_1 = MediaProperties.H264_PROFILE_0_LEVEL_1;
|
||||
|
||||
/** H264, Profile 0, Level 1b. */
|
||||
public static final int H264_PROFILE_0_LEVEL_1b = MediaProperties.H264_PROFILE_0_LEVEL_1B;
|
||||
|
||||
/** H264, Profile 0, Level 1.1 */
|
||||
public static final int H264_PROFILE_0_LEVEL_1_1 = MediaProperties.H264_PROFILE_0_LEVEL_1_1;
|
||||
|
||||
/** H264, Profile 0, Level 1.2 */
|
||||
public static final int H264_PROFILE_0_LEVEL_1_2 = MediaProperties.H264_PROFILE_0_LEVEL_1_2;
|
||||
|
||||
/** H264, Profile 0, Level 1.3 */
|
||||
public static final int H264_PROFILE_0_LEVEL_1_3 = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
|
||||
/** H264, Profile 0, Level 2. */
|
||||
public static final int H264_PROFILE_0_LEVEL_2 = MediaProperties.H264_PROFILE_0_LEVEL_2;
|
||||
|
||||
/** H264, Profile 0, Level 2.1 */
|
||||
public static final int H264_PROFILE_0_LEVEL_2_1 = MediaProperties.H264_PROFILE_0_LEVEL_2_1;
|
||||
|
||||
/** H264, Profile 0, Level 2.2 */
|
||||
public static final int H264_PROFILE_0_LEVEL_2_2 = MediaProperties.H264_PROFILE_0_LEVEL_2_2;
|
||||
|
||||
/** H264, Profile 0, Level 3. */
|
||||
public static final int H264_PROFILE_0_LEVEL_3 = MediaProperties.H264_PROFILE_0_LEVEL_3;
|
||||
|
||||
/** H264, Profile 0, Level 3.1 */
|
||||
public static final int H264_PROFILE_0_LEVEL_3_1 = MediaProperties.H264_PROFILE_0_LEVEL_3_1;
|
||||
|
||||
/** H264, Profile 0, Level 3.2 */
|
||||
public static final int H264_PROFILE_0_LEVEL_3_2 = MediaProperties.H264_PROFILE_0_LEVEL_3_2;
|
||||
|
||||
/** H264, Profile 0, Level 4. */
|
||||
public static final int H264_PROFILE_0_LEVEL_4 = MediaProperties.H264_PROFILE_0_LEVEL_4;
|
||||
|
||||
/** H264, Profile 0, Level 4.1 */
|
||||
public static final int H264_PROFILE_0_LEVEL_4_1 = MediaProperties.H264_PROFILE_0_LEVEL_4_1;
|
||||
|
||||
/** H264, Profile 0, Level 4.2 */
|
||||
public static final int H264_PROFILE_0_LEVEL_4_2 = MediaProperties.H264_PROFILE_0_LEVEL_4_2;
|
||||
|
||||
/** H264, Profile 0, Level 5. */
|
||||
public static final int H264_PROFILE_0_LEVEL_5 = MediaProperties.H264_PROFILE_0_LEVEL_5;
|
||||
|
||||
/** H264, Profile 0, Level 5.1 */
|
||||
public static final int H264_PROFILE_0_LEVEL_5_1 = MediaProperties.H264_PROFILE_0_LEVEL_5_1;
|
||||
|
||||
/** Profile out of range. */
|
||||
public static final int OUT_OF_RANGE = MediaProperties.UNSUPPORTED_PROFILE_LEVEL;
|
||||
}
|
||||
|
||||
/** Defines video frame sizes. */
|
||||
public final class VideoFrameSize {
|
||||
|
||||
@@ -1619,6 +1527,16 @@ class MediaArtistNativeHelper {
|
||||
*/
|
||||
public int videoFormat;
|
||||
|
||||
/**
|
||||
* Profile of the video stream in the output clip.
|
||||
*/
|
||||
public int videoProfile;
|
||||
|
||||
/**
|
||||
* Level of the video stream in the output clip.
|
||||
*/
|
||||
public int videoLevel;
|
||||
|
||||
/**
|
||||
* Format of the audio stream in the output clip. See
|
||||
* {@link AudioFormat AudioFormat} for valid values.
|
||||
@@ -1723,10 +1641,28 @@ class MediaArtistNativeHelper {
|
||||
public float averageFrameRate;
|
||||
|
||||
/**
|
||||
* Profile and level of the video in the media.
|
||||
* Profile of the video in the media.
|
||||
*/
|
||||
|
||||
public int profileAndLevel;
|
||||
public int profile;
|
||||
|
||||
/**
|
||||
* Level of the video in the media.
|
||||
*/
|
||||
|
||||
public int level;
|
||||
|
||||
/**
|
||||
* Is Video Profile supported.
|
||||
*/
|
||||
|
||||
public boolean profileSupported;
|
||||
|
||||
/**
|
||||
* Is Video Level supported.
|
||||
*/
|
||||
|
||||
public boolean levelSupported;
|
||||
|
||||
/**
|
||||
* Audio format.
|
||||
@@ -2111,6 +2047,25 @@ class MediaArtistNativeHelper {
|
||||
return mVideoEditor.getAspectRatio();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the export audio codec
|
||||
*
|
||||
* @param export audio codec
|
||||
*
|
||||
*/
|
||||
void setAudioCodec(int codec) {
|
||||
mExportAudioCodec = codec;
|
||||
}
|
||||
/**
|
||||
* Sets the export video codec
|
||||
*
|
||||
* @param export video codec
|
||||
*
|
||||
*/
|
||||
void setVideoCodec(int codec) {
|
||||
mExportVideoCodec = codec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the audio regenerate flag
|
||||
*
|
||||
@@ -2320,7 +2275,8 @@ class MediaArtistNativeHelper {
|
||||
int err = 0;
|
||||
EditSettings editSettings = null;
|
||||
String EffectClipPath = null;
|
||||
|
||||
int outVideoProfile = 0;
|
||||
int outVideoLevel = 0;
|
||||
editSettings = new EditSettings();
|
||||
|
||||
editSettings.clipSettingsArray = new ClipSettings[1];
|
||||
@@ -2338,6 +2294,11 @@ class MediaArtistNativeHelper {
|
||||
tmpFile.delete();
|
||||
}
|
||||
|
||||
outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
|
||||
outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
|
||||
editSettings.videoProfile = outVideoProfile;
|
||||
editSettings.videoLevel= outVideoLevel;
|
||||
|
||||
if (lMediaItem instanceof MediaVideoItem) {
|
||||
MediaVideoItem m = (MediaVideoItem)lMediaItem;
|
||||
|
||||
@@ -2399,6 +2360,8 @@ class MediaArtistNativeHelper {
|
||||
String generateKenBurnsClip(EditSettings e, MediaImageItem m) {
|
||||
String output = null;
|
||||
int err = 0;
|
||||
int outVideoProfile = 0;
|
||||
int outVideoLevel = 0;
|
||||
|
||||
e.backgroundMusicSettings = null;
|
||||
e.transitionSettingsArray = null;
|
||||
@@ -2410,6 +2373,11 @@ class MediaArtistNativeHelper {
|
||||
tmpFile.delete();
|
||||
}
|
||||
|
||||
outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
|
||||
outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
|
||||
e.videoProfile = outVideoProfile;
|
||||
e.videoLevel = outVideoLevel;
|
||||
|
||||
e.outputFile = output;
|
||||
e.audioBitrate = Bitrate.BR_64_KBPS;
|
||||
e.audioChannels = 2;
|
||||
@@ -2496,8 +2464,15 @@ class MediaArtistNativeHelper {
|
||||
MediaItem m1, MediaItem m2,Transition t) {
|
||||
String outputFilename = null;
|
||||
int err = 0;
|
||||
|
||||
int outVideoProfile = 0;
|
||||
int outVideoLevel = 0;
|
||||
outputFilename = String.format(mProjectPath + "/" + uniqueId + ".3gp");
|
||||
|
||||
outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
|
||||
outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
|
||||
e.videoProfile = outVideoProfile;
|
||||
e.videoLevel = outVideoLevel;
|
||||
|
||||
e.outputFile = outputFilename;
|
||||
e.audioBitrate = Bitrate.BR_64_KBPS;
|
||||
e.audioChannels = 2;
|
||||
@@ -3275,7 +3250,7 @@ class MediaArtistNativeHelper {
|
||||
retValue = MediaProperties.VCODEC_H263;
|
||||
break;
|
||||
case VideoFormat.H264:
|
||||
retValue = MediaProperties.VCODEC_H264BP;
|
||||
retValue = MediaProperties.VCODEC_H264;
|
||||
break;
|
||||
case VideoFormat.MPEG4:
|
||||
retValue = MediaProperties.VCODEC_MPEG4;
|
||||
@@ -3602,6 +3577,24 @@ class MediaArtistNativeHelper {
|
||||
mExportFilename = filePath;
|
||||
previewStoryBoard(mediaItemsList, mediaTransitionList, mediaBGMList,null);
|
||||
mExportProgressListener = listener;
|
||||
int outVideoProfile = 0;
|
||||
int outVideoLevel = 0;
|
||||
|
||||
/** Check the platform specific maximum export resolution */
|
||||
VideoEditorProfile veProfile = VideoEditorProfile.get();
|
||||
if (veProfile == null) {
|
||||
throw new RuntimeException("Can't get the video editor profile");
|
||||
}
|
||||
final int maxOutputHeight = veProfile.maxOutputVideoFrameHeight;
|
||||
final int maxOutputWidth = veProfile.maxOutputVideoFrameWidth;
|
||||
if (height > maxOutputHeight) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unsupported export resolution. Supported maximum width:" +
|
||||
maxOutputWidth + " height:" + maxOutputHeight +
|
||||
" current height:" + height);
|
||||
}
|
||||
outVideoProfile = VideoEditorProfile.getExportProfile(mExportVideoCodec);
|
||||
outVideoLevel = VideoEditorProfile.getExportLevel(mExportVideoCodec);
|
||||
|
||||
mProgressToApp = 0;
|
||||
|
||||
@@ -3655,8 +3648,10 @@ class MediaArtistNativeHelper {
|
||||
|
||||
int aspectRatio = mVideoEditor.getAspectRatio();
|
||||
mPreviewEditSettings.videoFrameSize = findVideoResolution(aspectRatio, height);
|
||||
mPreviewEditSettings.videoFormat = VideoFormat.H264;
|
||||
mPreviewEditSettings.audioFormat = AudioFormat.AAC;
|
||||
mPreviewEditSettings.videoFormat = mExportVideoCodec;
|
||||
mPreviewEditSettings.audioFormat = mExportAudioCodec;
|
||||
mPreviewEditSettings.videoProfile = outVideoProfile;
|
||||
mPreviewEditSettings.videoLevel = outVideoLevel;
|
||||
mPreviewEditSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
|
||||
mPreviewEditSettings.maxFileSize = 0;
|
||||
mPreviewEditSettings.audioChannels = 2;
|
||||
|
||||
@@ -135,89 +135,118 @@ public class MediaProperties {
|
||||
* Video codec types
|
||||
*/
|
||||
public static final int VCODEC_H263 = 1;
|
||||
public static final int VCODEC_MPEG4 = 2;
|
||||
// 3 Value is used for MPEG4_EMP
|
||||
public static final int VCODEC_H264BP = 4;
|
||||
public static final int VCODEC_H264MP = 5; // Unsupported
|
||||
public static final int VCODEC_H264 = 2;
|
||||
public static final int VCODEC_MPEG4 = 3;
|
||||
|
||||
/**
|
||||
* The array of supported video codecs
|
||||
*/
|
||||
private static final int[] SUPPORTED_VCODECS = new int[] {
|
||||
VCODEC_H264BP,
|
||||
VCODEC_H264,
|
||||
VCODEC_H263,
|
||||
VCODEC_MPEG4,
|
||||
};
|
||||
|
||||
/* H.263 Profiles and levels */
|
||||
public static final int H263_PROFILE_0_LEVEL_10 = 0;
|
||||
public static final int H263_PROFILE_0_LEVEL_20 = 1;
|
||||
public static final int H263_PROFILE_0_LEVEL_30 = 2;
|
||||
public static final int H263_PROFILE_0_LEVEL_40 = 3;
|
||||
public static final int H263_PROFILE_0_LEVEL_45 = 4;
|
||||
/* MPEG-4 Profiles and levels */
|
||||
public static final int MPEG4_SP_LEVEL_0 = 50;
|
||||
public static final int MPEG4_SP_LEVEL_0B = 51;
|
||||
public static final int MPEG4_SP_LEVEL_1 = 52;
|
||||
public static final int MPEG4_SP_LEVEL_2 = 53;
|
||||
public static final int MPEG4_SP_LEVEL_3 = 54;
|
||||
public static final int MPEG4_SP_LEVEL_4A = 55;
|
||||
public static final int MPEG4_SP_LEVEL_5 = 56;
|
||||
/* AVC Profiles and levels */
|
||||
public static final int H264_PROFILE_0_LEVEL_1 = 150;
|
||||
public static final int H264_PROFILE_0_LEVEL_1B = 151;
|
||||
public static final int H264_PROFILE_0_LEVEL_1_1 = 152;
|
||||
public static final int H264_PROFILE_0_LEVEL_1_2 = 153;
|
||||
public static final int H264_PROFILE_0_LEVEL_1_3 = 154;
|
||||
public static final int H264_PROFILE_0_LEVEL_2 = 155;
|
||||
public static final int H264_PROFILE_0_LEVEL_2_1 = 156;
|
||||
public static final int H264_PROFILE_0_LEVEL_2_2 = 157;
|
||||
public static final int H264_PROFILE_0_LEVEL_3 = 158;
|
||||
public static final int H264_PROFILE_0_LEVEL_3_1 = 159;
|
||||
public static final int H264_PROFILE_0_LEVEL_3_2 = 160;
|
||||
public static final int H264_PROFILE_0_LEVEL_4 = 161;
|
||||
public static final int H264_PROFILE_0_LEVEL_4_1 = 162;
|
||||
public static final int H264_PROFILE_0_LEVEL_4_2 = 163;
|
||||
public static final int H264_PROFILE_0_LEVEL_5 = 164;
|
||||
public static final int H264_PROFILE_0_LEVEL_5_1 = 165;
|
||||
/* Unsupported profile and level */
|
||||
public static final int UNSUPPORTED_PROFILE_LEVEL = 255;
|
||||
|
||||
/**
|
||||
* The array of supported video codec Profile and Levels
|
||||
* The H264 profile, the values are same as the one in OMX_Video.h
|
||||
*/
|
||||
private static final int[] SUPPORTED_VCODEC_PROFILE_LEVELS = new int[] {
|
||||
H263_PROFILE_0_LEVEL_10,
|
||||
H263_PROFILE_0_LEVEL_20,
|
||||
H263_PROFILE_0_LEVEL_30,
|
||||
H263_PROFILE_0_LEVEL_40,
|
||||
H263_PROFILE_0_LEVEL_45,
|
||||
MPEG4_SP_LEVEL_0,
|
||||
MPEG4_SP_LEVEL_0B,
|
||||
MPEG4_SP_LEVEL_1,
|
||||
MPEG4_SP_LEVEL_2,
|
||||
MPEG4_SP_LEVEL_3,
|
||||
MPEG4_SP_LEVEL_4A,
|
||||
MPEG4_SP_LEVEL_5,
|
||||
H264_PROFILE_0_LEVEL_1,
|
||||
H264_PROFILE_0_LEVEL_1B,
|
||||
H264_PROFILE_0_LEVEL_1_1,
|
||||
H264_PROFILE_0_LEVEL_1_2,
|
||||
H264_PROFILE_0_LEVEL_1_3,
|
||||
H264_PROFILE_0_LEVEL_2,
|
||||
H264_PROFILE_0_LEVEL_2_1,
|
||||
H264_PROFILE_0_LEVEL_2_2,
|
||||
H264_PROFILE_0_LEVEL_3,
|
||||
H264_PROFILE_0_LEVEL_3_1,
|
||||
H264_PROFILE_0_LEVEL_3_2,
|
||||
H264_PROFILE_0_LEVEL_4,
|
||||
H264_PROFILE_0_LEVEL_4_1,
|
||||
H264_PROFILE_0_LEVEL_4_2,
|
||||
H264_PROFILE_0_LEVEL_5,
|
||||
H264_PROFILE_0_LEVEL_5_1,
|
||||
UNSUPPORTED_PROFILE_LEVEL
|
||||
};
|
||||
|
||||
public final class H264Profile {
|
||||
public static final int H264ProfileBaseline = 0x01; /**< Baseline profile */
|
||||
public static final int H264ProfileMain = 0x02; /**< Main profile */
|
||||
public static final int H264ProfileExtended = 0x04; /**< Extended profile */
|
||||
public static final int H264ProfileHigh = 0x08; /**< High profile */
|
||||
public static final int H264ProfileHigh10 = 0x10; /**< High 10 profile */
|
||||
public static final int H264ProfileHigh422 = 0x20; /**< High 4:2:2 profile */
|
||||
public static final int H264ProfileHigh444 = 0x40; /**< High 4:4:4 profile */
|
||||
public static final int H264ProfileUnknown = 0x7FFFFFFF;
|
||||
}
|
||||
/**
|
||||
* The H264 level, the values are same as the one in OMX_Video.h
|
||||
*/
|
||||
public final class H264Level {
|
||||
public static final int H264Level1 = 0x01; /**< Level 1 */
|
||||
public static final int H264Level1b = 0x02; /**< Level 1b */
|
||||
public static final int H264Level11 = 0x04; /**< Level 1.1 */
|
||||
public static final int H264Level12 = 0x08; /**< Level 1.2 */
|
||||
public static final int H264Level13 = 0x10; /**< Level 1.3 */
|
||||
public static final int H264Level2 = 0x20; /**< Level 2 */
|
||||
public static final int H264Level21 = 0x40; /**< Level 2.1 */
|
||||
public static final int H264Level22 = 0x80; /**< Level 2.2 */
|
||||
public static final int H264Level3 = 0x100; /**< Level 3 */
|
||||
public static final int H264Level31 = 0x200; /**< Level 3.1 */
|
||||
public static final int H264Level32 = 0x400; /**< Level 3.2 */
|
||||
public static final int H264Level4 = 0x800; /**< Level 4 */
|
||||
public static final int H264Level41 = 0x1000; /**< Level 4.1 */
|
||||
public static final int H264Level42 = 0x2000; /**< Level 4.2 */
|
||||
public static final int H264Level5 = 0x4000; /**< Level 5 */
|
||||
public static final int H264Level51 = 0x8000; /**< Level 5.1 */
|
||||
public static final int H264LevelUnknown = 0x7FFFFFFF;
|
||||
}
|
||||
/**
|
||||
* The H263 profile, the values are same as the one in OMX_Video.h
|
||||
*/
|
||||
public final class H263Profile {
|
||||
public static final int H263ProfileBaseline = 0x01;
|
||||
public static final int H263ProfileH320Coding = 0x02;
|
||||
public static final int H263ProfileBackwardCompatible = 0x04;
|
||||
public static final int H263ProfileISWV2 = 0x08;
|
||||
public static final int H263ProfileISWV3 = 0x10;
|
||||
public static final int H263ProfileHighCompression = 0x20;
|
||||
public static final int H263ProfileInternet = 0x40;
|
||||
public static final int H263ProfileInterlace = 0x80;
|
||||
public static final int H263ProfileHighLatency = 0x100;
|
||||
public static final int H263ProfileUnknown = 0x7FFFFFFF;
|
||||
}
|
||||
/**
|
||||
* The H263 level, the values are same as the one in OMX_Video.h
|
||||
*/
|
||||
public final class H263Level {
|
||||
public static final int H263Level10 = 0x01;
|
||||
public static final int H263Level20 = 0x02;
|
||||
public static final int H263Level30 = 0x04;
|
||||
public static final int H263Level40 = 0x08;
|
||||
public static final int H263Level45 = 0x10;
|
||||
public static final int H263Level50 = 0x20;
|
||||
public static final int H263Level60 = 0x40;
|
||||
public static final int H263Level70 = 0x80;
|
||||
public static final int H263LevelUnknown = 0x7FFFFFFF;
|
||||
}
|
||||
/**
|
||||
* The mpeg4 profile, the values are same as the one in OMX_Video.h
|
||||
*/
|
||||
public final class MPEG4Profile {
|
||||
public static final int MPEG4ProfileSimple = 0x01;
|
||||
public static final int MPEG4ProfileSimpleScalable = 0x02;
|
||||
public static final int MPEG4ProfileCore = 0x04;
|
||||
public static final int MPEG4ProfileMain = 0x08;
|
||||
public static final int MPEG4ProfileNbit = 0x10;
|
||||
public static final int MPEG4ProfileScalableTexture = 0x20;
|
||||
public static final int MPEG4ProfileSimpleFace = 0x40;
|
||||
public static final int MPEG4ProfileSimpleFBA = 0x80;
|
||||
public static final int MPEG4ProfileBasicAnimated = 0x100;
|
||||
public static final int MPEG4ProfileHybrid = 0x200;
|
||||
public static final int MPEG4ProfileAdvancedRealTime = 0x400;
|
||||
public static final int MPEG4ProfileCoreScalable = 0x800;
|
||||
public static final int MPEG4ProfileAdvancedCoding = 0x1000;
|
||||
public static final int MPEG4ProfileAdvancedCore = 0x2000;
|
||||
public static final int MPEG4ProfileAdvancedScalable = 0x4000;
|
||||
public static final int MPEG4ProfileAdvancedSimple = 0x8000;
|
||||
public static final int MPEG4ProfileUnknown = 0x7FFFFFFF;
|
||||
}
|
||||
/**
|
||||
* The mpeg4 level, the values are same as the one in OMX_Video.h
|
||||
*/
|
||||
public final class MPEG4Level {
|
||||
public static final int MPEG4Level0 = 0x01; /**< Level 0 */
|
||||
public static final int MPEG4Level0b = 0x02; /**< Level 0b */
|
||||
public static final int MPEG4Level1 = 0x04; /**< Level 1 */
|
||||
public static final int MPEG4Level2 = 0x08; /**< Level 2 */
|
||||
public static final int MPEG4Level3 = 0x10; /**< Level 3 */
|
||||
public static final int MPEG4Level4 = 0x20; /**< Level 4 */
|
||||
public static final int MPEG4Level4a = 0x40; /**< Level 4a */
|
||||
public static final int MPEG4Level5 = 0x80; /**< Level 5 */
|
||||
public static final int MPEG4LevelUnknown = 0x7FFFFFFF;
|
||||
}
|
||||
/**
|
||||
* Audio codec types
|
||||
*/
|
||||
@@ -241,7 +270,6 @@ public class MediaProperties {
|
||||
ACODEC_AMRWB
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Samples per frame for each audio codec
|
||||
*/
|
||||
|
||||
@@ -42,6 +42,7 @@ public class MediaVideoItem extends MediaItem {
|
||||
private final int mFileType;
|
||||
private final int mVideoType;
|
||||
private final int mVideoProfile;
|
||||
private final int mVideoLevel;
|
||||
private final int mVideoBitrate;
|
||||
private final long mDurationMs;
|
||||
private final int mAudioBitrate;
|
||||
@@ -134,6 +135,15 @@ public class MediaVideoItem extends MediaItem {
|
||||
", current width:" + properties.width +
|
||||
" height:" + properties.height);
|
||||
}
|
||||
/** Check the platform specific maximum video profile and level */
|
||||
if (!properties.profileSupported) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unsupported video profile " + properties.profile);
|
||||
}
|
||||
if (!properties.levelSupported) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unsupported video level " + properties.level);
|
||||
}
|
||||
switch (mMANativeHelper.getFileType(properties.fileType)) {
|
||||
case MediaProperties.FILE_3GP:
|
||||
case MediaProperties.FILE_MP4:
|
||||
@@ -146,8 +156,7 @@ public class MediaVideoItem extends MediaItem {
|
||||
|
||||
switch (mMANativeHelper.getVideoCodecType(properties.videoFormat)) {
|
||||
case MediaProperties.VCODEC_H263:
|
||||
case MediaProperties.VCODEC_H264BP:
|
||||
case MediaProperties.VCODEC_H264MP:
|
||||
case MediaProperties.VCODEC_H264:
|
||||
case MediaProperties.VCODEC_MPEG4:
|
||||
break;
|
||||
|
||||
@@ -155,18 +164,14 @@ public class MediaVideoItem extends MediaItem {
|
||||
throw new IllegalArgumentException("Unsupported Video Codec Format in Input File");
|
||||
}
|
||||
|
||||
/* Check if the profile is unsupported. */
|
||||
if (properties.profileAndLevel == MediaProperties.UNDEFINED_VIDEO_PROFILE) {
|
||||
throw new IllegalArgumentException("Unsupported Video Codec Profile in Input File");
|
||||
}
|
||||
|
||||
mWidth = properties.width;
|
||||
mHeight = properties.height;
|
||||
mAspectRatio = mMANativeHelper.getAspectRatio(properties.width,
|
||||
properties.height);
|
||||
mFileType = mMANativeHelper.getFileType(properties.fileType);
|
||||
mVideoType = mMANativeHelper.getVideoCodecType(properties.videoFormat);
|
||||
mVideoProfile = properties.profileAndLevel;
|
||||
mVideoProfile = properties.profile;
|
||||
mVideoLevel = properties.level;
|
||||
mDurationMs = properties.videoDuration;
|
||||
mVideoBitrate = properties.videoBitrate;
|
||||
mAudioBitrate = properties.audioBitrate;
|
||||
@@ -660,6 +665,13 @@ public class MediaVideoItem extends MediaItem {
|
||||
return mVideoProfile;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The video profile
|
||||
*/
|
||||
public int getVideoLevel() {
|
||||
return mVideoLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The video bitrate
|
||||
*/
|
||||
|
||||
@@ -396,7 +396,7 @@ public interface VideoEditor {
|
||||
* supported for export purposes.
|
||||
* @param videoCodec The video codec to be used for the export. The video
|
||||
* codec values are defined in the MediaProperties class (e.g.
|
||||
* VCODEC_H264BP). Note that not all video codec types are
|
||||
* VCODEC_H264). Note that not all video codec types are
|
||||
* supported for export purposes.
|
||||
* @param listener The listener for progress notifications. Use null if
|
||||
* export progress notifications are not needed.
|
||||
|
||||
@@ -339,42 +339,8 @@ public class VideoEditorImpl implements VideoEditor {
|
||||
int audioCodec, int videoCodec,
|
||||
ExportProgressListener listener)
|
||||
throws IOException {
|
||||
|
||||
switch (audioCodec) {
|
||||
case MediaProperties.ACODEC_AAC_LC:
|
||||
break;
|
||||
case MediaProperties.ACODEC_AMRNB:
|
||||
break;
|
||||
|
||||
default: {
|
||||
String message = "Unsupported audio codec type " + audioCodec;
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
switch (videoCodec) {
|
||||
case MediaProperties.VCODEC_H263:
|
||||
break;
|
||||
case MediaProperties.VCODEC_H264BP:
|
||||
break;
|
||||
case MediaProperties.VCODEC_MPEG4:
|
||||
break;
|
||||
|
||||
default: {
|
||||
String message = "Unsupported video codec type " + videoCodec;
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
export(filename, height, bitrate, listener);
|
||||
}
|
||||
|
||||
/*
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public void export(String filename, int height, int bitrate,
|
||||
ExportProgressListener listener)
|
||||
throws IOException {
|
||||
int audcodec = 0;
|
||||
int vidcodec = 0;
|
||||
if (filename == null) {
|
||||
throw new IllegalArgumentException("export: filename is null");
|
||||
}
|
||||
@@ -388,20 +354,6 @@ public class VideoEditorImpl implements VideoEditor {
|
||||
throw new IllegalStateException("No MediaItems added");
|
||||
}
|
||||
|
||||
/** Check the platform specific maximum export resolution */
|
||||
VideoEditorProfile veProfile = VideoEditorProfile.get();
|
||||
if (veProfile == null) {
|
||||
throw new RuntimeException("Can't get the video editor profile");
|
||||
}
|
||||
final int maxOutputHeight = veProfile.maxOutputVideoFrameHeight;
|
||||
final int maxOutputWidth = veProfile.maxOutputVideoFrameWidth;
|
||||
if (height > maxOutputHeight) {
|
||||
throw new IllegalArgumentException(
|
||||
"Unsupported export resolution. Supported maximum width:" +
|
||||
maxOutputWidth + " height:" + maxOutputHeight +
|
||||
" current height:" + height);
|
||||
}
|
||||
|
||||
switch (height) {
|
||||
case MediaProperties.HEIGHT_144:
|
||||
break;
|
||||
@@ -461,6 +413,36 @@ public class VideoEditorImpl implements VideoEditor {
|
||||
if (MAX_SUPPORTED_FILE_SIZE <= fileSize) {
|
||||
throw new IllegalStateException("Export Size is more than 2GB");
|
||||
}
|
||||
switch (audioCodec) {
|
||||
case MediaProperties.ACODEC_AAC_LC:
|
||||
audcodec = MediaArtistNativeHelper.AudioFormat.AAC;
|
||||
break;
|
||||
case MediaProperties.ACODEC_AMRNB:
|
||||
audcodec = MediaArtistNativeHelper.AudioFormat.AMR_NB;
|
||||
break;
|
||||
|
||||
default: {
|
||||
String message = "Unsupported audio codec type " + audioCodec;
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
switch (videoCodec) {
|
||||
case MediaProperties.VCODEC_H263:
|
||||
vidcodec = MediaArtistNativeHelper.VideoFormat.H263;
|
||||
break;
|
||||
case MediaProperties.VCODEC_H264:
|
||||
vidcodec = MediaArtistNativeHelper.VideoFormat.H264;
|
||||
break;
|
||||
case MediaProperties.VCODEC_MPEG4:
|
||||
vidcodec = MediaArtistNativeHelper.VideoFormat.MPEG4;
|
||||
break;
|
||||
|
||||
default: {
|
||||
String message = "Unsupported video codec type " + videoCodec;
|
||||
throw new IllegalArgumentException(message);
|
||||
}
|
||||
}
|
||||
|
||||
boolean semAcquireDone = false;
|
||||
try {
|
||||
@@ -470,7 +452,8 @@ public class VideoEditorImpl implements VideoEditor {
|
||||
if (mMANativeHelper == null) {
|
||||
throw new IllegalStateException("The video editor is not initialized");
|
||||
}
|
||||
|
||||
mMANativeHelper.setAudioCodec(audcodec);
|
||||
mMANativeHelper.setVideoCodec(vidcodec);
|
||||
mMANativeHelper.export(filename, mProjectPath, height,bitrate,
|
||||
mMediaItems, mTransitions, mAudioTracks, listener);
|
||||
} catch (InterruptedException ex) {
|
||||
@@ -482,6 +465,19 @@ public class VideoEditorImpl implements VideoEditor {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public void export(String filename, int height, int bitrate,
|
||||
ExportProgressListener listener)
|
||||
throws IOException {
|
||||
int defaultAudiocodec = MediaArtistNativeHelper.AudioFormat.AAC;
|
||||
int defaultVideocodec = MediaArtistNativeHelper.VideoFormat.H264;
|
||||
|
||||
export(filename, height, bitrate, defaultAudiocodec,
|
||||
defaultVideocodec, listener);
|
||||
}
|
||||
|
||||
/*
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
||||
@@ -31,6 +31,10 @@ package android.media.videoeditor;
|
||||
*/
|
||||
public class VideoEditorProfile
|
||||
{
|
||||
static {
|
||||
System.loadLibrary("media_jni");
|
||||
native_init();
|
||||
}
|
||||
/**
|
||||
* The max input video frame width
|
||||
*/
|
||||
@@ -58,9 +62,42 @@ public class VideoEditorProfile
|
||||
return native_get_videoeditor_profile();
|
||||
}
|
||||
|
||||
static {
|
||||
System.loadLibrary("media_jni");
|
||||
native_init();
|
||||
/**
|
||||
* Returns the supported profile by given video codec
|
||||
*/
|
||||
public static int getExportProfile(int vidCodec) {
|
||||
int profile = -1;
|
||||
|
||||
switch (vidCodec) {
|
||||
case MediaProperties.VCODEC_H263:
|
||||
case MediaProperties.VCODEC_H264:
|
||||
case MediaProperties.VCODEC_MPEG4:
|
||||
profile = native_get_videoeditor_export_profile(vidCodec);
|
||||
break;
|
||||
default :
|
||||
throw new IllegalArgumentException("Unsupported video codec" + vidCodec);
|
||||
}
|
||||
|
||||
return profile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the supported level by given video codec
|
||||
*/
|
||||
public static int getExportLevel(int vidCodec) {
|
||||
int level = -1;
|
||||
|
||||
switch (vidCodec) {
|
||||
case MediaProperties.VCODEC_H263:
|
||||
case MediaProperties.VCODEC_H264:
|
||||
case MediaProperties.VCODEC_MPEG4:
|
||||
level = native_get_videoeditor_export_profile(vidCodec);
|
||||
break;
|
||||
default :
|
||||
throw new IllegalArgumentException("Unsupported video codec" + vidCodec);
|
||||
}
|
||||
|
||||
return level;
|
||||
}
|
||||
|
||||
// Private constructor called by JNI
|
||||
@@ -78,5 +115,8 @@ public class VideoEditorProfile
|
||||
// Methods implemented by JNI
|
||||
private static native final void native_init();
|
||||
private static native final VideoEditorProfile
|
||||
native_get_videoeditor_profile();
|
||||
native_get_videoeditor_profile();
|
||||
private static native final int native_get_videoeditor_export_profile(int codec);
|
||||
private static native final int native_get_videoeditor_export_level(int level);
|
||||
|
||||
}
|
||||
|
||||
@@ -324,7 +324,37 @@ android_media_MediaProfiles_native_get_videoeditor_profile(JNIEnv *env, jobject
|
||||
maxOutputFrameWidth,
|
||||
maxOutputFrameHeight);
|
||||
}
|
||||
static jint
|
||||
android_media_MediaProfiles_native_get_videoeditor_export_profile(
|
||||
JNIEnv *env, jobject thiz, jint codec)
|
||||
{
|
||||
LOGV("android_media_MediaProfiles_native_get_export_profile index ");
|
||||
int profile =0;
|
||||
profile = sProfiles->getVideoEditorExportParamByName("videoeditor.export.profile", codec);
|
||||
// Check the values retrieved
|
||||
if (profile == -1) {
|
||||
jniThrowException(env, "java/lang/RuntimeException",\
|
||||
"Error retrieving videoeditor export profile params");
|
||||
return -1;
|
||||
}
|
||||
return static_cast<jint>(profile);
|
||||
}
|
||||
|
||||
static jint
|
||||
android_media_MediaProfiles_native_get_videoeditor_export_level(
|
||||
JNIEnv *env, jobject thiz, jint codec)
|
||||
{
|
||||
LOGV("android_media_MediaProfiles_native_get_export_level");
|
||||
int level =0;
|
||||
level = sProfiles->getVideoEditorExportParamByName("videoeditor.export.level", codec);
|
||||
// Check the values retrieved
|
||||
if (level == -1) {
|
||||
jniThrowException(env, "java/lang/RuntimeException",\
|
||||
"Error retrieving videoeditor export level params");
|
||||
return -1;
|
||||
}
|
||||
return static_cast<jint>(level);
|
||||
}
|
||||
static JNINativeMethod gMethodsForEncoderCapabilitiesClass[] = {
|
||||
{"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
|
||||
{"native_get_num_file_formats", "()I", (void *)android_media_MediaProfiles_native_get_num_file_formats},
|
||||
@@ -363,16 +393,18 @@ static JNINativeMethod gMethodsForCameraProfileClass[] = {
|
||||
};
|
||||
|
||||
static JNINativeMethod gMethodsForVideoEditorProfileClass[] = {
|
||||
{"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
|
||||
{"native_get_videoeditor_profile", "()Landroid/media/videoeditor/VideoEditorProfile;",
|
||||
(void *)android_media_MediaProfiles_native_get_videoeditor_profile},
|
||||
{"native_init", "()V", (void *)android_media_MediaProfiles_native_init},
|
||||
{"native_get_videoeditor_profile", "()Landroid/media/videoeditor/VideoEditorProfile;", (void *)android_media_MediaProfiles_native_get_videoeditor_profile},
|
||||
{"native_get_videoeditor_export_profile", "(I)I", (void *)android_media_MediaProfiles_native_get_videoeditor_export_profile},
|
||||
{"native_get_videoeditor_export_level", "(I)I", (void *)android_media_MediaProfiles_native_get_videoeditor_export_level},
|
||||
};
|
||||
|
||||
static const char* const kEncoderCapabilitiesClassPathName = "android/media/EncoderCapabilities";
|
||||
static const char* const kDecoderCapabilitiesClassPathName = "android/media/DecoderCapabilities";
|
||||
static const char* const kCamcorderProfileClassPathName = "android/media/CamcorderProfile";
|
||||
static const char* const kCameraProfileClassPathName = "android/media/CameraProfile";
|
||||
static const char* const kVideoEditorProfileClassPathName = "android/media/videoeditor/VideoEditorProfile";
|
||||
static const char* const kVideoEditorProfileClassPathName =
|
||||
"android/media/videoeditor/VideoEditorProfile";
|
||||
|
||||
// This function only registers the native methods, and is called from
|
||||
// JNI_OnLoad in android_media_MediaPlayer.cpp
|
||||
|
||||
@@ -402,7 +402,6 @@ 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("MPEG4_EMP", M4VIDEOEDITING_kMPEG4_EMP),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264", M4VIDEOEDITING_kH264),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_VIDEO", M4VIDEOEDITING_kNullVideo),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kUnsupportedVideo),
|
||||
@@ -448,73 +447,6 @@ VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameSize)
|
||||
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameSize, VIDEO_FRAME_SIZE_CLASS_NAME,
|
||||
M4OSA_NULL, M4OSA_NULL)
|
||||
|
||||
|
||||
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoProfile)
|
||||
{
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_0", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_0),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_0B", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_0b),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_1", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_2", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_2),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_3", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_3),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_4A", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_4a),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4_SP_LEVEL_5", \
|
||||
M4VIDEOEDITING_kMPEG4_SP_Level_5),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_10",\
|
||||
M4VIDEOEDITING_kH263_Profile_0_Level_10),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_20",\
|
||||
M4VIDEOEDITING_kH263_Profile_0_Level_20),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_30",\
|
||||
M4VIDEOEDITING_kH263_Profile_0_Level_30),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_40",\
|
||||
M4VIDEOEDITING_kH263_Profile_0_Level_40),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H263_PROFILE_0_LEVEL_45",\
|
||||
M4VIDEOEDITING_kH263_Profile_0_Level_45),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1", \
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1b",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_1b),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1_1",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_1_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1_2",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_1_2),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_1_3",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_1_3),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_2", \
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_2),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_2_1",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_2_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_2_2",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_2_2),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_3", \
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_3),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_3_1",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_3_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_3_2",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_3_2),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_4", \
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_4),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_4_1",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_4_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_4_2",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_4_2),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_5", \
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_5),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("H264_PROFILE_0_LEVEL_5_1",\
|
||||
M4VIDEOEDITING_kH264_Profile_0_Level_5_1),
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("OUT_OF_RANGE", \
|
||||
M4VIDEOEDITING_kProfile_and_Level_Out_Of_Range)
|
||||
};
|
||||
|
||||
VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoProfile, VIDEO_PROFILE_CLASS_NAME, M4OSA_NULL,
|
||||
M4OSA_NULL)
|
||||
|
||||
|
||||
VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoTransition)
|
||||
{
|
||||
VIDEOEDIT_JAVA_CONSTANT_INIT("NONE", M4VSS3GPP_kVideoTransitionType_None),
|
||||
@@ -550,7 +482,10 @@ VIDEOEDIT_JAVA_DEFINE_FIELDS(Properties)
|
||||
VIDEOEDIT_JAVA_FIELD_INIT("width", "I"),
|
||||
VIDEOEDIT_JAVA_FIELD_INIT("height", "I"),
|
||||
VIDEOEDIT_JAVA_FIELD_INIT("averageFrameRate", "F"),
|
||||
VIDEOEDIT_JAVA_FIELD_INIT("profileAndLevel", "I"),
|
||||
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"),
|
||||
@@ -620,6 +555,8 @@ VIDEOEDIT_JAVA_DEFINE_FIELDS(EditSettings)
|
||||
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" ),
|
||||
@@ -846,7 +783,6 @@ videoEditClasses_init(
|
||||
videoEditJava_initVideoFormatConstants(pResult, pEnv);
|
||||
videoEditJava_initVideoFrameRateConstants(pResult, pEnv);
|
||||
videoEditJava_initVideoFrameSizeConstants(pResult, pEnv);
|
||||
videoEditJava_initVideoProfileConstants(pResult, pEnv);
|
||||
videoEditJava_initVideoTransitionConstants(pResult, pEnv);
|
||||
|
||||
// Initialize the fields.
|
||||
@@ -881,7 +817,6 @@ videoEditPropClass_init(
|
||||
videoEditJava_initErrorConstants(pResult, pEnv);
|
||||
videoEditJava_initFileTypeConstants(pResult, pEnv);
|
||||
videoEditJava_initVideoFormatConstants(pResult, pEnv);
|
||||
videoEditJava_initVideoProfileConstants(pResult, pEnv);
|
||||
|
||||
// Initialize the fields.
|
||||
videoEditJava_initPropertiesFields(pResult, pEnv);
|
||||
@@ -1250,15 +1185,6 @@ videoEditClasses_logClipProperties(
|
||||
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 ProfileAndLevel: %s", indentation, ' ',
|
||||
videoEditJava_getVideoProfileString(pProperties->ProfileAndLevel));
|
||||
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
|
||||
"%*c uiH263level: %d", indentation, ' ',
|
||||
pProperties->uiH263level);
|
||||
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
|
||||
"%*c uiVideoProfile: %d", indentation, ' ',
|
||||
pProperties->uiVideoProfile);
|
||||
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
|
||||
"%*c bMPEG4dataPartition: %s", indentation, ' ',
|
||||
pProperties->bMPEG4dataPartition ? "true" : "false");
|
||||
@@ -1650,9 +1576,21 @@ videoEditPropClass_createProperties(
|
||||
// Set the averageFrameRate field.
|
||||
pEnv->SetFloatField(object, fieldIds.averageFrameRate, pProperties->fAverageFrameRate);
|
||||
|
||||
// Set the profileAndLevel field.
|
||||
pEnv->SetIntField(object, fieldIds.profileAndLevel,
|
||||
videoEditJava_getVideoProfileCToJava(pProperties->ProfileAndLevel));
|
||||
// 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,
|
||||
@@ -2062,6 +2000,14 @@ videoEditClasses_getEditSettings(
|
||||
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);
|
||||
@@ -2255,6 +2201,12 @@ videoEditClasses_logEditSettings(
|
||||
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));
|
||||
@@ -2983,10 +2935,6 @@ videoEditPropClass_logProperties(
|
||||
"%*c fAverageFrameRate: %.3f", indentation, ' ',
|
||||
pProperties->fAverageFrameRate);
|
||||
|
||||
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
|
||||
"%*c ProfileAndLevel: %s", indentation, ' ',
|
||||
videoEditJava_getVideoProfileString(pProperties->ProfileAndLevel));
|
||||
|
||||
VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
|
||||
"%*c AudioStreamType: %s", indentation, ' ',
|
||||
videoEditJava_getAudioFormatString(pProperties->AudioStreamType));
|
||||
|
||||
@@ -128,20 +128,23 @@ typedef struct
|
||||
* 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;
|
||||
M4VIDEOEDITING_VideoProfileAndLevel ProfileAndLevel;
|
||||
M4VIDEOEDITING_AudioFormat AudioStreamType;
|
||||
M4OSA_UInt32 uiClipAudioDuration;
|
||||
M4OSA_UInt32 uiAudioBitrate;
|
||||
M4OSA_UInt32 uiNbChannels;
|
||||
M4OSA_UInt32 uiSamplingFrequency;
|
||||
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;
|
||||
} VideoEditPropClass_Properties;
|
||||
|
||||
typedef struct
|
||||
@@ -154,7 +157,10 @@ typedef struct
|
||||
jfieldID width;
|
||||
jfieldID height;
|
||||
jfieldID averageFrameRate;
|
||||
jfieldID profileAndLevel;
|
||||
jfieldID profile;
|
||||
jfieldID level;
|
||||
jfieldID profileSupported;
|
||||
jfieldID levelSupported;
|
||||
jfieldID audioFormat;
|
||||
jfieldID audioDuration;
|
||||
jfieldID audioBitrate;
|
||||
@@ -192,6 +198,8 @@ typedef struct
|
||||
jfieldID outputFile;
|
||||
jfieldID videoFrameSize;
|
||||
jfieldID videoFormat;
|
||||
jfieldID videoProfile;
|
||||
jfieldID videoLevel;
|
||||
jfieldID audioFormat;
|
||||
jfieldID audioSamplingFreq;
|
||||
jfieldID maxFileSize;
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define LOG_NDEBUG 1
|
||||
#define LOG_TAG "VideoEditorMain"
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
@@ -103,6 +104,7 @@ typedef struct
|
||||
bool mIsUpdateOverlay;
|
||||
char *mOverlayFileName;
|
||||
int mOverlayRenderingMode;
|
||||
M4DECODER_VideoDecoders* decoders;
|
||||
} ManualEditContext;
|
||||
|
||||
extern "C" M4OSA_ERR M4MCS_open_normalMode(
|
||||
@@ -484,6 +486,82 @@ static void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType,
|
||||
pContext->pVM->DetachCurrentThread();
|
||||
|
||||
}
|
||||
static M4OSA_ERR checkClipVideoProfileAndLevel(M4DECODER_VideoDecoders *pDecoders,
|
||||
M4OSA_Int32 format, M4OSA_UInt32 profile, M4OSA_UInt32 level){
|
||||
|
||||
M4OSA_Int32 codec = 0;
|
||||
M4OSA_Bool foundCodec = M4OSA_FALSE;
|
||||
M4OSA_ERR result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE;
|
||||
M4OSA_Bool foundProfile = M4OSA_FALSE;
|
||||
LOGV("checkClipVideoProfileAndLevel format %d profile;%d level:0x%x",
|
||||
format, profile, level);
|
||||
|
||||
switch (format) {
|
||||
case M4VIDEOEDITING_kH263:
|
||||
codec = M4DA_StreamTypeVideoH263;
|
||||
break;
|
||||
case M4VIDEOEDITING_kH264:
|
||||
codec = M4DA_StreamTypeVideoMpeg4Avc;
|
||||
break;
|
||||
case M4VIDEOEDITING_kMPEG4:
|
||||
codec = M4DA_StreamTypeVideoMpeg4;
|
||||
break;
|
||||
case M4VIDEOEDITING_kNoneVideo:
|
||||
case M4VIDEOEDITING_kNullVideo:
|
||||
case M4VIDEOEDITING_kUnsupportedVideo:
|
||||
// For these case we do not check the profile and level
|
||||
return M4NO_ERROR;
|
||||
default :
|
||||
LOGE("checkClipVideoProfileAndLevel unsupport Video format %ld", format);
|
||||
break;
|
||||
}
|
||||
|
||||
if (pDecoders != M4OSA_NULL && pDecoders->decoderNumber > 0) {
|
||||
VideoDecoder *pVideoDecoder = pDecoders->decoder;
|
||||
for(size_t k =0; k < pDecoders->decoderNumber; k++) {
|
||||
if (pVideoDecoder != M4OSA_NULL) {
|
||||
if (pVideoDecoder->codec == codec) {
|
||||
foundCodec = M4OSA_TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pVideoDecoder++;
|
||||
}
|
||||
|
||||
if (foundCodec) {
|
||||
VideoComponentCapabilities* pComponent = pVideoDecoder->component;
|
||||
for (size_t i = 0; i < pVideoDecoder->componentNumber; i++) {
|
||||
if (pComponent != M4OSA_NULL) {
|
||||
VideoProfileLevel *pProfileLevel = pComponent->profileLevel;
|
||||
for (size_t j =0; j < pComponent->profileNumber; j++) {
|
||||
// Check the profile and level
|
||||
if (pProfileLevel != M4OSA_NULL) {
|
||||
if (profile == pProfileLevel->mProfile) {
|
||||
foundProfile = M4OSA_TRUE;
|
||||
|
||||
if (level <= pProfileLevel->mLevel) {
|
||||
return M4NO_ERROR;
|
||||
}
|
||||
} else {
|
||||
foundProfile = M4OSA_FALSE;
|
||||
}
|
||||
}
|
||||
pProfileLevel++;
|
||||
}
|
||||
}
|
||||
pComponent++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (foundProfile) {
|
||||
result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL;
|
||||
} else {
|
||||
result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
static int videoEditor_stopPreview(JNIEnv* pEnv,
|
||||
jobject thiz)
|
||||
{
|
||||
@@ -1244,6 +1322,8 @@ M4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext,
|
||||
// Set the video format.
|
||||
pOutputParams->OutputVideoFormat =
|
||||
(M4VIDEOEDITING_VideoFormat)M4VIDEOEDITING_kNoneVideo;//M4VIDEOEDITING_kNoneVideo;
|
||||
pOutputParams->outputVideoProfile = 1;
|
||||
pOutputParams->outputVideoLevel = 1;
|
||||
// Set the frame size.
|
||||
pOutputParams->OutputVideoFrameSize
|
||||
= (M4VIDEOEDITING_VideoFrameSize)M4VIDEOEDITING_kQCIF;
|
||||
@@ -1797,7 +1877,8 @@ videoEditor_populateSettings(
|
||||
}
|
||||
|
||||
fid = pEnv->GetFieldID(audioSettingClazz,"bRemoveOriginal","Z");
|
||||
pContext->mAudioSettings->bRemoveOriginal = pEnv->GetBooleanField(audioSettingObject,fid);
|
||||
pContext->mAudioSettings->bRemoveOriginal =
|
||||
pEnv->GetBooleanField(audioSettingObject,fid);
|
||||
M4OSA_TRACE1_1("bRemoveOriginal = %d",pContext->mAudioSettings->bRemoveOriginal);
|
||||
|
||||
fid = pEnv->GetFieldID(audioSettingClazz,"channels","I");
|
||||
@@ -2090,8 +2171,44 @@ videoEditor_getProperties(
|
||||
jstring file)
|
||||
{
|
||||
jobject object = M4OSA_NULL;
|
||||
jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME);
|
||||
jfieldID fid;
|
||||
bool needToBeLoaded = true;
|
||||
ManualEditContext* pContext = M4OSA_NULL;
|
||||
M4OSA_ERR result = M4NO_ERROR;
|
||||
int profile = 0;
|
||||
int level = 0;
|
||||
int videoFormat = 0;
|
||||
|
||||
// Get the context.
|
||||
pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
|
||||
|
||||
videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
|
||||
(M4OSA_NULL == clazz),
|
||||
"not initialized");
|
||||
|
||||
object = videoEditProp_getProperties(pEnv,thiz,file);
|
||||
|
||||
if (object != M4OSA_NULL) {
|
||||
fid = pEnv->GetFieldID(clazz,"profile","I");
|
||||
profile = pEnv->GetIntField(object,fid);
|
||||
fid = pEnv->GetFieldID(clazz,"level","I");
|
||||
level = pEnv->GetIntField(object,fid);
|
||||
fid = pEnv->GetFieldID(clazz,"videoFormat","I");
|
||||
videoFormat = pEnv->GetIntField(object,fid);
|
||||
|
||||
result = checkClipVideoProfileAndLevel(pContext->decoders, videoFormat, profile, level);
|
||||
|
||||
fid = pEnv->GetFieldID(clazz,"profileSupported","Z");
|
||||
if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE == result) {
|
||||
pEnv->SetBooleanField(object,fid,false);
|
||||
}
|
||||
|
||||
fid = pEnv->GetFieldID(clazz,"levelSupported","Z");
|
||||
if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL == result) {
|
||||
pEnv->SetBooleanField(object,fid,false);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
|
||||
}
|
||||
@@ -2505,6 +2622,7 @@ videoEditor_init(
|
||||
free(tmpString);
|
||||
pContext->mIsUpdateOverlay = false;
|
||||
pContext->mOverlayFileName = NULL;
|
||||
pContext->decoders = NULL;
|
||||
}
|
||||
|
||||
// Check if the initialization succeeded
|
||||
@@ -2550,6 +2668,12 @@ videoEditor_init(
|
||||
// Check if the library could be initialized.
|
||||
videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
|
||||
(M4NO_ERROR != result), result);
|
||||
|
||||
// Get platform video decoder capablities.
|
||||
result = M4xVSS_getVideoDecoderCapabilities(&pContext->decoders);
|
||||
|
||||
videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
|
||||
(M4NO_ERROR != result), result);
|
||||
}
|
||||
|
||||
if(initialized)
|
||||
@@ -3097,6 +3221,47 @@ videoEditor_release(
|
||||
free(pContext->mAudioSettings);
|
||||
pContext->mAudioSettings = M4OSA_NULL;
|
||||
}
|
||||
// Free video Decoders capabilities
|
||||
if (pContext->decoders != M4OSA_NULL) {
|
||||
VideoDecoder *pDecoder = NULL;
|
||||
VideoComponentCapabilities *pComponents = NULL;
|
||||
int32_t decoderNumber = pContext->decoders->decoderNumber;
|
||||
if (pContext->decoders->decoder != NULL &&
|
||||
decoderNumber > 0) {
|
||||
pDecoder = pContext->decoders->decoder;
|
||||
for (int32_t k = 0; k < decoderNumber; k++) {
|
||||
// free each component
|
||||
LOGV("decoder index :%d",k);
|
||||
if (pDecoder != NULL &&
|
||||
pDecoder->component != NULL &&
|
||||
pDecoder->componentNumber > 0) {
|
||||
LOGV("component number %d",pDecoder->componentNumber);
|
||||
int32_t componentNumber =
|
||||
pDecoder->componentNumber;
|
||||
|
||||
pComponents = pDecoder->component;
|
||||
for (int32_t i = 0; i< componentNumber; i++) {
|
||||
LOGV("component index :%d",i);
|
||||
if (pComponents != NULL &&
|
||||
pComponents->profileLevel != NULL) {
|
||||
free(pComponents->profileLevel);
|
||||
pComponents->profileLevel = NULL;
|
||||
}
|
||||
pComponents++;
|
||||
}
|
||||
free(pDecoder->component);
|
||||
pDecoder->component = NULL;
|
||||
}
|
||||
|
||||
pDecoder++;
|
||||
}
|
||||
free(pContext->decoders->decoder);
|
||||
pContext->decoders->decoder = NULL;
|
||||
}
|
||||
free(pContext->decoders);
|
||||
pContext->decoders = NULL;
|
||||
}
|
||||
|
||||
videoEditor_freeContext(pEnv, &pContext);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,7 +248,11 @@ jobject videoEditProp_getProperties(
|
||||
pProperties->uiVideoWidth = pClipProperties->uiVideoWidth;
|
||||
pProperties->uiVideoHeight = pClipProperties->uiVideoHeight;
|
||||
pProperties->fAverageFrameRate = pClipProperties->fAverageFrameRate;
|
||||
pProperties->ProfileAndLevel = pClipProperties->ProfileAndLevel;
|
||||
pProperties->uiVideoProfile = pClipProperties->uiVideoProfile;
|
||||
pProperties->uiVideoLevel = pClipProperties->uiVideoLevel;
|
||||
// Set profile and level support to TRUE, pending check
|
||||
pProperties->bProfileSupported = M4OSA_TRUE;
|
||||
pProperties->bLevelSupported = M4OSA_TRUE;
|
||||
pProperties->AudioStreamType = pClipProperties->AudioStreamType;
|
||||
pProperties->uiClipAudioDuration = pClipProperties->uiClipAudioDuration;
|
||||
pProperties->uiAudioBitrate = pClipProperties->uiAudioBitrate;
|
||||
@@ -272,7 +276,8 @@ jobject videoEditProp_getProperties(
|
||||
pProperties->uiVideoWidth = width;
|
||||
pProperties->uiVideoHeight = height;
|
||||
pProperties->fAverageFrameRate = 0.0f;
|
||||
pProperties->ProfileAndLevel = M4VIDEOEDITING_kProfile_and_Level_Out_Of_Range;
|
||||
pProperties->uiVideoProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE;
|
||||
pProperties->uiVideoLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL;
|
||||
pProperties->AudioStreamType = M4VIDEOEDITING_kNoneAudio;
|
||||
pProperties->uiClipAudioDuration = 0;
|
||||
pProperties->uiAudioBitrate = 0;
|
||||
@@ -291,11 +296,13 @@ jobject videoEditProp_getProperties(
|
||||
}
|
||||
}
|
||||
|
||||
// Create a properties object.
|
||||
videoEditPropClass_createProperties(&gotten, pEnv, pProperties, &properties);
|
||||
if (M4NO_ERROR == result) {
|
||||
// Create a properties object.
|
||||
videoEditPropClass_createProperties(&gotten, pEnv, pProperties, &properties);
|
||||
|
||||
// Log the properties.
|
||||
VIDEOEDIT_PROP_LOG_PROPERTIES(pProperties);
|
||||
// Log the properties.
|
||||
VIDEOEDIT_PROP_LOG_PROPERTIES(pProperties);
|
||||
}
|
||||
|
||||
// Free the properties.
|
||||
videoEditOsal_free(pProperties);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <expat.h>
|
||||
#include <media/MediaProfiles.h>
|
||||
#include <media/stagefright/MediaDebug.h>
|
||||
#include <media/stagefright/openmax/OMX_Video.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
@@ -377,7 +378,24 @@ void MediaProfiles::addStartTimeOffset(int cameraId, const char** atts)
|
||||
LOGV("%s: cameraId=%d, offset=%d ms", __func__, cameraId, offsetTimeMs);
|
||||
mStartTimeOffsets.replaceValueFor(cameraId, offsetTimeMs);
|
||||
}
|
||||
/*static*/ MediaProfiles::ExportVideoProfile*
|
||||
MediaProfiles::createExportVideoProfile(const char **atts)
|
||||
{
|
||||
CHECK(!strcmp("name", atts[0]) &&
|
||||
!strcmp("profile", atts[2]) &&
|
||||
!strcmp("level", atts[4]));
|
||||
|
||||
const size_t nMappings =
|
||||
sizeof(sVideoEncoderNameMap)/sizeof(sVideoEncoderNameMap[0]);
|
||||
const int codec = findTagForName(sVideoEncoderNameMap, nMappings, atts[1]);
|
||||
CHECK(codec != -1);
|
||||
|
||||
MediaProfiles::ExportVideoProfile *profile =
|
||||
new MediaProfiles::ExportVideoProfile(
|
||||
codec, atoi(atts[3]), atoi(atts[5]));
|
||||
|
||||
return profile;
|
||||
}
|
||||
/*static*/ MediaProfiles::VideoEditorCap*
|
||||
MediaProfiles::createVideoEditorCap(const char **atts, MediaProfiles *profiles)
|
||||
{
|
||||
@@ -428,6 +446,8 @@ MediaProfiles::startElementHandler(void *userData, const char *name, const char
|
||||
profiles->addImageEncodingQualityLevel(profiles->mCurrentCameraId, atts);
|
||||
} else if (strcmp("VideoEditorCap", name) == 0) {
|
||||
createVideoEditorCap(atts, profiles);
|
||||
} else if (strcmp("ExportVideoProfile", name) == 0) {
|
||||
profiles->mVideoEditorExportProfiles.add(createExportVideoProfile(atts));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -830,6 +850,20 @@ MediaProfiles::createDefaultVideoEditorCap(MediaProfiles *profiles)
|
||||
VIDEOEDITOR_DEFAULT_MAX_OUTPUT_FRAME_WIDTH,
|
||||
VIDEOEDITOR_DEFUALT_MAX_OUTPUT_FRAME_HEIGHT);
|
||||
}
|
||||
/*static*/ void
|
||||
MediaProfiles::createDefaultExportVideoProfiles(MediaProfiles *profiles)
|
||||
{
|
||||
// Create default video export profiles
|
||||
profiles->mVideoEditorExportProfiles.add(
|
||||
new ExportVideoProfile(VIDEO_ENCODER_H263,
|
||||
OMX_VIDEO_H263ProfileBaseline, OMX_VIDEO_H263Level10));
|
||||
profiles->mVideoEditorExportProfiles.add(
|
||||
new ExportVideoProfile(VIDEO_ENCODER_MPEG_4_SP,
|
||||
OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1));
|
||||
profiles->mVideoEditorExportProfiles.add(
|
||||
new ExportVideoProfile(VIDEO_ENCODER_H264,
|
||||
OMX_VIDEO_AVCProfileBaseline, OMX_VIDEO_AVCLevel13));
|
||||
}
|
||||
|
||||
/*static*/ MediaProfiles*
|
||||
MediaProfiles::createDefaultInstance()
|
||||
@@ -843,6 +877,7 @@ MediaProfiles::createDefaultInstance()
|
||||
createDefaultEncoderOutputFileFormats(profiles);
|
||||
createDefaultImageEncodingQualityLevels(profiles);
|
||||
createDefaultVideoEditorCap(profiles);
|
||||
createDefaultExportVideoProfiles(profiles);
|
||||
return profiles;
|
||||
}
|
||||
|
||||
@@ -940,7 +975,31 @@ int MediaProfiles::getVideoEncoderParamByName(const char *name, video_encoder co
|
||||
LOGE("The given video encoder param name %s is not found", name);
|
||||
return -1;
|
||||
}
|
||||
int MediaProfiles::getVideoEditorExportParamByName(
|
||||
const char *name, int codec) const
|
||||
{
|
||||
LOGV("getVideoEditorExportParamByName: name %s codec %d", name, codec);
|
||||
ExportVideoProfile *exportProfile = NULL;
|
||||
int index = -1;
|
||||
for (size_t i =0; i < mVideoEditorExportProfiles.size(); i++) {
|
||||
exportProfile = mVideoEditorExportProfiles[i];
|
||||
if (exportProfile->mCodec == codec) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index == -1) {
|
||||
LOGE("The given video decoder %d is not found", codec);
|
||||
return -1;
|
||||
}
|
||||
if (!strcmp("videoeditor.export.profile", name))
|
||||
return exportProfile->mProfile;
|
||||
if (!strcmp("videoeditor.export.level", name))
|
||||
return exportProfile->mLevel;
|
||||
|
||||
LOGE("The given video editor export param name %s is not found", name);
|
||||
return -1;
|
||||
}
|
||||
int MediaProfiles::getVideoEditorCapParamByName(const char *name) const
|
||||
{
|
||||
LOGV("getVideoEditorCapParamByName: %s", name);
|
||||
|
||||
@@ -71,7 +71,7 @@ public class MediaPropertiesTest extends
|
||||
|
||||
protected void validateVideoProperties(int aspectRatio, int fileType,
|
||||
int videoCodecType, int duration, int videoBitrate, int fps,
|
||||
int videoProfile, int width, int height, int audioCodecType,
|
||||
int videoProfile, int videoLevel, int width, int height, int audioCodecType,
|
||||
int audioSamplingFrequency, int audioChannel, int audioBitrate,
|
||||
MediaVideoItem mvi) throws Exception {
|
||||
assertEquals("Aspect Ratio Mismatch", aspectRatio, mvi.getAspectRatio());
|
||||
@@ -82,6 +82,8 @@ public class MediaPropertiesTest extends
|
||||
duration, mvi.getDuration(), 10));
|
||||
assertEquals("Video Profile " + mvi.getVideoProfile(), videoProfile,
|
||||
mvi.getVideoProfile());
|
||||
assertEquals("Video Level " + mvi.getVideoLevel(), videoLevel,
|
||||
mvi.getVideoLevel());
|
||||
assertEquals("Video height " + mvi.getHeight(), height, mvi.getHeight());
|
||||
assertEquals("Video width " + mvi.getWidth(), width, mvi.getWidth());
|
||||
/** Check FPS with 10% range */
|
||||
@@ -143,7 +145,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 16000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
|
||||
final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
|
||||
final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
|
||||
final int width = 854;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
|
||||
@@ -152,7 +155,7 @@ public class MediaPropertiesTest extends
|
||||
MediaItem.RENDERING_MODE_BLACK_BORDER);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -175,7 +178,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AMRNB;
|
||||
final int audioSamplingFrequency = 8000;
|
||||
final int audioChannel = 1;
|
||||
final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
|
||||
final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
|
||||
final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
|
||||
final int width = 800;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -184,7 +188,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -206,7 +210,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 48000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
|
||||
final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
|
||||
final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
|
||||
final int width = 720;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -215,7 +220,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -237,7 +242,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 48000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
|
||||
final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
|
||||
final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
|
||||
final int width = 640;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -246,7 +252,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -268,7 +274,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AMRNB;
|
||||
final int audioSamplingFrequency = 8000;
|
||||
final int audioChannel = 1;
|
||||
final int videoProfile = MediaProperties.MPEG4_SP_LEVEL_1;
|
||||
final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
|
||||
final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
|
||||
final int width = 176;
|
||||
final int height = MediaProperties.HEIGHT_144;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -277,7 +284,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -299,7 +306,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 16000;
|
||||
final int audioChannel = 1;
|
||||
final int videoProfile = MediaProperties.H263_PROFILE_0_LEVEL_10;
|
||||
final int videoProfile = MediaProperties.H263Profile.H263ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H263Level.H263Level10;
|
||||
final int width = 176;
|
||||
final int height = MediaProperties.HEIGHT_144;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -307,7 +315,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -321,7 +329,7 @@ public class MediaPropertiesTest extends
|
||||
+ "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
|
||||
final int fileType = MediaProperties.FILE_3GP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 77600;
|
||||
final int videoBitrate = 745000;
|
||||
final int audioBitrate = 64000;
|
||||
@@ -329,7 +337,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 48000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 640;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -337,7 +346,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -351,7 +360,7 @@ public class MediaPropertiesTest extends
|
||||
+ "H264_BP_720x480_25fps_256kbps_AMRNB_8khz_12.2kbps_m_0_26.mp4";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 26880;
|
||||
final int videoBitrate = 244000;
|
||||
final int audioBitrate = 12200;
|
||||
@@ -359,7 +368,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AMRNB;
|
||||
final int audioSamplingFrequency = 8000;
|
||||
final int audioChannel = 1;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 720;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -368,7 +378,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -382,7 +392,7 @@ public class MediaPropertiesTest extends
|
||||
"H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 77466;
|
||||
final int videoBitrate = 528000;
|
||||
final int audioBitrate = 38000;
|
||||
@@ -390,7 +400,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 24000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 800;
|
||||
final int height = MediaProperties.HEIGHT_480;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -399,7 +410,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -413,7 +424,7 @@ public class MediaPropertiesTest extends
|
||||
+ "H264_BP_1280x720_15fps_512kbps_AACLC_16khz_48kbps_s_1_17.mp4";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_16_9;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 77600;
|
||||
final int videoBitrate = 606000;
|
||||
final int audioBitrate = 48000;
|
||||
@@ -421,7 +432,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 16000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 1280;
|
||||
final int height = MediaProperties.HEIGHT_720;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -430,7 +442,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -444,7 +456,7 @@ public class MediaPropertiesTest extends
|
||||
+ "H264_BP_1080x720_30fps_12Mbps_AACLC_44.1khz_64kbps_s_1_17.mp4";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 77500;
|
||||
final int videoBitrate = 1190000;
|
||||
final int audioBitrate = 64000;
|
||||
@@ -452,7 +464,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 44100;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 1080;
|
||||
final int height = MediaProperties.HEIGHT_720;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -461,7 +474,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
@@ -491,7 +504,7 @@ public class MediaPropertiesTest extends
|
||||
}
|
||||
|
||||
/**
|
||||
*To test media properties for H.264 Main/Advanced profile. (unsupported profile input)
|
||||
*To test media properties for H.264 Main/Advanced profile.
|
||||
*/
|
||||
// TODO : Remove TC_MP_013
|
||||
@LargeTest
|
||||
@@ -499,19 +512,28 @@ public class MediaPropertiesTest extends
|
||||
final String videoItemFilename = INPUT_FILE_PATH
|
||||
+ "H264_MP_960x720_25fps_800kbps_AACLC_48Khz_192Kbps_s_1_17.mp4";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
|
||||
//final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264MP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int duration = 77500;
|
||||
final int videoBitrate = 800000;
|
||||
final int audioBitrate = 192000;
|
||||
final int fps = 25;
|
||||
final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
|
||||
final int audioSamplingFrequency = 48000;
|
||||
final int audioChannel = 2;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileMain;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level31;
|
||||
final int width = 960;
|
||||
final int height = MediaProperties.HEIGHT_720;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
boolean flagForException = false;
|
||||
|
||||
try {
|
||||
final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
assertEquals("VideoCodec Mismatch", videoCodecType, mvi.getVideoType());
|
||||
}catch (IllegalArgumentException e){
|
||||
flagForException = true;
|
||||
}
|
||||
assertTrue("Unsupported Main Profile", flagForException);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -544,7 +566,7 @@ public class MediaPropertiesTest extends
|
||||
"H264_BP_1080x720_30fps_800kbps_1_17.mp4";
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 77366;
|
||||
final int videoBitrate = 859000;
|
||||
final int audioBitrate = 0;
|
||||
@@ -552,7 +574,8 @@ public class MediaPropertiesTest extends
|
||||
final int audioCodecType = -1;
|
||||
final int audioSamplingFrequency = 0;
|
||||
final int audioChannel = 0;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 1080;
|
||||
final int height = MediaProperties.HEIGHT_720;
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
@@ -561,7 +584,7 @@ public class MediaPropertiesTest extends
|
||||
(mVideoEditor, "m1", videoItemFilename, renderingMode);
|
||||
|
||||
validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
|
||||
videoBitrate, fps, videoProfile, width, height, audioCodecType,
|
||||
videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
|
||||
audioSamplingFrequency, audioChannel, audioBitrate, mvi);
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ public class VideoEditorExportTest extends
|
||||
+ mediaImageItem6.getDuration();
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0, storyBoardDuration,
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
|
||||
@@ -294,7 +294,7 @@ public class VideoEditorExportTest extends
|
||||
+ mediaImageItem6.getDuration();
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0, storyBoardDuration,
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
|
||||
@@ -352,7 +352,7 @@ public class VideoEditorExportTest extends
|
||||
}
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0, mediaImageItem.getDuration(),
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
|
||||
@@ -412,7 +412,7 @@ public class VideoEditorExportTest extends
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0, (mediaVideoItem.getTimelineDuration() +
|
||||
mediaImageItem.getDuration()),
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
@@ -531,7 +531,7 @@ public class VideoEditorExportTest extends
|
||||
+ mediaItem6.getTimelineDuration() - transition5And6.getDuration();
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0, storyBoardDuration,
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
|
||||
@@ -693,7 +693,7 @@ public class VideoEditorExportTest extends
|
||||
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_144, 0, storyBoardDuration,
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
|
||||
@@ -730,7 +730,7 @@ public class VideoEditorExportTest extends
|
||||
}
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0, mediaItem1.getDuration(),
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
|
||||
@@ -814,7 +814,7 @@ public class VideoEditorExportTest extends
|
||||
mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
|
||||
MediaProperties.HEIGHT_720, 0,
|
||||
(mediaVideoItem.getDuration()+ mediaVideoItem1.getDuration()),
|
||||
MediaProperties.VCODEC_H264BP, MediaProperties.ACODEC_AAC_LC);
|
||||
MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
|
||||
mVideoEditorHelper.checkDeleteExistingFile(outFilename);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,7 +366,7 @@ public class VideoEditorPerformance extends
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
final int outHeight = MediaProperties.HEIGHT_480;
|
||||
final int outBitrate = MediaProperties.BITRATE_256K;
|
||||
final int outVcodec = MediaProperties.VCODEC_H264BP;
|
||||
final int outVcodec = MediaProperties.VCODEC_H264;
|
||||
final String[] loggingInfo = new String[1];
|
||||
final String outFilename = mVideoEditorHelper
|
||||
.createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
|
||||
@@ -639,11 +639,12 @@ public class VideoEditorPerformance extends
|
||||
final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
|
||||
final int fileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int duration = 77366;
|
||||
final int videoBitrate = 3169971;
|
||||
final int fps = 30;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int width = 1080;
|
||||
final int height = MediaProperties.HEIGHT_720;
|
||||
int timeTaken = 0;
|
||||
@@ -665,6 +666,8 @@ public class VideoEditorPerformance extends
|
||||
duration, mediaVideoItem.getDuration());
|
||||
assertEquals("Video Profile ",
|
||||
videoProfile, mediaVideoItem.getVideoProfile());
|
||||
assertEquals("Video Level ",
|
||||
videoLevel, mediaVideoItem.getVideoLevel());
|
||||
assertEquals("Video height ",
|
||||
height, mediaVideoItem.getHeight());
|
||||
assertEquals("Video width ",
|
||||
|
||||
@@ -665,9 +665,10 @@ public class VideoEditorStressTest
|
||||
int i = 0;
|
||||
final int videoAspectRatio = MediaProperties.ASPECT_RATIO_3_2;
|
||||
final int videoFileType = MediaProperties.FILE_MP4;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264BP;
|
||||
final int videoCodecType = MediaProperties.VCODEC_H264;
|
||||
final int videoDuration = 77366;
|
||||
final int videoProfile = MediaProperties.H264_PROFILE_0_LEVEL_1_3;
|
||||
final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
|
||||
final int videoLevel = MediaProperties.H264Level.H264Level13;
|
||||
final int videoHeight = MediaProperties.HEIGHT_720;
|
||||
final int videoWidth = 1080;
|
||||
|
||||
@@ -698,6 +699,8 @@ public class VideoEditorStressTest
|
||||
videoDuration, mediaItem1.getDuration());
|
||||
assertEquals("Video Profile ",
|
||||
videoProfile, mediaItem1.getVideoProfile());
|
||||
assertEquals("Video Level ",
|
||||
videoLevel, mediaItem1.getVideoLevel());
|
||||
assertEquals("Video height ",
|
||||
videoHeight, mediaItem1.getHeight());
|
||||
assertEquals("Video width ",
|
||||
@@ -939,9 +942,9 @@ public class VideoEditorStressTest
|
||||
|
||||
for ( i = 0; i < 50; i++) {
|
||||
if(i%4 ==0){
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
|
||||
final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
|
||||
mVideoEditor.setAspectRatio(aspectRatio);
|
||||
mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
|
||||
mVideoEditor.export(outFilename, MediaProperties.HEIGHT_288,
|
||||
MediaProperties.BITRATE_256K,MediaProperties.ACODEC_AAC_LC,
|
||||
MediaProperties.VCODEC_H263,
|
||||
new ExportProgressListener() {
|
||||
@@ -967,7 +970,7 @@ public class VideoEditorStressTest
|
||||
mVideoEditor.setAspectRatio(aspectRatio);
|
||||
mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
|
||||
MediaProperties.BITRATE_512K,MediaProperties.ACODEC_AAC_LC,
|
||||
MediaProperties.VCODEC_H264BP,
|
||||
MediaProperties.VCODEC_H264,
|
||||
new ExportProgressListener() {
|
||||
public void onProgress(VideoEditor ve, String outFileName,
|
||||
int progress) {
|
||||
@@ -979,7 +982,7 @@ public class VideoEditorStressTest
|
||||
mVideoEditor.setAspectRatio(aspectRatio);
|
||||
mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
|
||||
MediaProperties.BITRATE_800K,MediaProperties.ACODEC_AAC_LC,
|
||||
MediaProperties.VCODEC_H264BP,
|
||||
MediaProperties.VCODEC_H264,
|
||||
new ExportProgressListener() {
|
||||
public void onProgress(VideoEditor ve, String outFileName,
|
||||
int progress) {
|
||||
|
||||
Reference in New Issue
Block a user