Mock h264 stream.

This commit is contained in:
Fancy code 2024-06-19 10:18:53 +08:00
parent 79a55c01f6
commit ace3384905
6 changed files with 18 additions and 14 deletions

View File

@ -43,12 +43,6 @@ add_custom_target(
-p ${PLATFORM_PATH}/cmake-shell -p ${PLATFORM_PATH}/cmake-shell
WORKING_DIRECTORY ${APPLICATION_SOURCE_PATH}/HuntingCamera WORKING_DIRECTORY ${APPLICATION_SOURCE_PATH}/HuntingCamera
) )
add_custom_command(
TARGET ${TARGET_NAME}
PRE_BUILD
COMMAND make HuntingCamera_code_check
WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/
)
file(GLOB_RECURSE HEADER_FILES *.h) file(GLOB_RECURSE HEADER_FILES *.h)
add_custom_target( add_custom_target(
HuntingCamera_code_format HuntingCamera_code_format

View File

@ -14,6 +14,7 @@
*/ */
#include "CameraHal.h" #include "CameraHal.h"
#include "IHalCpp.h" #include "IHalCpp.h"
#include "ILog.h"
#include "StatusCode.h" #include "StatusCode.h"
CameraHal::CameraHal() : mTaskRuning(false), mAudioStreamCallback(nullptr), mVideoStreamCallback(nullptr) CameraHal::CameraHal() : mTaskRuning(false), mAudioStreamCallback(nullptr), mVideoStreamCallback(nullptr)
{ {
@ -26,6 +27,7 @@ void CameraHal::UnInit(void)
} }
StatusCode CameraHal::StartSingleTask(const CameraTaskParam &param) StatusCode CameraHal::StartSingleTask(const CameraTaskParam &param)
{ {
LogInfo("StartSingleTask.\n");
mTaskRuning = true; mTaskRuning = true;
return CreateStatusCode(STATUS_CODE_OK); return CreateStatusCode(STATUS_CODE_OK);
} }

View File

@ -39,7 +39,7 @@ void SaveStream::UnInit(void)
void SaveStream::GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp) void SaveStream::GetVideoStream(const void *stream, const unsigned int &length, const unsigned long long &timeStamp)
{ {
if (mFileVideo) { if (mFileVideo) {
LogInfo("ddddddddddddddddddddddddddddddddddddddGet video stream, length: %d\n", length); // LogInfo("Get video stream, length: %d\n", length);
size_t writeLength = fwrite(stream, 1, length, mFileVideo); size_t writeLength = fwrite(stream, 1, length, mFileVideo);
if (writeLength != length) { if (writeLength != length) {
LogError("Write video stream failed.\n"); LogError("Write video stream failed.\n");

View File

@ -27,6 +27,7 @@ void CameraHalTest::Init(void)
CameraHal::Init(); CameraHal::Init();
if (nullptr == mReadH264File) { if (nullptr == mReadH264File) {
ReadVideoFileCallback callback = [](const void *stream, const unsigned int length, void *context) -> void { ReadVideoFileCallback callback = [](const void *stream, const unsigned int length, void *context) -> void {
// LogInfo("CameraHalTest::ReadVideoFileCallback.\n");
((CameraHalTest *)context)->ReadDataFromH264File(stream, length); ((CameraHalTest *)context)->ReadDataFromH264File(stream, length);
}; };
mReadH264File = ICreateMediaBase(MEDIA_HANDLE_TYPE_READ_H264); mReadH264File = ICreateMediaBase(MEDIA_HANDLE_TYPE_READ_H264);
@ -41,13 +42,10 @@ void CameraHalTest::UnInit(void)
if (mTaskTimerThread.joinable()) { if (mTaskTimerThread.joinable()) {
mTaskTimerThread.join(); mTaskTimerThread.join();
} }
LogInfo(
"====================================================================9999999999999999999999 000000000000000\n");
if (mReadH264File) { if (mReadH264File) {
ISetReadVideoCallback(mReadH264File, nullptr, nullptr); ISetReadVideoCallback(mReadH264File, nullptr, nullptr);
IStopReadFile(mReadH264File); IStopReadFile(mReadH264File);
IMediaBaseFree(mReadH264File); IMediaBaseFree(mReadH264File);
LogInfo("====================================================================9999999999999999999999\n");
mReadH264File = nullptr; mReadH264File = nullptr;
} }
} }

View File

@ -345,7 +345,7 @@ void HalTestTool::InitCamerasMock(std::shared_ptr<VCameraHal> &vMock)
EXPECT_CALL(*mock.get(), SetCameraMonitorTrace(_)).Times(USER_SHOULD_SET_CAMERA_MONITER); EXPECT_CALL(*mock.get(), SetCameraMonitorTrace(_)).Times(USER_SHOULD_SET_CAMERA_MONITER);
EXPECT_CALL(*mock.get(), StartSingleTaskTrace(_)) EXPECT_CALL(*mock.get(), StartSingleTaskTrace(_))
.Times(AnyNumber()) .Times(AnyNumber())
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_OK)))); .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
} }
void HalTestTool::MockSdCardRemove(std::shared_ptr<LinuxTest> &mock) void HalTestTool::MockSdCardRemove(std::shared_ptr<LinuxTest> &mock)
{ {

View File

@ -92,24 +92,34 @@ void MediaBaseImpl::UnInitFfmpeg(void)
void MediaBaseImpl::ReadFileThread(AVFormatContext *pFormatCtx, int video_stream_index) void MediaBaseImpl::ReadFileThread(AVFormatContext *pFormatCtx, int video_stream_index)
{ {
mTaskRuning = true; mTaskRuning = true;
if (nullptr == mReadVideoCallback) {
LogWarning("ReadVideoCallback is null.\n");
}
AVPacket packet; AVPacket packet;
unsigned int playTimeMs = 0;
// av_new_packet(&packet, AV_INPUT_BUFFER_MIN_SIZE); // av_new_packet(&packet, AV_INPUT_BUFFER_MIN_SIZE);
while (av_read_frame(pFormatCtx, &packet) >= 0) { while (av_read_frame(pFormatCtx, &packet) >= 0) {
if (nullptr == mReadVideoCallback) { if (nullptr == mReadVideoCallback) {
av_packet_unref(&packet);
continue; continue;
} }
if (false == mTaskRuning) { if (false == mTaskRuning) {
LogInfo("Stop read file thread.\n");
break; break;
} }
// 检查数据包是否属于视频流 // Checks whether the packet belongs to a video stream.
if (packet.stream_index == video_stream_index) { if (packet.stream_index == video_stream_index) {
playTimeMs = (packet.duration * pFormatCtx->streams[video_stream_index]->time_base.num * 1000) /
pFormatCtx->streams[video_stream_index]->time_base.den;
LogInfo("Play time ms:%d\n", playTimeMs);
// LogInfo("Frame data address: %p, length: %zu\n", packet.data, packet.size); // LogInfo("Frame data address: %p, length: %zu\n", packet.data, packet.size);
mReadVideoCallback(packet.data, packet.size, mReadVideoCallbackContext); mReadVideoCallback(packet.data, packet.size, mReadVideoCallbackContext);
std::this_thread::sleep_for(std::chrono::milliseconds(playTimeMs));
} }
// 释放数据包 // Release the data packet.
av_packet_unref(&packet); av_packet_unref(&packet);
} }
av_packet_unref(&packet);
avformat_close_input(&pFormatCtx); avformat_close_input(&pFormatCtx);
LogInfo("==============================================================================\n");
} }