16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennOpenCV for Android NDK 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCopyright (c) 2006-2009 SIProp Project http://www.siprop.org/ 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennThis software is provided 'as-is', without any express or implied warranty. 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIn no event will the authors be held liable for any damages arising from the use of this software. 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennPermission is granted to anyone to use this software for any purpose, 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennincluding commercial applications, and to alter it and redistribute it freely, 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennsubject to the following restrictions: 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn3. This notice may not be removed or altered from any source distribution. 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/ 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "WLNonFileByteStream.h" 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn///////////////////////////// WLNonFileByteStream /////////////////////////////////// 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennWLNonFileByteStream::WLNonFileByteStream() 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_start = m_end = m_current = 0; 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _size = 0; 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_is_opened = false; 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennWLNonFileByteStream::~WLNonFileByteStream() 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Deallocate(); 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::Allocate(int data_size) 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(!m_start) 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_start = new uchar[data_size]; 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_end = m_start + data_size; 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_current = m_start; 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::Deallocate() 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if(m_start) 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn delete [] m_start; 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_start = 0; 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennbool WLNonFileByteStream::Open(int data_size) 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Close(); 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Allocate(data_size); 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_is_opened = true; 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_current = m_start; 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _size = data_size; 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return true; 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::Close() 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_is_opened = false; 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn Deallocate(); 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutByte( int val ) 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *m_current++ = (uchar)val; 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutBytes( const void* buffer, int count ) 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* data = (uchar*)buffer; 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert( data && m_current && count >= 0 ); 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while( count ) 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int l = (int)(m_end - m_current); 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( l > count ) 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn l = count; 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( l > 0 ) 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memcpy( m_current, data, l ); 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_current += l; 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn data += l; 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn count -= l; 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutWord( int val ) 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar *current = m_current; 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( current+1 < m_end ) 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn current[0] = (uchar)val; 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn current[1] = (uchar)(val >> 8); 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_current = current + 2; 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PutByte(val); 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PutByte(val >> 8); 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutDWord( int val ) 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar *current = m_current; 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( current+3 < m_end ) 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn current[0] = (uchar)val; 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn current[1] = (uchar)(val >> 8); 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn current[2] = (uchar)(val >> 16); 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn current[3] = (uchar)(val >> 24); 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn m_current = current + 4; 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PutByte(val); 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PutByte(val >> 8); 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PutByte(val >> 16); 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn PutByte(val >> 24); 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* WLNonFileByteStream::GetByte() 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return m_start; 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint WLNonFileByteStream::GetSize() 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return _size; 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 151