Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
8 years ago
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
a07986f4eee916f3aa957cbfe217fa82261f92c6
a07986f4
1 parent
5c959fc7
develop
...
3mdev
for #742, refine code
隐藏空白字符变更
内嵌
并排对比
正在显示
1 个修改的文件
包含
72 行增加
和
72 行删除
trunk/src/app/srs_app_source.cpp
trunk/src/app/srs_app_source.cpp
查看文件 @
a07986f
...
...
@@ -764,6 +764,78 @@ bool srs_hls_can_continue(int ret, SrsSharedPtrMessage* sh, SrsSharedPtrMessage*
return
false
;
}
SrsMixQueue
::
SrsMixQueue
()
{
nb_videos
=
0
;
nb_audios
=
0
;
}
SrsMixQueue
::~
SrsMixQueue
()
{
clear
();
}
void
SrsMixQueue
::
clear
()
{
std
::
multimap
<
int64_t
,
SrsSharedPtrMessage
*>::
iterator
it
;
for
(
it
=
msgs
.
begin
();
it
!=
msgs
.
end
();
++
it
)
{
SrsSharedPtrMessage
*
msg
=
it
->
second
;
srs_freep
(
msg
);
}
msgs
.
clear
();
nb_videos
=
0
;
nb_audios
=
0
;
}
void
SrsMixQueue
::
push
(
SrsSharedPtrMessage
*
msg
)
{
msgs
.
insert
(
std
::
make_pair
(
msg
->
timestamp
,
msg
));
if
(
msg
->
is_video
())
{
nb_videos
++
;
}
else
{
nb_audios
++
;
}
}
SrsSharedPtrMessage
*
SrsMixQueue
::
pop
()
{
bool
mix_ok
=
false
;
// pure video
if
(
nb_videos
>=
SRS_MIX_CORRECT_PURE_AV
&&
nb_audios
==
0
)
{
mix_ok
=
true
;
}
// pure audio
if
(
nb_audios
>=
SRS_MIX_CORRECT_PURE_AV
&&
nb_videos
==
0
)
{
mix_ok
=
true
;
}
// got 1 video and 1 audio, mix ok.
if
(
nb_videos
>=
1
&&
nb_audios
>=
1
)
{
mix_ok
=
true
;
}
if
(
!
mix_ok
)
{
return
NULL
;
}
// pop the first msg.
std
::
multimap
<
int64_t
,
SrsSharedPtrMessage
*>::
iterator
it
=
msgs
.
begin
();
SrsSharedPtrMessage
*
msg
=
it
->
second
;
msgs
.
erase
(
it
);
if
(
msg
->
is_video
())
{
nb_videos
--
;
}
else
{
nb_audios
--
;
}
return
msg
;
}
SrsOriginHub
::
SrsOriginHub
(
SrsSource
*
s
)
{
source
=
s
;
...
...
@@ -1659,78 +1731,6 @@ void SrsSource::destroy()
pool
.
clear
();
}
SrsMixQueue
::
SrsMixQueue
()
{
nb_videos
=
0
;
nb_audios
=
0
;
}
SrsMixQueue
::~
SrsMixQueue
()
{
clear
();
}
void
SrsMixQueue
::
clear
()
{
std
::
multimap
<
int64_t
,
SrsSharedPtrMessage
*>::
iterator
it
;
for
(
it
=
msgs
.
begin
();
it
!=
msgs
.
end
();
++
it
)
{
SrsSharedPtrMessage
*
msg
=
it
->
second
;
srs_freep
(
msg
);
}
msgs
.
clear
();
nb_videos
=
0
;
nb_audios
=
0
;
}
void
SrsMixQueue
::
push
(
SrsSharedPtrMessage
*
msg
)
{
msgs
.
insert
(
std
::
make_pair
(
msg
->
timestamp
,
msg
));
if
(
msg
->
is_video
())
{
nb_videos
++
;
}
else
{
nb_audios
++
;
}
}
SrsSharedPtrMessage
*
SrsMixQueue
::
pop
()
{
bool
mix_ok
=
false
;
// pure video
if
(
nb_videos
>=
SRS_MIX_CORRECT_PURE_AV
&&
nb_audios
==
0
)
{
mix_ok
=
true
;
}
// pure audio
if
(
nb_audios
>=
SRS_MIX_CORRECT_PURE_AV
&&
nb_videos
==
0
)
{
mix_ok
=
true
;
}
// got 1 video and 1 audio, mix ok.
if
(
nb_videos
>=
1
&&
nb_audios
>=
1
)
{
mix_ok
=
true
;
}
if
(
!
mix_ok
)
{
return
NULL
;
}
// pop the first msg.
std
::
multimap
<
int64_t
,
SrsSharedPtrMessage
*>::
iterator
it
=
msgs
.
begin
();
SrsSharedPtrMessage
*
msg
=
it
->
second
;
msgs
.
erase
(
it
);
if
(
msg
->
is_video
())
{
nb_videos
--
;
}
else
{
nb_audios
--
;
}
return
msg
;
}
SrsSource
::
SrsSource
()
{
req
=
NULL
;
...
...
请
注册
或
登录
后发表评论