RecordVideo.c 2.1 KB

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

FILE *FrameDeal_RecordVideo_fp = NULL;
static int FrameDeal_RecordVideo_mode = JZ_FLAGCODE_OFF;

extern int VideoTranscode_Flag ; //视频转码标志位,off为转码完毕,on为转码完成

/*

        录像部分

*/

// 录像函数
static void FrameDeal_RecordVideo(char* h264_data, uint32_t data_len)
{
    fwrite(h264_data, data_len, 1, FrameDeal_RecordVideo_fp);
    //JZSDK_LOG_INFO("写入一帧");
}

//录像模式传递函数
T_JZsdkReturnCode FrameDeal_RecordVideo_trans(int mode) 
{
    JZSDK_LOG_INFO("录像传递函数被调用");

    //如果传来一个开始录像的指令,且当前没有打开录像, 且没在进行转码
    if( mode == JZ_FLAGCODE_ON && FrameDeal_RecordVideo_mode == JZ_FLAGCODE_OFF && VideoTranscode_Flag == JZ_FLAGCODE_OFF)
    {
        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;
        }
        
        FrameDeal_RecordVideo_mode = JZ_FLAGCODE_ON;
        JZSDK_LOG_INFO("录像文件已经打开");
        
    }

    else if(mode == JZ_FLAGCODE_OFF && FrameDeal_RecordVideo_mode == JZ_FLAGCODE_ON)
    {
        //关闭录像的文件
        JZSDK_LOG_INFO("录像已保存");
        fclose(FrameDeal_RecordVideo_fp);

        //转码
        //录像转码解锁函数
        ffmpeg_H264_tanscodeto(2);
        
        //关闭录像
        FrameDeal_RecordVideo_mode = JZ_FLAGCODE_OFF;
    }

    else
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}


int V4L2_RecordVedioDeal(char *h264_data, int dataLen)
{
    
    if(FrameDeal_RecordVideo_mode == JZ_FLAGCODE_OFF)
    {
        return -1;
    }

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