Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a789d6c0 authored by James Dong's avatar James Dong Committed by Android (Google) Code Review
Browse files

Merge "Clean up VideoEditorPreviewController class part one:"

parents c25942f4 3d2d40ac
Loading
Loading
Loading
Loading
+20 −13
Original line number Diff line number Diff line
@@ -14,13 +14,20 @@
 * limitations under the License.
 */

#define LOG_NDEBUG 1
#define LOG_TAG "VideoEditorPreviewController"
// #define LOG_NDEBUG 0
#define LOG_TAG "PreviewController"
#include <utils/Log.h>

#include <surfaceflinger/Surface.h>

#include "VideoEditorAudioPlayer.h"
#include "PreviewRenderer.h"
#include "M4OSA_Semaphore.h"
#include "M4OSA_Thread.h"
#include "VideoEditorPreviewController.h"

namespace android {

#define PREVIEW_THREAD_STACK_SIZE                           (65536)

VideoEditorPreviewController::VideoEditorPreviewController()
    : mCurrentPlayer(0),
@@ -56,15 +63,15 @@ VideoEditorPreviewController::VideoEditorPreviewController()
    mRenderingMode = M4xVSS_kBlackBorders;
    mIsFiftiesEffectStarted = false;

    for (int i=0; i<NBPLAYER_INSTANCES; i++) {
    for (int i = 0; i < kTotalNumPlayerInstances; ++i) {
        mVePlayer[i] = NULL;
    }
}

VideoEditorPreviewController::~VideoEditorPreviewController() {
    ALOGV("~VideoEditorPreviewController");
    M4OSA_UInt32 i = 0;
    M4OSA_ERR err = M4NO_ERROR;
    ALOGV("~VideoEditorPreviewController");

    // Stop the thread if its still running
    if(mThreadContext != NULL) {
@@ -85,7 +92,7 @@ VideoEditorPreviewController::~VideoEditorPreviewController() {
        mThreadContext = NULL;
    }

    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES;
    for (int playerInst=0; playerInst<kTotalNumPlayerInstances;
         playerInst++) {
        if(mVePlayer[playerInst] != NULL) {
            ALOGV("clearing mVePlayer %d", playerInst);
@@ -438,7 +445,7 @@ M4OSA_ERR VideoEditorPreviewController::startPreview(
    }

    // If already started, then stop preview first
    for(int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
    for(int playerInst=0; playerInst<kTotalNumPlayerInstances; playerInst++) {
        if(mVePlayer[playerInst] != NULL) {
            ALOGV("startPreview: stopping previously started preview playback");
            stopPreview();
@@ -471,7 +478,7 @@ M4OSA_ERR VideoEditorPreviewController::startPreview(
    ALOGV("startPreview: callBackAfterFrameCount = %d", callBackAfterFrameCount);
    mCallBackAfterFrameCnt = callBackAfterFrameCount;

    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
    for (int playerInst=0; playerInst<kTotalNumPlayerInstances; playerInst++) {
        mVePlayer[playerInst] = new VideoEditorPlayer(mNativeWindowRenderer);
        if(mVePlayer[playerInst] == NULL) {
            ALOGE("startPreview:Error creating VideoEditorPlayer %d",playerInst);
@@ -542,7 +549,7 @@ M4OSA_ERR VideoEditorPreviewController::startPreview(
        mVideoStoryBoardTimeMsUptoFirstPreviewClip = iIncrementedDuration;
    }

    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
    for (int playerInst=0; playerInst<kTotalNumPlayerInstances; playerInst++) {
        mVePlayer[playerInst]->setAudioMixStoryBoardParam(fromMS,
         mFirstPreviewClipBeginTime,
         mClipList[i]->ClipProperties.uiClipAudioVolumePercentage);
@@ -605,7 +612,7 @@ M4OSA_ERR VideoEditorPreviewController::startPreview(

    // Set the stacksize
    err = M4OSA_threadSyncSetOption(mThreadContext, M4OSA_ThreadStackSize,
     (M4OSA_DataOption)PREVIEW_THREAD_STACK_SIZE);
     (M4OSA_DataOption) kPreviewThreadStackSize);

    if (M4NO_ERROR != err) {
        ALOGE("VideoEditorPreviewController: threadSyncSetOption error %d", (int) err);
@@ -668,7 +675,7 @@ M4OSA_UInt32 VideoEditorPreviewController::stopPreview() {
        }
    }

    for (int playerInst=0; playerInst<NBPLAYER_INSTANCES; playerInst++) {
    for (int playerInst=0; playerInst<kTotalNumPlayerInstances; playerInst++) {
        if(mVePlayer[playerInst] != NULL) {
            if(mVePlayer[playerInst]->isPlaying()) {
                ALOGV("stop the player first");
@@ -1045,7 +1052,7 @@ M4OSA_ERR VideoEditorPreviewController::threadProc(M4OSA_Void* param) {
                 pController->mCurrentClipNumber);

                // Reset the story board timestamp inside the player
                for (int playerInst=0; playerInst<NBPLAYER_INSTANCES;
                for (int playerInst=0; playerInst<kTotalNumPlayerInstances;
                 playerInst++) {
                    pController->mVePlayer[playerInst]->resetJniCallbackTimeStamp();
                }
@@ -1249,7 +1256,7 @@ void VideoEditorPreviewController::notify(
             pController->mNumberClipsToPreview) {
                pController->mPrepareReqest = M4OSA_TRUE;
                pController->mCurrentPlayer++;
                if (pController->mCurrentPlayer >= NBPLAYER_INSTANCES) {
                if (pController->mCurrentPlayer >= kTotalNumPlayerInstances) {
                    pController->mCurrentPlayer = 0;
                }
                // Prepare the first clip to be played
+58 −61
Original line number Diff line number Diff line
@@ -17,87 +17,78 @@
#ifndef ANDROID_VE_PREVIEWCONTROLLER_H
#define ANDROID_VE_PREVIEWCONTROLLER_H

#include <utils/Log.h>
#include "VideoEditorPlayer.h"
#include "VideoEditorAudioPlayer.h"
#include "M4OSA_Semaphore.h"
#include "M4OSA_Thread.h"
#include "M4OSA_Clock.h"
#include "M4OSA_Time.h"
#include "M4xVSS_API.h"
#include "M4xVSS_Internal.h"
#include "M4VFL_transition.h"
#include "VideoEditorTools.h"
#include "VideoEditorThumbnailMain.h"
#include "VideoEditorMain.h"

#include "OMX_IVCommon.h"
#include "mediaplayer.h"
#include <surfaceflinger/Surface.h>
#include <surfaceflinger/ISurface.h>
#include <surfaceflinger/ISurfaceComposer.h>
#include <surfaceflinger/SurfaceComposerClient.h>
#include <media/stagefright/MediaBuffer.h>
#include "PreviewRenderer.h"


#define NBPLAYER_INSTANCES 2

namespace android {

typedef enum {
    VePlayerIdle=0,
    VePlayerBusy,
    VePlayerAutoStop
} VePlayerState;

typedef enum {
    OVERLAY_UPDATE = 0,
    OVERLAY_CLEAR
} OverlayState;

// Callback mechanism from PreviewController to Jni  */
typedef void (*jni_progress_callback_fct)(void* cookie, M4OSA_UInt32 msgType, void *argc);

struct Surface;
struct PreviewRenderer;

class VideoEditorPreviewController {

public:
    VideoEditorPreviewController();
    virtual ~VideoEditorPreviewController();
    ~VideoEditorPreviewController();

    M4OSA_ERR loadEditSettings(M4VSS3GPP_EditSettings* pSettings,
    M4OSA_ERR loadEditSettings(
            M4VSS3GPP_EditSettings* pSettings,
            M4xVSS_AudioMixingSettings* bgmSettings);

    M4OSA_ERR setSurface(const sp<Surface>& surface);

    M4OSA_ERR startPreview(M4OSA_UInt32 fromMS, M4OSA_Int32 toMs,
        M4OSA_UInt16 callBackAfterFrameCount, M4OSA_Bool loop) ;
    M4OSA_ERR startPreview(
            M4OSA_UInt32 fromMS, M4OSA_Int32 toMs,
            M4OSA_UInt16 callBackAfterFrameCount,
            M4OSA_Bool loop) ;

    M4OSA_UInt32 stopPreview();

    M4OSA_ERR renderPreviewFrame(const sp<Surface> &surface,
    M4OSA_ERR renderPreviewFrame(
            const sp<Surface>& surface,
            VideoEditor_renderPreviewFrameStr* pFrameInfo,
            VideoEditorCurretEditInfo *pCurrEditInfo);

    M4OSA_ERR clearSurface(const sp<Surface> &surface,
    M4OSA_ERR clearSurface(
            const sp<Surface>& surface,
            VideoEditor_renderPreviewFrameStr* pFrameInfo);

    M4OSA_Void setJniCallback(void* cookie,
    M4OSA_Void setJniCallback(
            void* cookie,
            jni_progress_callback_fct callbackFct);

    status_t setPreviewFrameRenderingMode(M4xVSS_MediaRendering mode,
    status_t setPreviewFrameRenderingMode(
            M4xVSS_MediaRendering mode,
            M4VIDEOEDITING_VideoFrameSize outputVideoSize);

private:
    sp<VideoEditorPlayer> mVePlayer[NBPLAYER_INSTANCES];
    int mCurrentPlayer; //Instance of the player currently being used
    enum {
        kTotalNumPlayerInstances = 2,
        kPreviewThreadStackSize = 65536,
    };

    typedef enum {
        VePlayerIdle = 0,
        VePlayerBusy,
        VePlayerAutoStop
    } PlayerState;

    typedef enum {
        OVERLAY_UPDATE = 0,
        OVERLAY_CLEAR
    } OverlayState;

    sp<VideoEditorPlayer> mVePlayer[kTotalNumPlayerInstances];
    int mCurrentPlayer;  // player instance currently being used
    sp<Surface>  mSurface;
    mutable Mutex mLock;
    M4OSA_Context mThreadContext;
    VePlayerState mPlayerState;
    PlayerState mPlayerState;
    M4OSA_Bool    mPrepareReqest;
    M4VSS3GPP_ClipSettings **mClipList; //Pointer to an array of clip settings
    M4VSS3GPP_ClipSettings **mClipList;
    M4OSA_UInt32 mNumberClipsInStoryBoard;
    M4OSA_UInt32 mNumberClipsToPreview;
    M4OSA_UInt32 mStartingClipIndex;
@@ -137,22 +128,28 @@ private:
    M4VIFI_UInt8*  mFrameRGBBuffer;
    M4VIFI_UInt8*  mFrameYUVBuffer;
    mutable Mutex mLockSem;


    static M4OSA_ERR preparePlayer(void* param, int playerInstance, int index);
    static M4OSA_ERR threadProc(M4OSA_Void* param);
    static void notify(void* cookie, int msg, int ext1, int ext2);

    void setVideoEffectType(M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable);

    M4OSA_ERR applyVideoEffect(M4OSA_Void * dataPtr, M4OSA_UInt32 colorFormat,
    M4OSA_ERR applyVideoEffect(
            M4OSA_Void * dataPtr, M4OSA_UInt32 colorFormat,
            M4OSA_UInt32 videoWidth, M4OSA_UInt32 videoHeight,
            M4OSA_UInt32 timeMs, M4OSA_Void* outPtr);

    M4OSA_ERR doImageRenderingMode(M4OSA_Void * dataPtr,
    M4OSA_ERR doImageRenderingMode(
            M4OSA_Void * dataPtr,
            M4OSA_UInt32 colorFormat, M4OSA_UInt32 videoWidth,
            M4OSA_UInt32 videoHeight, M4OSA_Void* outPtr);

    // Don't call me!
    VideoEditorPreviewController(const VideoEditorPreviewController &);
    VideoEditorPreviewController &operator=(const VideoEditorPreviewController &);
    VideoEditorPreviewController &operator=(
            const VideoEditorPreviewController &);
};

}