Improve:MediaBase module.
This commit is contained in:
		
							parent
							
								
									cf7ac85f1f
								
							
						
					
					
						commit
						9ccc38c9e7
					
				| 
						 | 
				
			
			@ -66,7 +66,13 @@ bool MediaHandleState::MediaTaskFinishedHandle(VStateMachineData *msg)
 | 
			
		|||
    LogInfo("response files = %d.\n", data->mData.mResponse.size());
 | 
			
		||||
    std::vector<SyncFileInfo> files;
 | 
			
		||||
    for (auto &response : data->mData.mResponse) {
 | 
			
		||||
        SyncFileInfo file(data->mData.mSerialNumber, response.mFileName, 0, 0, 0, FileCreateType::END, FileStatus::END);
 | 
			
		||||
        SyncFileInfo file(data->mData.mSerialNumber,
 | 
			
		||||
                          response.mFileName,
 | 
			
		||||
                          0,
 | 
			
		||||
                          response.mDuration_ms,
 | 
			
		||||
                          0,
 | 
			
		||||
                          FileCreateType::MANUAL_TEST,
 | 
			
		||||
                          FileStatus::FINISHED_RECORD);
 | 
			
		||||
        files.push_back(file);
 | 
			
		||||
    }
 | 
			
		||||
    IFilesManager::GetInstance()->SaveFiles(files);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,8 +47,9 @@ typedef struct media_report_event
 | 
			
		|||
} MediaReportEvent;
 | 
			
		||||
typedef struct media_task_response
 | 
			
		||||
{
 | 
			
		||||
    media_task_response(const std::string &fileName);
 | 
			
		||||
    media_task_response(const std::string &fileName, const unsigned int &duration_ms);
 | 
			
		||||
    const std::string mFileName;
 | 
			
		||||
    const unsigned int mDuration_ms;
 | 
			
		||||
} MediaTaskResponse;
 | 
			
		||||
class VMediaTask
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,8 @@ media_report_event::media_report_event(const std::string &fileName, const MediaC
 | 
			
		|||
    : mFileName(fileName), mMediaChannedl(mediaChannedl)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
media_task_response::media_task_response(const std::string &fileName) : mFileName(fileName)
 | 
			
		||||
media_task_response::media_task_response(const std::string &fileName, const unsigned int &duration_ms)
 | 
			
		||||
    : mFileName(fileName), mDuration_ms(duration_ms)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
const MediaTaskType VMediaTask::GetTaskType(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,7 @@
 | 
			
		|||
#include <cstring>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <mutex>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <utility>
 | 
			
		||||
#include <vector>
 | 
			
		||||
| 
						 | 
				
			
			@ -37,8 +38,14 @@ StatusCode RecordMp4::Init(void)
 | 
			
		|||
        return CreateStatusCode(STATUS_CODE_NOT_OK);
 | 
			
		||||
    }
 | 
			
		||||
    std::string videoPath = mRecordTask->GetTargetNameForSaving();
 | 
			
		||||
    OutputFileInfo fileInfo = {
 | 
			
		||||
        .mFileName = videoPath.c_str(), .mDuration_ms = 5000, .mFinished = &mIsRecordingFinished};
 | 
			
		||||
    OutputFileInfo fileInfo = {.mDuration_ms = 5000, .mFinished = &mIsRecordingFinished};
 | 
			
		||||
    if (OUTPUT_FILE_NAME_MAX >= videoPath.size()) {
 | 
			
		||||
        memcpy(fileInfo.mFileName, videoPath.c_str(), videoPath.size());
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        LogError("VideoPath is too long.\n");
 | 
			
		||||
        return CreateStatusCode(STATUS_CODE_NOT_OK);
 | 
			
		||||
    }
 | 
			
		||||
    StatusCode code = IOpenOutputFile(mRecordMp4Object, &fileInfo);
 | 
			
		||||
    if (!IsCodeOK(code)) {
 | 
			
		||||
        LogError("OpenOutputFile failed.\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -57,13 +64,14 @@ void RecordMp4::StopHandleStream(void)
 | 
			
		|||
{
 | 
			
		||||
    std::lock_guard<std::mutex> locker(mMutex);
 | 
			
		||||
    if (mRecordMp4Object) {
 | 
			
		||||
        OutputFileInfo finalFile = IGetOutputFileInfo(mRecordMp4Object);
 | 
			
		||||
        MediaTaskResponse response(finalFile.mFileName, finalFile.mDuration_ms);
 | 
			
		||||
        mTaskResponse.push_back(response);
 | 
			
		||||
        ICloseOutputFile(mRecordMp4Object);
 | 
			
		||||
        IMediaBaseFree(mRecordMp4Object);
 | 
			
		||||
        mRecordMp4Object = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
    std::string videoPath = mRecordTask->GetTargetNameForSaving();
 | 
			
		||||
    MediaTaskResponse response(videoPath.c_str());
 | 
			
		||||
    mTaskResponse.push_back(response);
 | 
			
		||||
    // std::string videoPath = mRecordTask->GetTargetNameForSaving();
 | 
			
		||||
}
 | 
			
		||||
void RecordMp4::GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,11 +48,12 @@ enum OutputFileStatus
 | 
			
		|||
    OUTPUT_FILE_STATUS_FINISHED,
 | 
			
		||||
    OUTPUT_FILE_STATUS_END
 | 
			
		||||
};
 | 
			
		||||
#define OUTPUT_FILE_NAME_MAX 256
 | 
			
		||||
typedef struct output_file_info
 | 
			
		||||
{
 | 
			
		||||
    const char *mFileName;           ///< Name of the output file. Must be an absolute path.
 | 
			
		||||
    const unsigned int mDuration_ms; ///< Duration of the output file in milliseconds.
 | 
			
		||||
    int *const mFinished;            ///< Whether the output file is finished. See OutputFileStatus.
 | 
			
		||||
    char mFileName[OUTPUT_FILE_NAME_MAX]; ///< Name of the output file. Must be an absolute path.
 | 
			
		||||
    const unsigned int mDuration_ms;      ///< Duration of the output file in milliseconds.
 | 
			
		||||
    int *const mFinished;                 ///< Whether the output file is finished. See OutputFileStatus.
 | 
			
		||||
} OutputFileInfo;
 | 
			
		||||
typedef void (*ReadVideoFileCallback)(const void *, const unsigned int, const unsigned long long, void *);
 | 
			
		||||
typedef void (*ReadAudioFileCallback)(const void *, const unsigned int, const unsigned long long, void *);
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +69,7 @@ StatusCode IStopReadFile(void *object);
 | 
			
		|||
StatusCode IOpenOutputFile(void *object, const OutputFileInfo *info);
 | 
			
		||||
StatusCode ICloseOutputFile(void *object);
 | 
			
		||||
void IGetStreamData(void *object, const void *data, const size_t size, const StreamInfo streamInfo);
 | 
			
		||||
OutputFileInfo IGetOutputFileInfo(void *object);
 | 
			
		||||
 | 
			
		||||
void IMediaBaseFree(void *object);
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@ extern "C" {
 | 
			
		|||
#include <functional>
 | 
			
		||||
#include <memory>
 | 
			
		||||
// #include <mutex>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <string>
 | 
			
		||||
constexpr unsigned long long MUXING_NOT_START = 0;
 | 
			
		||||
FfmpegMuxStreamV2::FfmpegMuxStreamV2()
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +96,13 @@ void FfmpegMuxStreamV2::GetStreamData(const void *data, const size_t &size, cons
 | 
			
		|||
        mAudioStream->WriteSourceData(data, size, streamInfo.mTimeStamp_us);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
OutputFileInfo FfmpegMuxStreamV2::GetOutputFileInfo(void)
 | 
			
		||||
{
 | 
			
		||||
    OutputFileInfo finalFile = {.mDuration_ms = static_cast<unsigned int>(mFileMuxingDuration_us / 1000),
 | 
			
		||||
                                .mFinished = nullptr};
 | 
			
		||||
    memcpy(finalFile.mFileName, mOutputFileInfo->mFileName, OUTPUT_FILE_NAME_MAX);
 | 
			
		||||
    return finalFile;
 | 
			
		||||
}
 | 
			
		||||
StatusCode inline FfmpegMuxStreamV2::OpenMuxOutputFile(const std::string &fileName)
 | 
			
		||||
{
 | 
			
		||||
    AVDictionary *opt = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,7 @@ public: // About combine file.
 | 
			
		|||
    StatusCode OpenOutputFile(const OutputFileInfo &fileInfo) override;
 | 
			
		||||
    StatusCode CloseOutputFile(void) override;
 | 
			
		||||
    void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo) override;
 | 
			
		||||
    OutputFileInfo GetOutputFileInfo(void) override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    StatusCode OpenMuxOutputFile(const std::string &fileName);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,12 @@ StatusCode IMediaBase::CloseOutputFile(void)
 | 
			
		|||
void IMediaBase::GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
OutputFileInfo IMediaBase::GetOutputFileInfo(void)
 | 
			
		||||
{
 | 
			
		||||
    LogWarning("STATUS_CODE_VIRTUAL_FUNCTION\n");
 | 
			
		||||
    OutputFileInfo info = {.mFileName = {0}, .mDuration_ms = 0, .mFinished = nullptr};
 | 
			
		||||
    return info;
 | 
			
		||||
}
 | 
			
		||||
static const char *MEDIA_BASE_NAME = "media_adapter";
 | 
			
		||||
const char *GetMediaBaseModuleName(void)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ public: // About combine file.
 | 
			
		|||
    virtual StatusCode OpenOutputFile(const OutputFileInfo &fileInfo);
 | 
			
		||||
    virtual StatusCode CloseOutputFile(void);
 | 
			
		||||
    virtual void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo);
 | 
			
		||||
    virtual OutputFileInfo GetOutputFileInfo(void);
 | 
			
		||||
};
 | 
			
		||||
typedef struct media_base_header
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,6 +84,14 @@ void IGetStreamData(void *object, const void *data, const size_t size, const Str
 | 
			
		|||
        (*(std::shared_ptr<IMediaBase> *)object)->GetStreamData(data, size, streamInfo);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
OutputFileInfo IGetOutputFileInfo(void *object)
 | 
			
		||||
{
 | 
			
		||||
    if (ObjectCheck(object) == true) {
 | 
			
		||||
        return (*(std::shared_ptr<IMediaBase> *)object)->GetOutputFileInfo();
 | 
			
		||||
    }
 | 
			
		||||
    OutputFileInfo info = {.mFileName = {0}, .mDuration_ms = 0, .mFinished = nullptr};
 | 
			
		||||
    return info;
 | 
			
		||||
}
 | 
			
		||||
void IMediaBaseFree(void *object)
 | 
			
		||||
{
 | 
			
		||||
    if (ObjectCheck(object) == true) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user