• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
31 extern "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  */
86 typedef 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  */
105 typedef struct
106 {
107     jfieldID file;
108     jfieldID blendingPercent;
109     jfieldID invertRotation;
110     jfieldID rgbWidth;
111     jfieldID rgbHeight;
112 } VideoEditJava_AlphaMagicFieldIds;
113 
114 typedef 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  */
130 typedef 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     M4OSA_UInt32 uiRotation;
149 } VideoEditPropClass_Properties;
150 
151 typedef struct
152 {
153     jfieldID duration;
154     jfieldID fileType;
155     jfieldID videoFormat;
156     jfieldID videoDuration;
157     jfieldID videoBitrate;
158     jfieldID width;
159     jfieldID height;
160     jfieldID averageFrameRate;
161     jfieldID profile;
162     jfieldID level;
163     jfieldID profileSupported;
164     jfieldID levelSupported;
165     jfieldID audioFormat;
166     jfieldID audioDuration;
167     jfieldID audioBitrate;
168     jfieldID audioChannels;
169     jfieldID audioSamplingFrequency;
170     jfieldID videoRotation;
171 } VideoEditJava_PropertiesFieldIds;
172 
173 
174 typedef struct
175 {
176     jfieldID clipPath;
177     jfieldID fileType;
178     jfieldID beginCutTime;
179     jfieldID endCutTime;
180     jfieldID beginCutPercent;
181     jfieldID endCutPercent;
182     jfieldID panZoomEnabled;
183     jfieldID panZoomPercentStart;
184     jfieldID panZoomTopLeftXStart;
185     jfieldID panZoomTopLeftYStart;
186     jfieldID panZoomPercentEnd;
187     jfieldID panZoomTopLeftXEnd;
188     jfieldID panZoomTopLeftYEnd;
189     jfieldID mediaRendering;
190     jfieldID rgbFileWidth;
191     jfieldID rgbFileHeight;
192     jfieldID rotationDegree;
193 } VideoEditJava_ClipSettingsFieldIds;
194 
195 typedef struct
196 {
197     jfieldID clipSettingsArray;
198     jfieldID transitionSettingsArray;
199     jfieldID effectSettingsArray;
200     jfieldID videoFrameRate;
201     jfieldID outputFile;
202     jfieldID videoFrameSize;
203     jfieldID videoFormat;
204     jfieldID videoProfile;
205     jfieldID videoLevel;
206     jfieldID audioFormat;
207     jfieldID audioSamplingFreq;
208     jfieldID maxFileSize;
209     jfieldID audioChannels;
210     jfieldID videoBitrate;
211     jfieldID audioBitrate;
212     jfieldID backgroundMusicSettings;
213     jfieldID primaryTrackVolume;
214 } VideoEditJava_EditSettingsFieldIds;
215 
216 
217 typedef struct
218 {
219     jfieldID startTime;
220     jfieldID duration;
221     jfieldID videoEffectType;
222     jfieldID audioEffectType;
223     jfieldID startPercent;
224     jfieldID durationPercent;
225     jfieldID framingFile;
226     jfieldID framingBuffer;
227     jfieldID bitmapType;
228     jfieldID width;
229     jfieldID height;
230     jfieldID topLeftX;
231     jfieldID topLeftY;
232     jfieldID framingResize;
233     jfieldID framingScaledSize;
234     jfieldID text;
235     jfieldID textRenderingData;
236     jfieldID textBufferWidth;
237     jfieldID textBufferHeight;
238     jfieldID fiftiesFrameRate;
239     jfieldID rgb16InputColor;
240     jfieldID alphaBlendingStartPercent;
241     jfieldID alphaBlendingMiddlePercent;
242     jfieldID alphaBlendingEndPercent;
243     jfieldID alphaBlendingFadeInTimePercent;
244     jfieldID alphaBlendingFadeOutTimePercent;
245 } VideoEditJava_EffectSettingsFieldIds;
246 
247 typedef struct
248 {
249     jfieldID context;
250 } VideoEditJava_EngineFieldIds;
251 
252 typedef struct
253 {
254     jfieldID direction;
255 } VideoEditJava_SlideTransitionSettingsFieldIds;
256 
257 typedef struct
258 {
259     jfieldID duration;
260     jfieldID videoTransitionType;
261     jfieldID audioTransitionType;
262     jfieldID transitionBehaviour;
263     jfieldID alphaSettings;
264     jfieldID slideSettings;
265 } VideoEditJava_TransitionSettingsFieldIds;
266 
267 typedef struct
268 {
269     jfieldID major;
270     jfieldID minor;
271     jfieldID revision;
272 } VideoEditJava_VersionFieldIds;
273 
274 
275 typedef struct
276 {
277     jmethodID onProgressUpdate;
278 } VideoEditJava_EngineMethodIds;
279 
280 
281 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect           )
282 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat           )
283 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency)
284 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition       )
285 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate               )
286 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine                )
287 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error                 )
288 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType              )
289 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering        )
290 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection        )
291 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour   )
292 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect           )
293 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat           )
294 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate        )
295 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize        )
296 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile          )
297 VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition       )
298 
299 
300 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic               )
301 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic          )
302 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
303 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
304 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings             )
305 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings           )
306 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine                   )
307 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings  )
308 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings       )
309 VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version                  )
310 
311 VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine                  )
312 
313 /*
314  * Init all Edit settings related structures
315  */
316 void
317 videoEditClasses_init(
318                 bool*                               pResult,
319                 JNIEnv*                             pEnv);
320 /**
321  ************************************************************************
322  * @brief    Media Properties init function.
323  * @param    pResult    (OUT) Pointer to hold result
324  * @param    pEnv       (IN)  JVM Interface pointer
325  ************************************************************************
326 */
327 void
328 videoEditPropClass_init(
329                 bool*                               pResult,
330                 JNIEnv*                             pEnv);
331 /**
332  ************************************************************************
333  * @brief    Interface to populate Media Properties.
334  * @param    pResult        (IN/OUT)    Pointer to hold result
335  * @param    pEnv           (IN)        JVM Interface pointer
336  * @param    pProperties    (IN)        Media propeties structure pointer
337  * @param    pObject        (OUT)       Java object to hold media
338  *                                      properties for java layer.
339  ************************************************************************
340 */
341 void
342 videoEditPropClass_createProperties(
343                 bool*                               pResult,
344                 JNIEnv*                             pEnv,
345                 VideoEditPropClass_Properties*      pProperties,
346                 jobject*                            pObject);
347 
348 /**
349  ************************************************************************
350  * @brief    Interface to log/display media properties.
351  * @param    pProperties    (IN) Pointer holding media properties
352  * @param    indentation    (IN) Indentation to follow in display
353  ************************************************************************
354 */
355 void
356 videoEditPropClass_logProperties(
357                 VideoEditPropClass_Properties*      pProperties,
358                 int                                 indentation);
359 
360 /*
361  * Get alpha magic transition settings
362  */
363 void
364 videoEditClasses_getAlphaMagicSettings(
365                 bool*                               pResult,
366                 JNIEnv*                             pEnv,
367                 jobject                             object,
368                 M4xVSS_AlphaMagicSettings**         ppSettings);
369 
370 /*
371  * Free alpha magic transition settings structure
372  */
373 void
374 videoEditClasses_freeAlphaMagicSettings(
375                 M4xVSS_AlphaMagicSettings**         ppSettings);
376 
377 /*
378  * Log alpha magic transition settings
379  */
380 void
381 videoEditClasses_logAlphaMagicSettings(
382                 M4xVSS_AlphaMagicSettings*          pSettings,
383                 int                                 indentation);
384 
385 /*
386  * Get Background Track settings
387  */
388 void
389 videoEditClasses_getBackgroundMusicSettings(
390                 bool*                               pResult,
391                 JNIEnv*                             pEnv,
392                 jobject                             object,
393                 M4xVSS_BGMSettings**                ppSettings);
394 
395 /*
396  * Free Background Track settings structure
397  */
398 void
399 videoEditClasses_freeBackgroundMusicSettings(
400                 M4xVSS_BGMSettings**                ppSettings);
401 
402 /*
403  * Log Background Track settings
404  */
405 void
406 videoEditClasses_logBackgroundMusicSettings(
407                 M4xVSS_BGMSettings*                 pSettings,
408                 int                                 indentation);
409 
410 /*
411  * Log clip properties
412  */
413 void
414 videoEditClasses_logClipProperties(
415                 M4VIDEOEDITING_ClipProperties*      pProperties,
416                 int                                 indentation);
417 
418 /*
419  * Get clip settings from Java
420  */
421 void
422 videoEditClasses_getClipSettings(
423                 bool*                               pResult,
424                 JNIEnv*                             pEnv,
425                 jobject                             object,
426                 M4VSS3GPP_ClipSettings**            ppSettings);
427 /**
428  ************************************************************************
429  * @brief   Interface function to retrieve media properties for a given
430  *          file.
431  * @param   pEnv    (IN)    Pointer holding media properties
432  * @param   thiz    (IN)    Indentation to follow in display
433  * @param   file    (IN)    File path for which media properties has
434  *                          to be retrieved.
435  ************************************************************************
436 */
437 jobject
438 videoEditProp_getProperties(
439                 JNIEnv*                             pEnv,
440                 jobject                             thiz,
441                 jstring                             file);
442 
443 /*
444  * Create/Set the clip settings to java Object
445  */
446 void
447 videoEditClasses_createClipSettings(
448                 bool*                               pResult,
449                 JNIEnv*                             pEnv,
450                 M4VSS3GPP_ClipSettings*             pSettings,
451                 jobject*                            pObject);
452 
453 /*
454  * Free clip settings structure
455  */
456 void
457 videoEditClasses_freeClipSettings(
458                 M4VSS3GPP_ClipSettings**            ppSettings);
459 
460 /*
461  * Log clip settings structure
462  */
463 void
464 videoEditClasses_logClipSettings(
465                 M4VSS3GPP_ClipSettings*             pSettings,
466                 int                                 indentation);
467 
468 /*
469  * Get Edit settings from Java
470  */
471 void
472 videoEditClasses_getEditSettings(
473                 bool*                               pResult,
474                 JNIEnv*                             pEnv,
475                 jobject                             object,
476                 M4VSS3GPP_EditSettings**            ppSettings,
477                 bool                                flag);
478 
479 /*
480  * Free Edit Settings structure
481  */
482 void
483 videoEditClasses_freeEditSettings(
484                 M4VSS3GPP_EditSettings**            ppSettings);
485 
486 /*
487  * Log Edit settings structure
488  */
489 void
490 videoEditClasses_logEditSettings(
491                 M4VSS3GPP_EditSettings*             pSettings,
492                 int                                 indentation);
493 
494 /*
495  * Get Effect settings from Java
496  */
497 void
498 videoEditClasses_getEffectSettings(
499                 bool*                               pResult,
500                 JNIEnv*                             pEnv,
501                 jobject                             object,
502                 M4VSS3GPP_EffectSettings*           pSettings);
503 
504 /*
505  * Free Effect settings structure
506  */
507 void
508 videoEditClasses_freeEffectSettings(
509                 M4VSS3GPP_EffectSettings*           pSettings);
510 
511 /*
512  * Log Effect settings
513  */
514 void
515 videoEditClasses_logEffectSettings(
516                 M4VSS3GPP_EffectSettings*           pSettings,
517                 int                                 indentation);
518 
519 /*
520  * Get Transition-Sliding settings from Java
521  */
522 void
523 videoEditClasses_getSlideTransitionSettings(
524                 bool*                               pResult,
525                 JNIEnv*                             pEnv,
526                 jobject                             object,
527                 M4xVSS_SlideTransitionSettings**    ppSettings);
528 
529 /*
530  * Free Transition-Sliding structure
531  */
532 void
533 videoEditClasses_freeSlideTransitionSettings(
534                 M4xVSS_SlideTransitionSettings**    ppSettings);
535 
536 /*
537  * Free Transition-Sliding structure
538  */
539 void
540 videoEditClasses_logSlideTransitionSettings(
541                 M4xVSS_SlideTransitionSettings*     pSettings,
542                 int                                 indentation);
543 
544 /*
545  * Get Transition settings from Java
546  */
547 void
548 videoEditClasses_getTransitionSettings(
549                 bool*                               pResult,
550                 JNIEnv*                             pEnv,
551                 jobject                             object,
552                 M4VSS3GPP_TransitionSettings**      ppSettings);
553 
554 /*
555  * Free Transition settings structure
556  */
557 void
558 videoEditClasses_freeTransitionSettings(
559                 M4VSS3GPP_TransitionSettings**      ppSettings);
560 
561 /*
562  * Log Transition settings
563  */
564 void
565 videoEditClasses_logTransitionSettings(
566                 M4VSS3GPP_TransitionSettings*       pSettings,
567                 int                                 indentation);
568 
569 /*
570  * Set version information to Java object
571  */
572 void
573 videoEditClasses_createVersion(
574                 bool*                               pResult,
575                 JNIEnv*                             pEnv,
576                 M4_VersionInfo*                     pVersionInfo,
577                 jobject*                            pObject);
578 
579 /*
580  * Log Version information
581  */
582 void
583 videoEditClasses_logVersion(
584                 M4_VersionInfo*                     pVersionInfo,
585                 int                                 indentation);
586 
587 
588 void*
589 videoEditClasses_getContext(
590                 bool*                               pResult,
591                 JNIEnv*                             pEnv,
592                 jobject                             object);
593 
594 void
595 videoEditClasses_setContext(
596                 bool*                               pResult,
597                 JNIEnv*                             pEnv,
598                 jobject                             object,
599                 void*                               pContext);
600 
601 
602 #endif // VIDEO_EDITOR_CLASSES_H
603 
604