No subject


Tue Jul 31 12:28:58 PDT 2012


if (lost)
    opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&output_samples));
else
    output_samples =3D max_frame_size;

But FEC is performed when lost_prev =3D=3D 1 (not when lost =3D=3D 1), this=
 means that the following call to opus_decode (that decodes FEC) will have =
output_samples =3D=3D max_frame_size.

I suggest to change the code above to: (only the first line is changed)
if ((!use_inbandfec && lost) || (use_inbandfec && lost_prev))
    opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&output_samples));
else
    output_samples =3D max_frame_size;

This should work with and without FEC.

This has been tested with libopus 1.0.2, but I think the bug is still there=
 in git HEAD.

Thanks,
Gustaf Ullberg

--_000_59F240892E54454ABE5A9F29A2DD230CBE7761DB3EX14MBXC304eur_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";
	mso-fareast-language:EN-US;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"SV" link=3D"#0563C1" vlink=3D"#954F72">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span lang=3D"EN-US">Hi,<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">When running opus_demo with FEC=
 enabled, there is a bug related to the length of FEC frames. The FEC frame=
s will be decoded with a length of max_frame_size and the resulting output =
file will be much longer than the input
 file.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">From opus_demo.c:<o:p></o:p></s=
pan></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span lang=3D"EN-US" s=
tyle=3D"font-size:7.5pt;font-family:Consolas;color:blue;background:white;ms=
o-highlight:white">if</span><span lang=3D"EN-US" style=3D"font-size:7.5pt;f=
ont-family:Consolas;color:black;background:white;mso-highlight:white">
 (lost)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span lang=3D"EN-US" s=
tyle=3D"font-size:7.5pt;font-family:Consolas;color:black;background:white;m=
so-highlight:white">&nbsp;&nbsp;&nbsp; opus_decoder_ctl(dec,
</span><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-family:Consolas;c=
olor:#6F008A;background:white;mso-highlight:white">OPUS_GET_LAST_PACKET_DUR=
ATION</span><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-family:Conso=
las;color:black;background:white;mso-highlight:white">(&amp;output_samples)=
);<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:7.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:whi=
te">else</span><span style=3D"font-size:7.5pt;font-family:Consolas;color:bl=
ack;background:white;mso-highlight:white"><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-f=
amily:Consolas;color:black;background:white;mso-highlight:white">&nbsp;&nbs=
p;&nbsp; output_samples =3D max_frame_size;</span><span lang=3D"EN-US" styl=
e=3D"font-size:7.5pt;font-family:Consolas;color:black"><o:p></o:p></span></=
p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-f=
amily:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">But FEC is performed when lost_=
prev =3D=3D 1 (not when lost =3D=3D 1), this means that the following call =
to opus_decode (that decodes FEC) will have output_samples =3D=3D max_frame=
_size.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I suggest to change the code ab=
ove to: (only the first line is changed)<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span lang=3D"EN-US" s=
tyle=3D"font-size:7.5pt;font-family:Consolas;color:blue;background:white;ms=
o-highlight:white">if</span><span lang=3D"EN-US" style=3D"font-size:7.5pt;f=
ont-family:Consolas;color:black;background:white;mso-highlight:white">
 ((!use_inbandfec &amp;&amp; lost) || (use_inbandfec &amp;&amp; lost_prev))=
<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span lang=3D"EN-US" s=
tyle=3D"font-size:7.5pt;font-family:Consolas;color:black;background:white;m=
so-highlight:white">&nbsp;&nbsp;&nbsp; opus_decoder_ctl(dec,
</span><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-family:Consolas;c=
olor:#6F008A;background:white;mso-highlight:white">OPUS_GET_LAST_PACKET_DUR=
ATION</span><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-family:Conso=
las;color:black;background:white;mso-highlight:white">(&amp;output_samples)=
);<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"text-autospace:none"><span style=3D"font-si=
ze:7.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:whi=
te">else</span><span style=3D"font-size:7.5pt;font-family:Consolas;color:bl=
ack;background:white;mso-highlight:white"><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-f=
amily:Consolas;color:black;background:white;mso-highlight:white">&nbsp;&nbs=
p;&nbsp; output_samples =3D max_frame_size;</span><span lang=3D"EN-US" styl=
e=3D"font-size:7.5pt;font-family:Consolas;color:black"><o:p></o:p></span></=
p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:7.5pt;font-f=
amily:Consolas;color:black"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This should work with and witho=
ut FEC.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">This has been tested with libop=
us 1.0.2, but I think the bug is still there in git HEAD.<o:p></o:p></span>=
</p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p>&nbsp;</o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Thanks,<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Gustaf Ullberg<o:p></o:p></span=
></p>
</div>
</body>
</html>

--_000_59F240892E54454ABE5A9F29A2DD230CBE7761DB3EX14MBXC304eur_--


More information about the opus mailing list