Fixed:use after free.
This commit is contained in:
parent
e038e2a9ff
commit
4c6cf898cf
|
@ -122,7 +122,7 @@ void MediaHandle::StartTaskTimer(void)
|
||||||
}
|
}
|
||||||
void MediaHandle::TaskTimer(void)
|
void MediaHandle::TaskTimer(void)
|
||||||
{
|
{
|
||||||
constexpr int TASK_TIME_OUT = 1000 * 20;
|
constexpr int TASK_TIME_OUT = 1000 * 10;
|
||||||
mTaskRuning = true;
|
mTaskRuning = true;
|
||||||
while (mTaskRuning) {
|
while (mTaskRuning) {
|
||||||
std::unique_lock<std::mutex> lock(mMutex);
|
std::unique_lock<std::mutex> lock(mMutex);
|
||||||
|
@ -141,8 +141,8 @@ void MediaHandle::TaskTimer(void)
|
||||||
if (mCameraHal) {
|
if (mCameraHal) {
|
||||||
mCameraHal->StopTask();
|
mCameraHal->StopTask();
|
||||||
}
|
}
|
||||||
mStreamHandle.reset();
|
|
||||||
mMutex.lock();
|
mMutex.lock();
|
||||||
|
mStreamHandle.reset();
|
||||||
mFirstFrameTimeStamp = MEDIA_TASK_NOT_START;
|
mFirstFrameTimeStamp = MEDIA_TASK_NOT_START;
|
||||||
auto runingTask = mCurrentTask.lock();
|
auto runingTask = mCurrentTask.lock();
|
||||||
if (mCurrentTask.expired()) {
|
if (mCurrentTask.expired()) {
|
||||||
|
@ -172,6 +172,14 @@ void MediaHandle::FrameHandle(void)
|
||||||
mCvFrameHandle.wait_for(lock, std::chrono::milliseconds(TASK_TIMER), [&] {
|
mCvFrameHandle.wait_for(lock, std::chrono::milliseconds(TASK_TIMER), [&] {
|
||||||
return !mTaskRuning || !mFrameList.empty();
|
return !mTaskRuning || !mFrameList.empty();
|
||||||
});
|
});
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* NOTE: From here on the code will be re-locked.
|
||||||
|
*/
|
||||||
|
if (!mStreamHandle) {
|
||||||
|
LogWarning("mStreamHandle is nullptr, will not handle frame.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (mFrameList.size() > 0) {
|
if (mFrameList.size() > 0) {
|
||||||
HandleListFrame();
|
HandleListFrame();
|
||||||
}
|
}
|
||||||
|
@ -189,7 +197,7 @@ void MediaHandle::HandleListFrame(void)
|
||||||
if (FrameType::VIDEO == frontFrame.mType) {
|
if (FrameType::VIDEO == frontFrame.mType) {
|
||||||
mStreamHandle->GetVideoStream(frontFrame.mData, frontFrame.mLength, frontFrame.mTimeStamp);
|
mStreamHandle->GetVideoStream(frontFrame.mData, frontFrame.mLength, frontFrame.mTimeStamp);
|
||||||
}
|
}
|
||||||
if (FrameType::AUDIO == frontFrame.mType) {
|
else if (FrameType::AUDIO == frontFrame.mType) {
|
||||||
mStreamHandle->GetAudioStream(frontFrame.mData, frontFrame.mLength, frontFrame.mTimeStamp);
|
mStreamHandle->GetAudioStream(frontFrame.mData, frontFrame.mLength, frontFrame.mTimeStamp);
|
||||||
}
|
}
|
||||||
free(frontFrame.mData);
|
free(frontFrame.mData);
|
||||||
|
@ -205,30 +213,10 @@ CameraTaskType MediaHandle::TaskTypeConvert(const MediaTaskType &type)
|
||||||
void MediaHandle::GetVideoStreamCallback(const void *stream, const int &length, const unsigned long long &timeStamp)
|
void MediaHandle::GetVideoStreamCallback(const void *stream, const int &length, const unsigned long long &timeStamp)
|
||||||
{
|
{
|
||||||
GetAVStream(FrameType::VIDEO, stream, length, timeStamp);
|
GetAVStream(FrameType::VIDEO, stream, length, timeStamp);
|
||||||
// return;
|
|
||||||
// std::unique_lock<std::mutex> lock(mMutex);
|
|
||||||
// // mStreamHandle->GetVideoStream(stream, length, timeStamp);
|
|
||||||
// OneFrameStream addFrame;
|
|
||||||
// addFrame.mData = malloc(length);
|
|
||||||
// addFrame.mLength = length;
|
|
||||||
// memcpy(addFrame.mData, stream, length);
|
|
||||||
// addFrame.mType = FrameType::VIDEO;
|
|
||||||
// mFrameList.push_back(addFrame);
|
|
||||||
// mCvFrameHandle.notify_one();
|
|
||||||
}
|
}
|
||||||
void MediaHandle::GetAudioStreamCallback(const void *stream, const int &length, const unsigned long long &timeStamp)
|
void MediaHandle::GetAudioStreamCallback(const void *stream, const int &length, const unsigned long long &timeStamp)
|
||||||
{
|
{
|
||||||
GetAVStream(FrameType::AUDIO, stream, length, timeStamp);
|
GetAVStream(FrameType::AUDIO, stream, length, timeStamp);
|
||||||
// return;
|
|
||||||
// std::unique_lock<std::mutex> lock(mMutex);
|
|
||||||
// // mStreamHandle->GetAudioStream(stream, length, timeStamp);
|
|
||||||
// OneFrameStream addFrame;
|
|
||||||
// addFrame.mData = malloc(length);
|
|
||||||
// addFrame.mLength = length;
|
|
||||||
// memcpy(addFrame.mData, stream, length);
|
|
||||||
// addFrame.mType = FrameType::AUDIO;
|
|
||||||
// mFrameList.push_back(addFrame);
|
|
||||||
// mCvFrameHandle.notify_one();
|
|
||||||
}
|
}
|
||||||
void MediaHandle::GetAVStream(const FrameType &type, const void *stream, const int &length,
|
void MediaHandle::GetAVStream(const FrameType &type, const void *stream, const int &length,
|
||||||
const unsigned long long &timeStamp)
|
const unsigned long long &timeStamp)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user