[fix] fix crash due to rebuilding h264 frame

This commit is contained in:
dijunkun
2025-03-06 17:23:37 +08:00
parent 84ba2d8339
commit 706beaa2ce

View File

@@ -76,6 +76,8 @@ RtpVideoReceiver::~RtpVideoReceiver() {
rtp_statistics_->Stop(); rtp_statistics_->Stop();
} }
delete[] nv12_data_;
#ifdef SAVE_RTP_RECV_STREAM #ifdef SAVE_RTP_RECV_STREAM
if (file_rtp_recv_) { if (file_rtp_recv_) {
fflush(file_rtp_recv_); fflush(file_rtp_recv_);
@@ -370,15 +372,26 @@ bool RtpVideoReceiver::CheckIsH264FrameCompleted(
size_t complete_frame_size = 0; size_t complete_frame_size = 0;
int frame_fragment_count = 0; int frame_fragment_count = 0;
for (uint16_t start = it->first; uint16_t start = it->first;
start <= rtp_packet_h264.SequenceNumber(); start++) { uint16_t end = rtp_packet_h264.SequenceNumber();
memcpy(nv12_data_ + complete_frame_size, for (uint16_t seq = start; seq <= end; seq++) {
incomplete_h264_frame_list_[start].Payload(), complete_frame_size += incomplete_h264_frame_list_[seq].PayloadSize();
incomplete_h264_frame_list_[start].PayloadSize()); }
complete_frame_size += if (!nv12_data_) {
incomplete_h264_frame_list_[start].PayloadSize(); nv12_data_ = new uint8_t[NV12_BUFFER_SIZE];
incomplete_h264_frame_list_.erase(start); } else if (complete_frame_size > NV12_BUFFER_SIZE) {
delete[] nv12_data_;
nv12_data_ = new uint8_t[complete_frame_size];
}
uint8_t* dest = nv12_data_;
for (uint16_t seq = start; seq <= end; seq++) {
size_t payload_size = incomplete_h264_frame_list_[seq].PayloadSize();
memcpy(dest, incomplete_h264_frame_list_[seq].Payload(),
payload_size);
dest += payload_size;
incomplete_h264_frame_list_.erase(seq);
frame_fragment_count++; frame_fragment_count++;
} }
compelete_video_frame_queue_.push( compelete_video_frame_queue_.push(
@@ -386,7 +399,7 @@ bool RtpVideoReceiver::CheckIsH264FrameCompleted(
return true; return true;
} else { } else {
LOG_WARN("What happened?") LOG_WARN("What happened?");
return false; return false;
} }
} }