RecordVideo.c 4.3 KB

#include <stdio.h>
#include "../CameraParameter.h"
#include "../V4L2/V4L2_Record.h"
#include "JZsdkLib.h"
#include "../VideoTranscode/VideoTranscode.h"
#include "../Camera_InAndOut.h"

FILE *FrameDeal_RecordVideo_fp = NULL;

extern int g_CameraStatus;

/*

        录像部分

*/
//录像模式传递函数
static T_JZsdkReturnCode FrameDeal_RecordVideo_trans(int mode) 
{
    //如果传入的是录像开始
    if (mode == JZ_FLAGCODE_ON)
    {
        //如果相机处于空闲状态
        if (g_CameraStatus == CAMERA_IDLE)
        {
            //则为开启录像
            FrameDeal_RecordVideo_fp = fopen("/root/sdcard/DCIM/Videos/temp.h264","wb");
            if (FrameDeal_RecordVideo_fp == NULL)
            {
                JZSDK_LOG_ERROR("录像文件打开错误");
                return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
            }
            
            g_CameraStatus = CAMERA_RECORD;
            JZSDK_LOG_INFO("录像模式已开启");
        }

        //如果处于录像中
        else if (g_CameraStatus == CAMERA_RECORD)
        {
            JZSDK_LOG_ERROR("相机已经处于录像中,请勿重复打开录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        //如果处于拍摄中
        else if (g_CameraStatus == CAMERA_SHOOTPHOTO)
        {
            JZSDK_LOG_ERROR("相机已经处于单拍中,请勿重复打开录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        //如果处于拍摄中
        else if (g_CameraStatus == CAMERA_BRUSTSHOORPHOTO)
        {
            JZSDK_LOG_ERROR("相机已经处于连拍中,请勿重复打开录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        //如果处于转码中
        else if (g_CameraStatus == CAMERA_BRUSTSHOORPHOTO)
        {
            JZSDK_LOG_ERROR("相机已经处于转码中,请勿重复打开录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }
    }
    //如果传入的是录像关闭
    else if(mode == JZ_FLAGCODE_OFF)
    {
        //如果相机处于空闲状态
        if (g_CameraStatus == CAMERA_IDLE)
        {
            JZSDK_LOG_ERROR("相机空闲中,无法关闭录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        //如果处于录像中
        else if (g_CameraStatus == CAMERA_RECORD)
        {
            //关闭录像的文件
            fclose(FrameDeal_RecordVideo_fp);
            JZSDK_LOG_INFO("录像已保存");

            //转码
            //录像转码解锁函数
            Video_TansCode_Trans(VIDEO_TRANSCODE, 0);
        }

        //如果处于拍摄中
        else if (g_CameraStatus == CAMERA_SHOOTPHOTO)
        {
            JZSDK_LOG_ERROR("相机已经处于单拍中,无法关闭录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        //如果处于连拍中
        else if (g_CameraStatus == CAMERA_BRUSTSHOORPHOTO)
        {
            JZSDK_LOG_ERROR("相机已经处于连拍中,无法关闭录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        //如果处于转码中
        else if (g_CameraStatus == CAMERA_TRANSCODE)
        {
            JZSDK_LOG_ERROR("相机已经处于转码中,无法关闭录像功能");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }
    }
    //传入的是其他参数
    else
    {
        JZSDK_LOG_ERROR("错误的录像开关状态");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}


int V4L2_RecordVedioDeal(char *h264_data, int dataLen)
{
    if(g_CameraStatus != CAMERA_RECORD)
    {
        return -1;
    }

    //如果录像模式被打开,存入数据进临时h264文件

    //录像函数
    fwrite(h264_data, dataLen, 1, FrameDeal_RecordVideo_fp);
    //JZSDK_LOG_INFO("录入一帧");
}


/**************
 * 
 *  相机功能 录制功能传递函数    
 *  1开启录制 0关闭录制并进行转码
 * 
 * ************/
T_JZsdkReturnCode CameraFeatures_VideoRecord_SetMode(int mode)
{
    return FrameDeal_RecordVideo_trans(mode);
}