代码拉取完成,页面将自动刷新
同步操作将从 飞猪饭饭/rtsp 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "ren_thread.h"
extern "C"
{
#include "libavformat/avformat.h"
};
ren_thread::ren_thread()
: m_head(NULL)
{
}
ren_thread::~ren_thread()
{
this->ClearQue();
}
AVFrame* ren_thread::Deque()
{
AVFrame* pkt = NULL;
while (true)
{
RLock();
if(m_exit_flag)
{
this->ClearQue();
RUnlock();
return NULL;
}
if(m_head)
{
pkt = m_head->m_frame;
if(m_head->m_next)
{
frame_queue* temp = m_head;
m_head = m_head->m_next;
free(temp);
}
else
{
free(m_head);
m_head = NULL;
}
RUnlock();
return pkt;
}
else
{
RUnlock();
Sleep(10);
}
}
}
int ren_thread::Run()
{
AVFrame* frame = this->Deque();
while(frame)
{
this->Render(frame);
av_frame_unref(frame);
av_frame_free(&frame);
frame = this->Deque();
}
this->DestroyRender();
return 0;
}
void ren_thread::ClearQue()
{
while (m_head)
{
frame_queue* p = m_head;
m_head = m_head->m_next;
av_frame_unref(p->m_frame);
av_frame_free(&p->m_frame);
free(p);
}
}
void ren_thread::Enque(AVFrame* frame)
{
RLock();
if(m_exit_flag)
{
RUnlock();
av_frame_unref(frame);
av_frame_free(&frame);
return;
}
if (!m_head) {
frame_queue* pp = (frame_queue*)malloc(sizeof(frame_queue));
pp->m_frame = frame;
pp->m_next = NULL;
m_head = pp;
}
else
{
frame_queue* p = m_head;
while(p->m_next) {
p = p->m_next;
}
frame_queue* pp = (frame_queue*)malloc(sizeof(frame_queue));
pp->m_frame = frame;
pp->m_next = NULL;
p->m_next = pp;
}
RUnlock();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。