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    M4OSA_UInt32 uiRotation;
149} VideoEditPropClass_Properties;
150
151typedef 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
174typedef 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
195typedef 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
217typedef 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
247typedef struct
248{
249    jfieldID context;
250} VideoEditJava_EngineFieldIds;
251
252typedef struct
253{
254    jfieldID direction;
255} VideoEditJava_SlideTransitionSettingsFieldIds;
256
257typedef struct
258{
259    jfieldID duration;
260    jfieldID videoTransitionType;
261    jfieldID audioTransitionType;
262    jfieldID transitionBehaviour;
263    jfieldID alphaSettings;
264    jfieldID slideSettings;
265} VideoEditJava_TransitionSettingsFieldIds;
266
267typedef struct
268{
269    jfieldID major;
270    jfieldID minor;
271    jfieldID revision;
272} VideoEditJava_VersionFieldIds;
273
274
275typedef struct
276{
277    jmethodID onProgressUpdate;
278} VideoEditJava_EngineMethodIds;
279
280
281VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect           )
282VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat           )
283VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency)
284VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition       )
285VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate               )
286VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine                )
287VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error                 )
288VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType              )
289VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering        )
290VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection        )
291VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour   )
292VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect           )
293VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat           )
294VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate        )
295VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize        )
296VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile          )
297VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition       )
298
299
300VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic               )
301VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic          )
302VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
303VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
304VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings             )
305VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings           )
306VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine                   )
307VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings  )
308VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings       )
309VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version                  )
310
311VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine                  )
312
313/*
314 * Init all Edit settings related structures
315 */
316void
317videoEditClasses_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*/
327void
328videoEditPropClass_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*/
341void
342videoEditPropClass_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*/
355void
356videoEditPropClass_logProperties(
357                VideoEditPropClass_Properties*      pProperties,
358                int                                 indentation);
359
360/*
361 * Get alpha magic transition settings
362 */
363void
364videoEditClasses_getAlphaMagicSettings(
365                bool*                               pResult,
366                JNIEnv*                             pEnv,
367                jobject                             object,
368                M4xVSS_AlphaMagicSettings**         ppSettings);
369
370/*
371 * Free alpha magic transition settings structure
372 */
373void
374videoEditClasses_freeAlphaMagicSettings(
375                M4xVSS_AlphaMagicSettings**         ppSettings);
376
377/*
378 * Log alpha magic transition settings
379 */
380void
381videoEditClasses_logAlphaMagicSettings(
382                M4xVSS_AlphaMagicSettings*          pSettings,
383                int                                 indentation);
384
385/*
386 * Get Background Track settings
387 */
388void
389videoEditClasses_getBackgroundMusicSettings(
390                bool*                               pResult,
391                JNIEnv*                             pEnv,
392                jobject                             object,
393                M4xVSS_BGMSettings**                ppSettings);
394
395/*
396 * Free Background Track settings structure
397 */
398void
399videoEditClasses_freeBackgroundMusicSettings(
400                M4xVSS_BGMSettings**                ppSettings);
401
402/*
403 * Log Background Track settings
404 */
405void
406videoEditClasses_logBackgroundMusicSettings(
407                M4xVSS_BGMSettings*                 pSettings,
408                int                                 indentation);
409
410/*
411 * Log clip properties
412 */
413void
414videoEditClasses_logClipProperties(
415                M4VIDEOEDITING_ClipProperties*      pProperties,
416                int                                 indentation);
417
418/*
419 * Get clip settings from Java
420 */
421void
422videoEditClasses_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*/
437jobject
438videoEditProp_getProperties(
439                JNIEnv*                             pEnv,
440                jobject                             thiz,
441                jstring                             file);
442
443/*
444 * Create/Set the clip settings to java Object
445 */
446void
447videoEditClasses_createClipSettings(
448                bool*                               pResult,
449                JNIEnv*                             pEnv,
450                M4VSS3GPP_ClipSettings*             pSettings,
451                jobject*                            pObject);
452
453/*
454 * Free clip settings structure
455 */
456void
457videoEditClasses_freeClipSettings(
458                M4VSS3GPP_ClipSettings**            ppSettings);
459
460/*
461 * Log clip settings structure
462 */
463void
464videoEditClasses_logClipSettings(
465                M4VSS3GPP_ClipSettings*             pSettings,
466                int                                 indentation);
467
468/*
469 * Get Edit settings from Java
470 */
471void
472videoEditClasses_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 */
482void
483videoEditClasses_freeEditSettings(
484                M4VSS3GPP_EditSettings**            ppSettings);
485
486/*
487 * Log Edit settings structure
488 */
489void
490videoEditClasses_logEditSettings(
491                M4VSS3GPP_EditSettings*             pSettings,
492                int                                 indentation);
493
494/*
495 * Get Effect settings from Java
496 */
497void
498videoEditClasses_getEffectSettings(
499                bool*                               pResult,
500                JNIEnv*                             pEnv,
501                jobject                             object,
502                M4VSS3GPP_EffectSettings*           pSettings);
503
504/*
505 * Free Effect settings structure
506 */
507void
508videoEditClasses_freeEffectSettings(
509                M4VSS3GPP_EffectSettings*           pSettings);
510
511/*
512 * Log Effect settings
513 */
514void
515videoEditClasses_logEffectSettings(
516                M4VSS3GPP_EffectSettings*           pSettings,
517                int                                 indentation);
518
519/*
520 * Get Transition-Sliding settings from Java
521 */
522void
523videoEditClasses_getSlideTransitionSettings(
524                bool*                               pResult,
525                JNIEnv*                             pEnv,
526                jobject                             object,
527                M4xVSS_SlideTransitionSettings**    ppSettings);
528
529/*
530 * Free Transition-Sliding structure
531 */
532void
533videoEditClasses_freeSlideTransitionSettings(
534                M4xVSS_SlideTransitionSettings**    ppSettings);
535
536/*
537 * Free Transition-Sliding structure
538 */
539void
540videoEditClasses_logSlideTransitionSettings(
541                M4xVSS_SlideTransitionSettings*     pSettings,
542                int                                 indentation);
543
544/*
545 * Get Transition settings from Java
546 */
547void
548videoEditClasses_getTransitionSettings(
549                bool*                               pResult,
550                JNIEnv*                             pEnv,
551                jobject                             object,
552                M4VSS3GPP_TransitionSettings**      ppSettings);
553
554/*
555 * Free Transition settings structure
556 */
557void
558videoEditClasses_freeTransitionSettings(
559                M4VSS3GPP_TransitionSettings**      ppSettings);
560
561/*
562 * Log Transition settings
563 */
564void
565videoEditClasses_logTransitionSettings(
566                M4VSS3GPP_TransitionSettings*       pSettings,
567                int                                 indentation);
568
569/*
570 * Set version information to Java object
571 */
572void
573videoEditClasses_createVersion(
574                bool*                               pResult,
575                JNIEnv*                             pEnv,
576                M4_VersionInfo*                     pVersionInfo,
577                jobject*                            pObject);
578
579/*
580 * Log Version information
581 */
582void
583videoEditClasses_logVersion(
584                M4_VersionInfo*                     pVersionInfo,
585                int                                 indentation);
586
587
588void*
589videoEditClasses_getContext(
590                bool*                               pResult,
591                JNIEnv*                             pEnv,
592                jobject                             object);
593
594void
595videoEditClasses_setContext(
596                bool*                               pResult,
597                JNIEnv*                             pEnv,
598                jobject                             object,
599                void*                               pContext);
600
601
602#endif // VIDEO_EDITOR_CLASSES_H
603
604