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());
|
LogInfo("response files = %d.\n", data->mData.mResponse.size());
|
||||||
std::vector<SyncFileInfo> files;
|
std::vector<SyncFileInfo> files;
|
||||||
for (auto &response : data->mData.mResponse) {
|
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);
|
files.push_back(file);
|
||||||
}
|
}
|
||||||
IFilesManager::GetInstance()->SaveFiles(files);
|
IFilesManager::GetInstance()->SaveFiles(files);
|
||||||
|
|
|
@ -47,8 +47,9 @@ typedef struct media_report_event
|
||||||
} MediaReportEvent;
|
} MediaReportEvent;
|
||||||
typedef struct media_task_response
|
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 std::string mFileName;
|
||||||
|
const unsigned int mDuration_ms;
|
||||||
} MediaTaskResponse;
|
} MediaTaskResponse;
|
||||||
class VMediaTask
|
class VMediaTask
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,8 @@ media_report_event::media_report_event(const std::string &fileName, const MediaC
|
||||||
: mFileName(fileName), mMediaChannedl(mediaChannedl)
|
: 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)
|
const MediaTaskType VMediaTask::GetTaskType(void)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <string.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -37,8 +38,14 @@ StatusCode RecordMp4::Init(void)
|
||||||
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||||
}
|
}
|
||||||
std::string videoPath = mRecordTask->GetTargetNameForSaving();
|
std::string videoPath = mRecordTask->GetTargetNameForSaving();
|
||||||
OutputFileInfo fileInfo = {
|
OutputFileInfo fileInfo = {.mDuration_ms = 5000, .mFinished = &mIsRecordingFinished};
|
||||||
.mFileName = videoPath.c_str(), .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);
|
StatusCode code = IOpenOutputFile(mRecordMp4Object, &fileInfo);
|
||||||
if (!IsCodeOK(code)) {
|
if (!IsCodeOK(code)) {
|
||||||
LogError("OpenOutputFile failed.\n");
|
LogError("OpenOutputFile failed.\n");
|
||||||
|
@ -57,13 +64,14 @@ void RecordMp4::StopHandleStream(void)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> locker(mMutex);
|
std::lock_guard<std::mutex> locker(mMutex);
|
||||||
if (mRecordMp4Object) {
|
if (mRecordMp4Object) {
|
||||||
|
OutputFileInfo finalFile = IGetOutputFileInfo(mRecordMp4Object);
|
||||||
|
MediaTaskResponse response(finalFile.mFileName, finalFile.mDuration_ms);
|
||||||
|
mTaskResponse.push_back(response);
|
||||||
ICloseOutputFile(mRecordMp4Object);
|
ICloseOutputFile(mRecordMp4Object);
|
||||||
IMediaBaseFree(mRecordMp4Object);
|
IMediaBaseFree(mRecordMp4Object);
|
||||||
mRecordMp4Object = nullptr;
|
mRecordMp4Object = nullptr;
|
||||||
}
|
}
|
||||||
std::string videoPath = mRecordTask->GetTargetNameForSaving();
|
// std::string videoPath = mRecordTask->GetTargetNameForSaving();
|
||||||
MediaTaskResponse response(videoPath.c_str());
|
|
||||||
mTaskResponse.push_back(response);
|
|
||||||
}
|
}
|
||||||
void RecordMp4::GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp)
|
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_FINISHED,
|
||||||
OUTPUT_FILE_STATUS_END
|
OUTPUT_FILE_STATUS_END
|
||||||
};
|
};
|
||||||
|
#define OUTPUT_FILE_NAME_MAX 256
|
||||||
typedef struct output_file_info
|
typedef struct output_file_info
|
||||||
{
|
{
|
||||||
const char *mFileName; ///< Name of the output file. Must be an absolute path.
|
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.
|
const unsigned int mDuration_ms; ///< Duration of the output file in milliseconds.
|
||||||
int *const mFinished; ///< Whether the output file is finished. See OutputFileStatus.
|
int *const mFinished; ///< Whether the output file is finished. See OutputFileStatus.
|
||||||
} OutputFileInfo;
|
} OutputFileInfo;
|
||||||
typedef void (*ReadVideoFileCallback)(const void *, const unsigned int, const unsigned long long, void *);
|
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 *);
|
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 IOpenOutputFile(void *object, const OutputFileInfo *info);
|
||||||
StatusCode ICloseOutputFile(void *object);
|
StatusCode ICloseOutputFile(void *object);
|
||||||
void IGetStreamData(void *object, const void *data, const size_t size, const StreamInfo streamInfo);
|
void IGetStreamData(void *object, const void *data, const size_t size, const StreamInfo streamInfo);
|
||||||
|
OutputFileInfo IGetOutputFileInfo(void *object);
|
||||||
|
|
||||||
void IMediaBaseFree(void *object);
|
void IMediaBaseFree(void *object);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -34,6 +34,7 @@ extern "C" {
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
// #include <mutex>
|
// #include <mutex>
|
||||||
|
#include <string.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
constexpr unsigned long long MUXING_NOT_START = 0;
|
constexpr unsigned long long MUXING_NOT_START = 0;
|
||||||
FfmpegMuxStreamV2::FfmpegMuxStreamV2()
|
FfmpegMuxStreamV2::FfmpegMuxStreamV2()
|
||||||
|
@ -95,6 +96,13 @@ void FfmpegMuxStreamV2::GetStreamData(const void *data, const size_t &size, cons
|
||||||
mAudioStream->WriteSourceData(data, size, streamInfo.mTimeStamp_us);
|
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)
|
StatusCode inline FfmpegMuxStreamV2::OpenMuxOutputFile(const std::string &fileName)
|
||||||
{
|
{
|
||||||
AVDictionary *opt = nullptr;
|
AVDictionary *opt = nullptr;
|
||||||
|
|
|
@ -48,6 +48,7 @@ public: // About combine file.
|
||||||
StatusCode OpenOutputFile(const OutputFileInfo &fileInfo) override;
|
StatusCode OpenOutputFile(const OutputFileInfo &fileInfo) override;
|
||||||
StatusCode CloseOutputFile(void) override;
|
StatusCode CloseOutputFile(void) override;
|
||||||
void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo) override;
|
void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo) override;
|
||||||
|
OutputFileInfo GetOutputFileInfo(void) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StatusCode OpenMuxOutputFile(const std::string &fileName);
|
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)
|
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";
|
static const char *MEDIA_BASE_NAME = "media_adapter";
|
||||||
const char *GetMediaBaseModuleName(void)
|
const char *GetMediaBaseModuleName(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,6 +32,7 @@ public: // About combine file.
|
||||||
virtual StatusCode OpenOutputFile(const OutputFileInfo &fileInfo);
|
virtual StatusCode OpenOutputFile(const OutputFileInfo &fileInfo);
|
||||||
virtual StatusCode CloseOutputFile(void);
|
virtual StatusCode CloseOutputFile(void);
|
||||||
virtual void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo);
|
virtual void GetStreamData(const void *data, const size_t &size, const StreamInfo &streamInfo);
|
||||||
|
virtual OutputFileInfo GetOutputFileInfo(void);
|
||||||
};
|
};
|
||||||
typedef struct media_base_header
|
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);
|
(*(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)
|
void IMediaBaseFree(void *object)
|
||||||
{
|
{
|
||||||
if (ObjectCheck(object) == true) {
|
if (ObjectCheck(object) == true) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user