VideoEditorClasses.h revision 3ced044154945f9d60983032278e00fe28f4ab1b
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef VIDEO_EDITOR_CLASSES_H
18#define VIDEO_EDITOR_CLASSES_H
19
20#include <VideoEditorJava.h>
21#include <VideoEditorClasses.h>
22/**
23 ************************************************************************
24 * @file        VideoEditorClasses.h
25 * @brief       Interface for JNI methods/defines that have specific
26 *              access to class, objects and method Ids defined in Java layer
27 ************************************************************************
28*/
29
30
31extern "C" {
32#include <M4xVSS_API.h>
33#include <M4VSS3GPP_API.h>
34#include <M4VSS3GPP_ErrorCodes.h>
35#include <M4MCS_ErrorCodes.h>
36#include <M4READER_Common.h>
37#include <M4WRITER_common.h>
38};
39
40/*
41 * Java layer class/object name strings
42 */
43#define PACKAGE_NAME                           "android/media/videoeditor"
44
45#define MANUAL_EDIT_ENGINE_CLASS_NAME          PACKAGE_NAME"/MediaArtistNativeHelper"
46#define MEDIA_PROPERTIES_ENGINE_CLASS_NAME     PACKAGE_NAME"/MediaArtistNativeHelper"
47
48#define AUDIO_FORMAT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioFormat"
49#define RESULTS_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Results"
50#define VERSION_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Version"
51#define AUDIO_SAMPLING_FREQUENCY_CLASS_NAME    MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSamplingFrequency"
52#define BITRATE_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Bitrate"
53#define ERROR_CLASS_NAME                       MANUAL_EDIT_ENGINE_CLASS_NAME"$Result"
54#define FILE_TYPE_CLASS_NAME                   MANUAL_EDIT_ENGINE_CLASS_NAME"$FileType"
55#define MEDIA_RENDERING_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$MediaRendering"
56#define VIDEO_FORMAT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFormat"
57#define VIDEO_FRAME_RATE_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameRate"
58#define VIDEO_FRAME_SIZE_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameSize"
59#define VIDEO_PROFILE_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoProfile"
60#define ALPHA_MAGIC_SETTINGS_CLASS_NAME        MANUAL_EDIT_ENGINE_CLASS_NAME"$AlphaMagicSettings"
61#define AUDIO_EFFECT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioEffect"
62#define AUDIO_TRANSITION_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioTransition"
63#define BACKGROUND_MUSIC_SETTINGS_CLASS_NAME   MANUAL_EDIT_ENGINE_CLASS_NAME"$BackgroundMusicSettings"
64#define CLIP_SETTINGS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$ClipSettings"
65#define EDIT_SETTINGS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$EditSettings"
66#define EFFECT_SETTINGS_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$EffectSettings"
67#define SLIDE_DIRECTION_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideDirection"
68#define SLIDE_TRANSITION_SETTINGS_CLASS_NAME   MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideTransitionSettings"
69#define TRANSITION_BEHAVIOUR_CLASS_NAME        MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionBehaviour"
70#define TRANSITION_SETTINGS_CLASS_NAME         MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionSettings"
71#define VIDEO_EFFECT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoEffect"
72#define VIDEO_TRANSITION_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoTransition"
73#define PREVIEW_CLIPS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClips"
74#define PREVIEW_SETTING_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewSettings"
75#define PREVIEW_PROPERTIES_CLASS_NAME          MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClipProperties"
76#define AUDIO_SETTINGS_CLASS_NAME              MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSettings"
77#define PROPERTIES_CLASS_NAME                  MANUAL_EDIT_ENGINE_CLASS_NAME"$Properties"
78
79#define TASK_IDLE                                   0
80#define TASK_LOADING_SETTINGS                       1
81#define TASK_ENCODING                               2
82
83/*
84 * File type enum
85 */
86typedef enum
87{
88    VideoEditClasses_kFileType_3GPP,
89    VideoEditClasses_kFileType_MP4,
90    VideoEditClasses_kFileType_AMR,
91    VideoEditClasses_kFileType_MP3,
92    VideoEditClasses_kFileType_PCM,
93    VideoEditClasses_kFileType_JPG,
94    VideoEditClasses_kFileType_BMP,
95    VideoEditClasses_kFileType_GIF,
96    VideoEditClasses_kFileType_PNG,
97    VideoEditClasses_kFileType_ARGB8888,
98    VideoEditClasses_kFileType_M4V,
99    VideoEditClasses_kFileType_Unsupported
100} VideoEditClasses_FileType;
101
102/*
103 * Alpha magic transition structure
104 */
105typedef struct
106{
107    jfieldID file;
108    jfieldID blendingPercent;
109    jfieldID invertRotation;
110    jfieldID rgbWidth;
111    jfieldID rgbHeight;
112} VideoEditJava_AlphaMagicFieldIds;
113
114typedef struct
115{
116    jfieldID file;
117    jfieldID fileType;
118    jfieldID insertionTime;
119    jfieldID volumePercent;
120    jfieldID beginLoop;
121    jfieldID endLoop;
122    jfieldID enableDucking;
123    jfieldID duckingThreshold;
124    jfieldID lowVolume;
125    jfieldID isLooping;
126} VideoEditJava_BackgroundMusicFieldIds;
127/*
128 * Structure to hold media properties from native layer
129 */
130typedef struct {
131    M4OSA_UInt32 uiClipDuration;
132    VideoEditClasses_FileType  FileType;
133    M4VIDEOEDITING_VideoFormat VideoStreamType;
134    M4OSA_UInt32 uiClipVideoDuration;
135    M4OSA_UInt32 uiVideoBitrate;
136    M4OSA_UInt32 uiVideoWidth;
137    M4OSA_UInt32 uiVideoHeight;
138    M4OSA_Float  fAverageFrameRate;
139    M4OSA_UInt32 uiVideoProfile; /**< H263 or MPEG-4 or H264 profile(from core decoder) */
140    M4OSA_UInt32 uiVideoLevel;   /**< H263 or MPEG-4 or H264 level*/
141    M4OSA_Bool bProfileSupported;
142    M4OSA_Bool bLevelSupported;
143    M4VIDEOEDITING_AudioFormat AudioStreamType;
144    M4OSA_UInt32 uiClipAudioDuration;
145    M4OSA_UInt32 uiAudioBitrate;
146    M4OSA_UInt32 uiNbChannels;
147    M4OSA_UInt32 uiSamplingFrequency;
148} VideoEditPropClass_Properties;
149
150typedef struct
151{
152    jfieldID duration;
153    jfieldID fileType;
154    jfieldID videoFormat;
155    jfieldID videoDuration;
156    jfieldID videoBitrate;
157    jfieldID width;
158    jfieldID height;
159    jfieldID averageFrameRate;
160    jfieldID profile;
161    jfieldID level;
162    jfieldID profileSupported;
163    jfieldID levelSupported;
164    jfieldID audioFormat;
165    jfieldID audioDuration;
166    jfieldID audioBitrate;
167    jfieldID audioChannels;
168    jfieldID audioSamplingFrequency;
169} VideoEditJava_PropertiesFieldIds;
170
171
172typedef struct
173{
174    jfieldID clipPath;
175    jfieldID fileType;
176    jfieldID beginCutTime;
177    jfieldID endCutTime;
178    jfieldID beginCutPercent;
179    jfieldID endCutPercent;
180    jfieldID panZoomEnabled;
181    jfieldID panZoomPercentStart;
182    jfieldID panZoomTopLeftXStart;
183    jfieldID panZoomTopLeftYStart;
184    jfieldID panZoomPercentEnd;
185    jfieldID panZoomTopLeftXEnd;
186    jfieldID panZoomTopLeftYEnd;
187    jfieldID mediaRendering;
188    jfieldID rgbFileWidth;
189    jfieldID rgbFileHeight;
190} VideoEditJava_ClipSettingsFieldIds;
191
192typedef struct
193{
194    jfieldID clipSettingsArray;
195    jfieldID transitionSettingsArray;
196    jfieldID effectSettingsArray;
197    jfieldID videoFrameRate;
198    jfieldID outputFile;
199    jfieldID videoFrameSize;
200    jfieldID videoFormat;
201    jfieldID videoProfile;
202    jfieldID videoLevel;
203    jfieldID audioFormat;
204    jfieldID audioSamplingFreq;
205    jfieldID maxFileSize;
206    jfieldID audioChannels;
207    jfieldID videoBitrate;
208    jfieldID audioBitrate;
209    jfieldID backgroundMusicSettings;
210    jfieldID primaryTrackVolume;
211} VideoEditJava_EditSettingsFieldIds;
212
213
214typedef struct
215{
216    jfieldID startTime;
217    jfieldID duration;
218    jfieldID videoEffectType;
219    jfieldID audioEffectType;
220    jfieldID startPercent;
221    jfieldID durationPercent;
222    jfieldID framingFile;
223    jfieldID framingBuffer;
224    jfieldID bitmapType;
225    jfieldID width;
226    jfieldID height;
227    jfieldID topLeftX;
228    jfieldID topLeftY;
229    jfieldID framingResize;
230    jfieldID framingScaledSize;
231    jfieldID text;
232    jfieldID textRenderingData;
233    jfieldID textBufferWidth;
234    jfieldID textBufferHeight;
235    jfieldID fiftiesFrameRate;
236    jfieldID rgb16InputColor;
237    jfieldID alphaBlendingStartPercent;
238    jfieldID alphaBlendingMiddlePercent;
239    jfieldID alphaBlendingEndPercent;
240    jfieldID alphaBlendingFadeInTimePercent;
241    jfieldID alphaBlendingFadeOutTimePercent;
242} VideoEditJava_EffectSettingsFieldIds;
243
244typedef struct
245{
246    jfieldID context;
247} VideoEditJava_EngineFieldIds;
248
249typedef struct
250{
251    jfieldID direction;
252} VideoEditJava_SlideTransitionSettingsFieldIds;
253
254typedef struct
255{
256    jfieldID duration;
257    jfieldID videoTransitionType;
258    jfieldID audioTransitionType;
259    jfieldID transitionBehaviour;
260    jfieldID alphaSettings;
261    jfieldID slideSettings;
262} VideoEditJava_TransitionSettingsFieldIds;
263
264typedef struct
265{
266    jfieldID major;
267    jfieldID minor;
268    jfieldID revision;
269} VideoEditJava_VersionFieldIds;
270
271
272typedef struct
273{
274    jmethodID onProgressUpdate;
275} VideoEditJava_EngineMethodIds;
276
277
278VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect           )
279VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat           )
280VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency)
281VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition       )
282VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate               )
283VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine                )
284VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error                 )
285VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType              )
286VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering        )
287VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection        )
288VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour   )
289VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect           )
290VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat           )
291VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate        )
292VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize        )
293VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile          )
294VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition       )
295
296
297VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic               )
298VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic          )
299VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
300VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
301VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings             )
302VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings           )
303VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine                   )
304VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings  )
305VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings       )
306VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version                  )
307
308VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine                  )
309
310/*
311 * Init all Edit settings related structures
312 */
313void
314videoEditClasses_init(
315                bool*                               pResult,
316                JNIEnv*                             pEnv);
317/**
318 ************************************************************************
319 * @brief    Media Properties init function.
320 * @param    pResult    (OUT) Pointer to hold result
321 * @param    pEnv       (IN)  JVM Interface pointer
322 ************************************************************************
323*/
324void
325videoEditPropClass_init(
326                bool*                               pResult,
327                JNIEnv*                             pEnv);
328/**
329 ************************************************************************
330 * @brief    Interface to populate Media Properties.
331 * @param    pResult        (IN/OUT)    Pointer to hold result
332 * @param    pEnv           (IN)        JVM Interface pointer
333 * @param    pProperties    (IN)        Media propeties structure pointer
334 * @param    pObject        (OUT)       Java object to hold media
335 *                                      properties for java layer.
336 ************************************************************************
337*/
338void
339videoEditPropClass_createProperties(
340                bool*                               pResult,
341                JNIEnv*                             pEnv,
342                VideoEditPropClass_Properties*      pProperties,
343                jobject*                            pObject);
344
345/**
346 ************************************************************************
347 * @brief    Interface to log/display media properties.
348 * @param    pProperties    (IN) Pointer holding media properties
349 * @param    indentation    (IN) Indentation to follow in display
350 ************************************************************************
351*/
352void
353videoEditPropClass_logProperties(
354                VideoEditPropClass_Properties*      pProperties,
355                int                                 indentation);
356
357/*
358 * Get alpha magic transition settings
359 */
360void
361videoEditClasses_getAlphaMagicSettings(
362                bool*                               pResult,
363                JNIEnv*                             pEnv,
364                jobject                             object,
365                M4xVSS_AlphaMagicSettings**         ppSettings);
366
367/*
368 * Free alpha magic transition settings structure
369 */
370void
371videoEditClasses_freeAlphaMagicSettings(
372                M4xVSS_AlphaMagicSettings**         ppSettings);
373
374/*
375 * Log alpha magic transition settings
376 */
377void
378videoEditClasses_logAlphaMagicSettings(
379                M4xVSS_AlphaMagicSettings*          pSettings,
380                int                                 indentation);
381
382/*
383 * Get Background Track settings
384 */
385void
386videoEditClasses_getBackgroundMusicSettings(
387                bool*                               pResult,
388                JNIEnv*                             pEnv,
389                jobject                             object,
390                M4xVSS_BGMSettings**                ppSettings);
391
392/*
393 * Free Background Track settings structure
394 */
395void
396videoEditClasses_freeBackgroundMusicSettings(
397                M4xVSS_BGMSettings**                ppSettings);
398
399/*
400 * Log Background Track settings
401 */
402void
403videoEditClasses_logBackgroundMusicSettings(
404                M4xVSS_BGMSettings*                 pSettings,
405                int                                 indentation);
406
407/*
408 * Log clip properties
409 */
410void
411videoEditClasses_logClipProperties(
412                M4VIDEOEDITING_ClipProperties*      pProperties,
413                int                                 indentation);
414
415/*
416 * Get clip settings from Java
417 */
418void
419videoEditClasses_getClipSettings(
420                bool*                               pResult,
421                JNIEnv*                             pEnv,
422                jobject                             object,
423                M4VSS3GPP_ClipSettings**            ppSettings);
424/**
425 ************************************************************************
426 * @brief   Interface function to retrieve media properties for a given
427 *          file.
428 * @param   pEnv    (IN)    Pointer holding media properties
429 * @param   thiz    (IN)    Indentation to follow in display
430 * @param   file    (IN)    File path for which media properties has
431 *                          to be retrieved.
432 ************************************************************************
433*/
434jobject
435videoEditProp_getProperties(
436                JNIEnv*                             pEnv,
437                jobject                             thiz,
438                jstring                             file);
439
440/*
441 * Create/Set the clip settings to java Object
442 */
443void
444videoEditClasses_createClipSettings(
445                bool*                               pResult,
446                JNIEnv*                             pEnv,
447                M4VSS3GPP_ClipSettings*             pSettings,
448                jobject*                            pObject);
449
450/*
451 * Free clip settings structure
452 */
453void
454videoEditClasses_freeClipSettings(
455                M4VSS3GPP_ClipSettings**            ppSettings);
456
457/*
458 * Log clip settings structure
459 */
460void
461videoEditClasses_logClipSettings(
462                M4VSS3GPP_ClipSettings*             pSettings,
463                int                                 indentation);
464
465/*
466 * Get Edit settings from Java
467 */
468void
469videoEditClasses_getEditSettings(
470                bool*                               pResult,
471                JNIEnv*                             pEnv,
472                jobject                             object,
473                M4VSS3GPP_EditSettings**            ppSettings,
474                bool                                flag);
475
476/*
477 * Free Edit Settings structure
478 */
479void
480videoEditClasses_freeEditSettings(
481                M4VSS3GPP_EditSettings**            ppSettings);
482
483/*
484 * Log Edit settings structure
485 */
486void
487videoEditClasses_logEditSettings(
488                M4VSS3GPP_EditSettings*             pSettings,
489                int                                 indentation);
490
491/*
492 * Get Effect settings from Java
493 */
494void
495videoEditClasses_getEffectSettings(
496                bool*                               pResult,
497                JNIEnv*                             pEnv,
498                jobject                             object,
499                M4VSS3GPP_EffectSettings*           pSettings);
500
501/*
502 * Free Effect settings structure
503 */
504void
505videoEditClasses_freeEffectSettings(
506                M4VSS3GPP_EffectSettings*           pSettings);
507
508/*
509 * Log Effect settings
510 */
511void
512videoEditClasses_logEffectSettings(
513                M4VSS3GPP_EffectSettings*           pSettings,
514                int                                 indentation);
515
516/*
517 * Get Transition-Sliding settings from Java
518 */
519void
520videoEditClasses_getSlideTransitionSettings(
521                bool*                               pResult,
522                JNIEnv*                             pEnv,
523                jobject                             object,
524                M4xVSS_SlideTransitionSettings**    ppSettings);
525
526/*
527 * Free Transition-Sliding structure
528 */
529void
530videoEditClasses_freeSlideTransitionSettings(
531                M4xVSS_SlideTransitionSettings**    ppSettings);
532
533/*
534 * Free Transition-Sliding structure
535 */
536void
537videoEditClasses_logSlideTransitionSettings(
538                M4xVSS_SlideTransitionSettings*     pSettings,
539                int                                 indentation);
540
541/*
542 * Get Transition settings from Java
543 */
544void
545videoEditClasses_getTransitionSettings(
546                bool*                               pResult,
547                JNIEnv*                             pEnv,
548                jobject                             object,
549                M4VSS3GPP_TransitionSettings**      ppSettings);
550
551/*
552 * Free Transition settings structure
553 */
554void
555videoEditClasses_freeTransitionSettings(
556                M4VSS3GPP_TransitionSettings**      ppSettings);
557
558/*
559 * Log Transition settings
560 */
561void
562videoEditClasses_logTransitionSettings(
563                M4VSS3GPP_TransitionSettings*       pSettings,
564                int                                 indentation);
565
566/*
567 * Set version information to Java object
568 */
569void
570videoEditClasses_createVersion(
571                bool*                               pResult,
572                JNIEnv*                             pEnv,
573                M4_VersionInfo*                     pVersionInfo,
574                jobject*                            pObject);
575
576/*
577 * Log Version information
578 */
579void
580videoEditClasses_logVersion(
581                M4_VersionInfo*                     pVersionInfo,
582                int                                 indentation);
583
584
585void*
586videoEditClasses_getContext(
587                bool*                               pResult,
588                JNIEnv*                             pEnv,
589                jobject                             object);
590
591void
592videoEditClasses_setContext(
593                bool*                               pResult,
594                JNIEnv*                             pEnv,
595                jobject                             object,
596                void*                               pContext);
597
598
599#endif // VIDEO_EDITOR_CLASSES_H
600
601