<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.8112.16443"></HEAD>
<BODY>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>Hello
Ross,</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>I'm using your
library with MS Visual Studio 2008 and I've found the following
issue:</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>The Boolean type in
your library is defined as unsigned char. However, VS2008 fully supports
proper bool/true/false type. Could you please consider the following
changes in code (library from 2012-05-17)</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>1. Enable bool
support for MSVC: in the UsageEnvironment\include\Boolean.hh file
replace:</FONT></SPAN></DIV><SPAN class=713304410-24052012>
<DIV><FONT size=2 face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><BR><FONT size=2 face=Arial>#ifdef
__BORLANDC__<BR>#define Boolean bool</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><BR><FONT size=2 face=Arial>by</FONT></DIV><FONT size=2
face=Arial></FONT><FONT size=2 face=Arial></FONT>
<DIV><FONT size=2 face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><FONT size=2 face=Arial></FONT><FONT size=2
face=Arial></FONT><BR><FONT size=2 face=Arial>#if
defined(__BORLANDC__) <SPAN class=713304410-24052012>
</SPAN>|| <SPAN
class=713304410-24052012>(</SPAN>defined(_MSC_VER)<SPAN
class=713304410-24052012> && _MSC_VER >=
1400) // MSVC++ 8.0, Visual Studio 2005 and
higher</SPAN><BR>#define Boolean bool</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV></SPAN><SPAN class=713304410-24052012><FONT size=2 face=Arial>That enables
bool for Boolean in the library. </FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>After that I've
found some places where the Boolean variables are improperly used. Here is
the list of places and proposed fixes:</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>File
MPEG4LATMAudioRTPSource.cpp</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>in line 175
replace</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2>audioMuxVersion = 0;</FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial>allStreamsSameTimeFraming = 1;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2>by</FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2><BR>audioMuxVersion = false;</FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2>allStreamsSameTimeFraming = true;<BR></FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT size=2>in line
187-190 change</FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2></FONT></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2>audioMuxVersion = (nextByte&0x80)>>7;<BR>if (audioMuxVersion !=
0) break;</FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial><FONT
size=2>allStreamsSameTimeFraming =
(nextByte&0x40)>>6;</FONT></FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial>by</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>audioMuxVersion =
(nextByte&0x80) != 0;<BR>if (audioMuxVersion) break;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial>allStreamsSameTimeFraming = (nextByte&0x40)>>6 !=
0;</FONT> </SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>File
MP3InternalsHuffman.cpp</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>in line 552
replace</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>scaleFactorsLength =
getScaleFactorsLength(gr, isMPEG2);</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>by
</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>scaleFactorsLength =
getScaleFactorsLength(gr, isMPEG2 != 0);</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>Actually it's more
accurate to change the isMPEG2 type to Boolean, but I'm note sure what else this
change might need.</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>File
MP3Internals.cpp</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>in line 176
replace</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>hasCRC =
((hdr>>16)&0x1)^0x1;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial>by</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>hasCRC =
((hdr>>16)&0x1) == 0;</FONT></SPAN></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>I hope compiler
could optimize it to (hdr & 0x10000) == 0</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>in line 227
replace</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>framesize /=
samplingFreq<<isMPEG2;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>by
</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>framesize /=
samplingFreq<< (isMPEG2 ? 1 : 0);</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>File
MediaSession.cpp</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>in lines 1114-116
and 1121-1123 replace</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>fReadSource
=<BR> AMRAudioRTPSource::createNew(env(), fRTPSocket,
fRTPSource,<BR>
fRTPPayloadFormat, 0
/*isWideband*/,<BR>
fNumChannels, fOctetalign,
fInterleaving,<BR>
fRobustsorting, fCRC);<BR>// Note that fReadSource will differ from fRTPSource
in this case<BR> } else if (strcmp(fCodecName, "AMR-WB") == 0) { // AMR
audio (wideband)<BR>fReadSource =<BR> AMRAudioRTPSource::createNew(env(),
fRTPSocket,
fRTPSource,<BR>
fRTPPayloadFormat, 1
/*isWideband*/,<BR>
fNumChannels, fOctetalign,
fInterleaving,<BR>
fRobustsorting, fCRC);</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial>by</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>fReadSource
=<BR> AMRAudioRTPSource::createNew(env(), fRTPSocket,
fRTPSource,<BR>
fRTPPayloadFormat, false
/*isWideband*/,<BR>
fNumChannels, fOctetalign != 0,
fInterleaving,<BR>
fRobustsorting != 0, fCRC != 0);<BR>// Note that fReadSource will differ from
fRTPSource in this case<BR> } else if (strcmp(fCodecName, "AMR-WB") == 0)
{ // AMR audio (wideband)<BR>fReadSource =<BR>
AMRAudioRTPSource::createNew(env(), fRTPSocket,
fRTPSource,<BR>
fRTPPayloadFormat, true
/*isWideband*/,<BR>
fNumChannels, fOctetalign != 0,
fInterleaving,<BR>
fRobustsorting != 0, fCRC != 0);</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>I hope I didn't make
a mistake here with the fOctetalign, fRobustsorting and fCRC
passing.</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>File
H264VideoStreamFramer.cpp</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>here is 4 places
where the <FONT size=2>BitVector::</FONT>get1bit() result is assigned
to the Boolean variable. The easiest solution is to assign the get1bit() != 0 to
Boolean, but more nicer is to make inline get1BitAsBoolean() member
and use it.</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>in lines 347, 411,
540, 544 replace</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><FONT size=2 face=Arial>separate_colour_plane_flag =
bv.get1Bit();</FONT></DIV>
<DIV><FONT size=2 face=Arial>frame_mbs_only_flag = bv.get1Bit();</FONT></DIV>
<DIV><FONT size=2 face=Arial>field_pic_flag = bv.get1Bit();</FONT></DIV>
<DIV><FONT size=2 face=Arial>bottom_field_flag = bv.get1Bit();</FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN
class=713304410-24052012></SPAN></FONT> </DIV>
<DIV><FONT size=2 face=Arial><SPAN
class=713304410-24052012>by</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>separate_colour_plane_flag = bv.get1Bit() !=
0;</FONT></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>frame_mbs_only_flag
= bv.get1Bit() != 0;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>field_pic_flag =
bv.get1Bit() != 0;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>bottom_field_flag =
bv.get1Bit() != 0;</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2 face=Arial>Thanks in
advance,</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial>Nikolai</FONT></SPAN></DIV>
<DIV><SPAN class=713304410-24052012><FONT size=2
face=Arial></FONT></SPAN> </DIV>
<DIV align=left><FONT face="Courier New"><FONT
size=2>_________________________________________________________<FONT
face="Times New Roman"><BR></FONT></FONT></FONT><FONT face="Courier New"><FONT
size=2>Nikolai Vorontsov</FONT><BR><FONT size=2>Quadrox nv</FONT></FONT><FONT
face="Times New Roman"><BR></FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV></BODY></HTML>