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