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