Home | History | Annotate | Download | only in lvpp
      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 ANDROID_VE_TOOLS_H
     18 #define ANDROID_VE_TOOLS_H
     19 
     20 #include "M4OSA_Types.h"
     21 #include "M4OSA_Memory.h"
     22 #include "M4OSA_Debug.h"
     23 #include "M4VIFI_FiltersAPI.h"
     24 /* Macro definitions */
     25 #include "M4VIFI_Defines.h"
     26 /* Clip table declaration */
     27 #include "M4VIFI_Clip.h"
     28 #include "M4VFL_transition.h"
     29 #include "M4VSS3GPP_API.h"
     30 #include "M4xVSS_API.h"
     31 #include "M4xVSS_Internal.h"
     32 #include "M4AIR_API.h"
     33 #include "PreviewRenderer.h"
     34 
     35 #define MEDIA_RENDERING_INVALID 255
     36 #define TRANSPARENT_COLOR 0x7E0
     37 #define LUM_FACTOR_MAX 10
     38 enum {
     39     VIDEO_EFFECT_NONE               = 0,
     40     VIDEO_EFFECT_BLACKANDWHITE      = 1,
     41     VIDEO_EFFECT_PINK               = 2,
     42     VIDEO_EFFECT_GREEN              = 4,
     43     VIDEO_EFFECT_SEPIA              = 8,
     44     VIDEO_EFFECT_NEGATIVE           = 16,
     45     VIDEO_EFFECT_FRAMING            = 32,
     46     VIDEO_EFFECT_FIFTIES            = 64,
     47     VIDEO_EFFECT_COLOR_RGB16        = 128,
     48     VIDEO_EFFECT_GRADIENT           = 256,
     49     VIDEO_EFFECT_FADEFROMBLACK      = 512,
     50     VIDEO_EFFECT_FADETOBLACK        = 2048,
     51 };
     52 
     53 typedef struct {
     54     M4VIFI_UInt8 *vidBuffer;
     55     M4OSA_UInt32 videoWidth;
     56     M4OSA_UInt32 videoHeight;
     57     M4OSA_UInt32 timeMs;
     58     M4OSA_UInt32 timeOffset; //has the duration of clips played.
     59                              //The flag shall be used for Framing.
     60     M4VSS3GPP_EffectSettings* effectsSettings;
     61     M4OSA_UInt32 numberEffects;
     62     M4OSA_UInt32 outVideoWidth;
     63     M4OSA_UInt32 outVideoHeight;
     64     M4OSA_UInt32 currentVideoEffect;
     65     M4OSA_Bool isFiftiesEffectStarted;
     66     M4xVSS_MediaRendering renderingMode;
     67     uint8_t *pOutBuffer;
     68     size_t outBufferStride;
     69     M4VIFI_UInt8*  overlayFrameRGBBuffer;
     70     M4VIFI_UInt8*  overlayFrameYUVBuffer;
     71 } vePostProcessParams;
     72 
     73 M4VIFI_UInt8 M4VIFI_YUV420PlanarToYUV420Semiplanar(void *user_data, M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane *PlaneOut );
     74 M4VIFI_UInt8 M4VIFI_SemiplanarYUV420toYUV420(void *user_data, M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane *PlaneOut );
     75 
     76 M4OSA_ERR M4VSS3GPP_externalVideoEffectColor(M4OSA_Void *pFunctionContext, M4VIFI_ImagePlane *PlaneIn,
     77                                                     M4VIFI_ImagePlane *PlaneOut,M4VSS3GPP_ExternalProgress *pProgress, M4OSA_UInt32 uiEffectKind);
     78 
     79 M4OSA_ERR M4VSS3GPP_externalVideoEffectFraming( M4OSA_Void *userData, M4VIFI_ImagePlane PlaneIn[3], M4VIFI_ImagePlane *PlaneOut, M4VSS3GPP_ExternalProgress *pProgress, M4OSA_UInt32 uiEffectKind );
     80 
     81 M4OSA_ERR M4VSS3GPP_externalVideoEffectFifties( M4OSA_Void *pUserData, M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut, M4VSS3GPP_ExternalProgress *pProgress, M4OSA_UInt32 uiEffectKind );
     82 
     83 unsigned char M4VFL_modifyLumaWithScale(M4ViComImagePlane *plane_in, M4ViComImagePlane *plane_out, unsigned long lum_factor, void *user_data);
     84 
     85 M4OSA_ERR M4xVSS_internalConvertRGBtoYUV(M4xVSS_FramingStruct* framingCtx);
     86 M4VIFI_UInt8    M4VIFI_xVSS_RGB565toYUV420(void *pUserData, M4VIFI_ImagePlane *pPlaneIn,
     87                                                       M4VIFI_ImagePlane *pPlaneOut);
     88 
     89 M4OSA_ERR M4xVSS_internalConvertRGB888toYUV(M4xVSS_FramingStruct* framingCtx);
     90 M4VIFI_UInt8 M4VIFI_RGB888toYUV420(void *pUserData, M4VIFI_ImagePlane *PlaneIn, M4VIFI_ImagePlane PlaneOut[3]);
     91 
     92 /*+ Handle the image files here */
     93 M4OSA_ERR LvGetImageThumbNail(const char *fileName, M4OSA_UInt32 height, M4OSA_UInt32 width, M4OSA_Void **pBuffer);
     94 /*- Handle the image files here */
     95 
     96 M4OSA_ERR applyRenderingMode(M4VIFI_ImagePlane* pPlaneIn, M4VIFI_ImagePlane* pPlaneOut, M4xVSS_MediaRendering mediaRendering);
     97 
     98 
     99 M4VIFI_UInt8 M4VIFI_YUV420toYUV420(void *user_data, M4VIFI_ImagePlane PlaneIn[3], M4VIFI_ImagePlane *PlaneOut );
    100 M4VIFI_UInt8    M4VIFI_ResizeBilinearYUV420toYUV420(void *pUserData,
    101                                                                 M4VIFI_ImagePlane *pPlaneIn,
    102                                                                 M4VIFI_ImagePlane *pPlaneOut);
    103 
    104 M4OSA_Void prepareYUV420ImagePlane(M4VIFI_ImagePlane *plane,
    105     M4OSA_UInt32 width, M4OSA_UInt32 height, M4VIFI_UInt8 *buffer,
    106     M4OSA_UInt32 reportedWidth, M4OSA_UInt32 reportedHeight);
    107 
    108 M4OSA_Void prepareYV12ImagePlane(M4VIFI_ImagePlane *plane,
    109     M4OSA_UInt32 width, M4OSA_UInt32 height, M4OSA_UInt32 stride, M4VIFI_UInt8 *buffer);
    110 
    111 M4OSA_Void swapImagePlanes(
    112     M4VIFI_ImagePlane *planeIn, M4VIFI_ImagePlane *planeOut,
    113     M4VIFI_UInt8 *buffer1, M4VIFI_UInt8 *buffer2);
    114 
    115 M4OSA_Void computePercentageDone(
    116      M4OSA_UInt32 ctsMs, M4OSA_UInt32 effectStartTimeMs,
    117      M4OSA_UInt32 effectDuration, M4OSA_Double *percentageDone);
    118 
    119 M4OSA_Void computeProgressForVideoEffect(
    120      M4OSA_UInt32 ctsMs, M4OSA_UInt32 effectStartTimeMs,
    121      M4OSA_UInt32 effectDuration, M4VSS3GPP_ExternalProgress* extProgress);
    122 
    123 M4OSA_ERR prepareFramingStructure(
    124     M4xVSS_FramingStruct* framingCtx,
    125     M4VSS3GPP_EffectSettings* effectsSettings, M4OSA_UInt32 index,
    126     M4VIFI_UInt8* overlayRGB, M4VIFI_UInt8* overlayYUV);
    127 
    128 M4OSA_ERR applyColorEffect(M4xVSS_VideoEffectType colorEffect,
    129     M4VIFI_ImagePlane *planeIn, M4VIFI_ImagePlane *planeOut,
    130     M4VIFI_UInt8 *buffer1, M4VIFI_UInt8 *buffer2, M4OSA_UInt16 rgbColorData);
    131 
    132 M4OSA_ERR applyLumaEffect(M4VSS3GPP_VideoEffectType videoEffect,
    133     M4VIFI_ImagePlane *planeIn, M4VIFI_ImagePlane *planeOut,
    134     M4VIFI_UInt8 *buffer1, M4VIFI_UInt8 *buffer2, M4OSA_Int32 lum_factor);
    135 
    136 M4OSA_ERR applyEffectsAndRenderingMode(vePostProcessParams *params,
    137     M4OSA_UInt32 reportedWidth, M4OSA_UInt32 reportedHeight);
    138 
    139 android::status_t getVideoSizeByResolution(M4VIDEOEDITING_VideoFrameSize resolution,
    140     uint32_t *pWidth, uint32_t *pHeight);
    141 
    142 M4VIFI_UInt8 M4VIFI_Rotate90LeftYUV420toYUV420(void* pUserData,
    143     M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    144 
    145 M4VIFI_UInt8 M4VIFI_Rotate90RightYUV420toYUV420(void* pUserData,
    146     M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    147 
    148 M4VIFI_UInt8 M4VIFI_Rotate180YUV420toYUV420(void* pUserData,
    149     M4VIFI_ImagePlane *pPlaneIn, M4VIFI_ImagePlane *pPlaneOut);
    150 
    151 M4OSA_ERR applyVideoRotation(M4OSA_Void* pBuffer,
    152     M4OSA_UInt32 width, M4OSA_UInt32 height, M4OSA_UInt32 rotation);
    153 #endif // ANDROID_VE_TOOLS_H
    154