From f5366a4bcf80e373a29921eaa9b5f3411d424b30 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Sat, 20 Jul 2024 16:17:31 +0800 Subject: [PATCH] Record chip stream data. --- application/MissionManager/src/MediaTask.cpp | 1 + hal/src/CameraHal.cpp | 30 +++++++++++++++++++- hal/src/CameraHal.h | 12 ++++++++ middleware/MediaManager/src/MediaHandle.cpp | 2 +- 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/application/MissionManager/src/MediaTask.cpp b/application/MissionManager/src/MediaTask.cpp index 7194155..c6a3e7c 100644 --- a/application/MissionManager/src/MediaTask.cpp +++ b/application/MissionManager/src/MediaTask.cpp @@ -78,6 +78,7 @@ std::string MediaTask::GetThumbnailNameForSaving(const std::string &targetName) } int MediaTask::GetVideoDuration_ms(void) { + return 1000 * 60; return DEFAULT_VIDEO_DURATION_MS; } void MediaTask::Response(const std::vector &response) diff --git a/hal/src/CameraHal.cpp b/hal/src/CameraHal.cpp index c5ae1c7..ea6257e 100644 --- a/hal/src/CameraHal.cpp +++ b/hal/src/CameraHal.cpp @@ -15,8 +15,12 @@ #include "CameraHal.h" #include "IHalCpp.h" #include "ILog.h" +#include "LinuxApi.h" #include "StatusCode.h" -CameraHal::CameraHal() : mTaskRuning(false), mAudioStreamCallback(nullptr), mVideoStreamCallback(nullptr) +#include +CameraHal::CameraHal() + : mTaskRuning(false), mAudioStreamCallback(nullptr), mVideoStreamCallback(nullptr), mVideoFile(nullptr), + mAudioFile(nullptr) { } void CameraHal::Init(void) @@ -29,11 +33,24 @@ StatusCode CameraHal::StartSingleTask(const CameraTaskParam ¶m) { LogInfo("StartSingleTask.\n"); mTaskRuning = true; + fx_system_v2("rm -f " SD_CARD_MOUNT_PATH "/chip.g711a"); + fx_system_v2("rm -f " SD_CARD_MOUNT_PATH "/chip.h264"); + mAudioFile = fopen(SD_CARD_MOUNT_PATH "/chip.g711a", "a+"); + mVideoFile = fopen(SD_CARD_MOUNT_PATH "/chip.h264", "a+"); return CreateStatusCode(STATUS_CODE_OK); } StatusCode CameraHal::StopTask(void) { mTaskRuning = false; + if (mAudioFile) { + fclose(mAudioFile); + mAudioFile = nullptr; + } + if (mVideoFile) { + fclose(mVideoFile); + mVideoFile = nullptr; + } + fx_system_v2("sync"); return CreateStatusCode(STATUS_CODE_OK); } StatusCode CameraHal::SetAudioStreamCallback(AudioStreamCallback callback) @@ -49,12 +66,23 @@ StatusCode CameraHal::SetVideoStreamCallback(VideoStreamCallback callback) void CameraHal::GetAudioStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp) { if (mTaskRuning && nullptr != mAudioStreamCallback) { + SaveChipStream(ChipStreamType::AUDIO, stream, length); mAudioStreamCallback(stream, length, timeStamp); } } void CameraHal::GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp) { if (mTaskRuning && nullptr != mVideoStreamCallback) { + SaveChipStream(ChipStreamType::VIDEO, stream, length); mVideoStreamCallback(stream, length, timeStamp); } +} +void CameraHal::SaveChipStream(const ChipStreamType &streamType, const void *stream, const unsigned int &length) +{ + FILE *file = nullptr; + file = streamType == ChipStreamType::AUDIO ? mAudioFile : mVideoFile; + if (file) { + fwrite(stream, 1, length, file); + fflush(file); + } } \ No newline at end of file diff --git a/hal/src/CameraHal.h b/hal/src/CameraHal.h index 1ab18c0..bea9561 100644 --- a/hal/src/CameraHal.h +++ b/hal/src/CameraHal.h @@ -18,6 +18,12 @@ #include #include constexpr unsigned int NO_MEDIA_RECORDING = -1; +enum class ChipStreamType +{ + VIDEO = 0, + AUDIO, + END +}; class CameraHal : public VCameraHal, public std::enable_shared_from_this { public: @@ -35,11 +41,17 @@ protected: protected: void GetAudioStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp); void GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp); + void SaveChipStream(const ChipStreamType &streamType, const void *stream, const unsigned int &length); private: // std::mutex mMutex; bool mTaskRuning; AudioStreamCallback mAudioStreamCallback; VideoStreamCallback mVideoStreamCallback; + /** + * @brief Each time a media task is executed, the original data stream of the chip is saved to the SD card. + */ + FILE *mVideoFile; ///< The original video stream data is saved. + FILE *mAudioFile; ///< The original audio stream data is saved. }; #endif \ No newline at end of file diff --git a/middleware/MediaManager/src/MediaHandle.cpp b/middleware/MediaManager/src/MediaHandle.cpp index ce1850a..957896b 100644 --- a/middleware/MediaManager/src/MediaHandle.cpp +++ b/middleware/MediaManager/src/MediaHandle.cpp @@ -126,7 +126,7 @@ void MediaHandle::StartTaskTimer(void) } void MediaHandle::TaskTimer(void) { - constexpr int TASK_TIME_OUT = 1000 * 10; + constexpr int TASK_TIME_OUT = 1000 * 60; mTaskRuning = true; while (mTaskRuning) { std::unique_lock lock(mMutex);