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