亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bitstrm.cpp

?? 幾種圖像格式之間的轉換
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.
//
//
//                        Intel License Agreement
//                For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistribution's of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   * Redistribution's in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
//   * The name of Intel Corporation may not be used to endorse or promote products
//     derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/

#include <assert.h>
#include <string.h>
#include <limits.h>
#include "../include/bitstrm.h"

#define  BS_DEF_BLOCK_SIZE   (1<<15)

const ulong bs_bit_mask[] = {
    0,
    0x00000001, 0x00000003, 0x00000007, 0x0000000F,
    0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
    0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
    0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
    0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
    0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
    0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
    0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
};

void bsBSwapBlock( uchar *start, uchar *end )
{
    ulong* data = (ulong*)start;
    int    i, size = (end - start+3)/4;

    for( i = 0; i < size; i++ )
    {
        ulong temp = data[i];
        temp = BSWAP( temp );
        data[i] = temp;
    }
}


/////////////////////////  RBaseStream ////////////////////////////


bool  RBaseStream::IsOpened()
{ 
    return m_is_opened;
}

void  RBaseStream::Allocate()
{
    if( !m_start )
    {
        m_start = new uchar[m_block_size + m_unGetsize];
        m_start+= m_unGetsize;
    }
    m_end = m_start + m_block_size;
    m_current = m_end;
}


RBaseStream::RBaseStream()
{
    m_start = m_end = m_current = 0;
    m_file = 0;
    m_block_size = BS_DEF_BLOCK_SIZE;
    m_unGetsize = 4; // 32 bits
    m_is_opened = false;
}


RBaseStream::~RBaseStream()
{
    Close();    // Close files
    Release();  // free  buffers
}


void  RBaseStream::ReadBlock()
{
    int readed;
    assert( m_file != 0 );

    // copy unget buffer
    if( m_start )
    {
        memcpy( m_start - m_unGetsize, m_end - m_unGetsize, m_unGetsize );
    }

    SetPos( GetPos() ); // normalize position

    fseek( m_file, m_block_pos, SEEK_SET );
    readed = fread( m_start, 1, m_block_size, m_file );
    m_end = m_start + readed;
    m_current   -= m_block_size;
    m_block_pos += m_block_size;

    if( readed == 0 || m_current >= m_end ) throw RBS_THROW_EOS;
}


bool  RBaseStream::Open( const char* filename )
{
    Close();
    Allocate();
    
    m_file = fopen( filename, "rb" );
    
    if( m_file )
    {
        m_is_opened = true;
        SetPos(0);
    }
    return m_file != 0;
}

void  RBaseStream::Close()
{
    if( m_file )
    {
        fclose( m_file );
        m_file = 0;
    }
    m_is_opened = false;
}


void  RBaseStream::Release()
{
    if( m_start )
    {
        delete (m_start - m_unGetsize);
    }
    m_start = m_end = m_current = 0;
}


void  RBaseStream::SetBlockSize( int block_size, int unGetsize )
{
    assert( unGetsize >= 0 && block_size > 0 &&
           (block_size & (block_size-1)) == 0 );

    if( m_start && block_size == m_block_size && unGetsize == m_unGetsize ) return;
    Release();
    m_block_size = block_size;
    m_unGetsize = unGetsize;
    Allocate();
}


void  RBaseStream::SetPos( int pos )
{
    int offset = pos & (m_block_size - 1);
    int block_pos = pos - offset;
    
    assert( IsOpened() && pos >= 0 );
    
    if( m_current < m_end && block_pos == m_block_pos - m_block_size )
    {
        m_current = m_start + offset;
    }
    else
    {
        m_block_pos = block_pos;
        m_current = m_start + m_block_size + offset;
    }
}


int  RBaseStream::GetPos()
{
    assert( IsOpened() );
    return m_block_pos - m_block_size + (m_current - m_start);
}

void  RBaseStream::Skip( int bytes )
{
    assert( bytes >= 0 );
    m_current += bytes;
}

/////////////////////////  RLByteStream ////////////////////////////

RLByteStream::~RLByteStream()
{
}

int  RLByteStream::GetByte()
{
    uchar *current = m_current;
    int   val;

    if( current >= m_end )
    {
        ReadBlock();
        current = m_current;
    }

    val = *((uchar*)current);
    m_current = current + 1;
    return val;
}


void  RLByteStream::GetBytes( void* buffer, int count, int* readed )
{
    uchar*  data = (uchar*)buffer;
    assert( count >= 0 );
    
    if( readed) *readed = 0;

    while( count > 0 )
    {
        int l;

        for(;;)
        {
            l = m_end - m_current;
            if( l > count ) l = count;
            if( l > 0 ) break;
            ReadBlock();
        }
        memcpy( data, m_current, l );
        m_current += l;
        data += l;
        count -= l;
        if( readed ) *readed += l;
    }
}


////////////  RLByteStream & RMByteStream <Get[d]word>s ////////////////

RMByteStream::~RMByteStream()
{
}


int  RLByteStream::GetWord()
{
    uchar *current = m_current;
    int   val;

    if( current+1 < m_end )
    {
        val = current[0] + (current[1] << 8);
        m_current = current + 2;
    }
    else
    {
        val = GetByte();
        val|= GetByte() << 8;
    }
    return val;
}


int  RLByteStream::GetDWord()
{
    uchar *current = m_current;
    int   val;

    if( current+3 < m_end )
    {
        val = current[0] + (current[1] << 8) +
              (current[2] << 16) + (current[3] << 24);
        m_current = current + 4;
    }
    else
    {
        val = GetByte();
        val |= GetByte() << 8;
        val |= GetByte() << 16;
        val |= GetByte() << 24;
    }
    return val;
}


int  RMByteStream::GetWord()
{
    uchar *current = m_current;
    int   val;

    if( current+1 < m_end )
    {
        val = (current[0] << 8) + current[1];
        m_current = current + 2;
    }
    else
    {
        val = GetByte() << 8;
        val|= GetByte();
    }
    return val;
}


int  RMByteStream::GetDWord()
{
    uchar *current = m_current;
    int   val;

    if( current+3 < m_end )
    {
        val = (current[0] << 24) + (current[1] << 16) +
              (current[2] << 8) + current[3];
        m_current = current + 4;
    }
    else
    {
        val = GetByte() << 24;
        val |= GetByte() << 16;
        val |= GetByte() << 8;
        val |= GetByte();
    }
    return val;
}


/////////////////////////  RLBitStream ////////////////////////////

RLBitStream::~RLBitStream()
{
}


void  RLBitStream::ReadBlock()
{
    RBaseStream::ReadBlock();
#ifdef  BIG_ENDIAN
    bsBSwapBlock( m_start, m_end );
#endif
}


void  RLBitStream::SetPos( int pos )
{
    RBaseStream::SetPos(pos);
    int offset = m_current - m_end;
    m_current = m_end + (offset & -4);
    m_bit_idx = (offset&3)*8;
}


int  RLBitStream::GetPos()
{
    return RBaseStream::GetPos() + (m_bit_idx >> 3);
}


int  RLBitStream::Get( int bits )
{
    int    bit_idx     = m_bit_idx;
    int    new_bit_idx = bit_idx + bits;
    int    mask    = new_bit_idx >= 32 ? -1 : 0;
    ulong* current = (ulong*)m_current;

    assert( (unsigned)bits < 32 );

    if( (m_current = (uchar*)(current - mask)) >= m_end )
    {
        ReadBlock();
        current = ((ulong*)m_current) + mask;
    }
    m_bit_idx = new_bit_idx & 31;
    return ((current[0] >> bit_idx) |
           ((current[1] <<-bit_idx) & mask)) & bs_bit_mask[bits];
}

int  RLBitStream::Show( int bits )
{
    int    bit_idx = m_bit_idx;
    int    new_bit_idx = bit_idx + bits;
    int    mask    = new_bit_idx >= 32 ? -1 : 0;
    ulong* current = (ulong*)m_current;

    assert( (unsigned)bits < 32 );

    if( (uchar*)(current - mask) >= m_end )
    {
        ReadBlock();
        current = ((ulong*)m_current) + mask;
        m_current = (uchar*)current;
    }
    return ((current[0] >> bit_idx) |
           ((current[1] <<-bit_idx) & mask)) & bs_bit_mask[bits];
}


void  RLBitStream::Move( int shift )
{
    int new_bit_idx = m_bit_idx + shift;
    m_current += (new_bit_idx >> 5) << 2;
    m_bit_idx  = new_bit_idx & 31;
}


int  RLBitStream::GetHuff( const short* table )
{
    int  val;
    int  code_bits;

    for(;;)
    {
        int table_bits = table[0];
        val = table[Show(table_bits) + 2];
        code_bits = val & 15;
        val >>= 4;

        if( code_bits != 0 ) break;
        table += val*2;
        Move( table_bits );
    }

    Move( code_bits );
    if( val == RBS_HUFF_FORB ) throw RBS_THROW_FORB;

    return val;
}

void  RLBitStream::Skip( int bytes )
{
    Move( bytes*8 );
}

/////////////////////////  RMBitStream ////////////////////////////


RMBitStream::~RMBitStream()
{
}


void  RMBitStream::ReadBlock()
{
    RBaseStream::ReadBlock();
#ifdef  LITTLE_ENDIAN
    bsBSwapBlock( m_start, m_end );
#endif
}


void  RMBitStream::SetPos( int pos )
{
    RBaseStream::SetPos(pos);
    int offset = m_current - m_end;
    m_current = m_end + ((offset - 1) & -4);
    m_bit_idx = (32 - (offset&3)*8) & 31;
}


int  RMBitStream::GetPos()
{
    return RBaseStream::GetPos() + ((32 - m_bit_idx) >> 3);
}


int  RMBitStream::Get( int bits )
{
    int    bit_idx = m_bit_idx - bits;
    int    mask    = bit_idx >> 31;
    ulong* current = ((ulong*)m_current) - mask;

    assert( (unsigned)bits < 32 );

    if( (m_current = (uchar*)current) >= m_end )
    {
        ReadBlock();
        current = (ulong*)m_current;
    }
    m_bit_idx = bit_idx &= 31;
    return (((current[-1] << -bit_idx) & mask)|
             (current[0] >> bit_idx)) & bs_bit_mask[bits];
}


int  RMBitStream::Show( int bits )
{
    int    bit_idx = m_bit_idx - bits;
    int    mask    = bit_idx >> 31;
    ulong* current = ((ulong*)m_current) - mask;

    assert( (unsigned)bits < 32 );

    if( ((uchar*)current) >= m_end )
    {
        m_current = (uchar*)current;
        ReadBlock();
        current = (ulong*)m_current;
        m_current -= 4;
    }
    return (((current[-1]<<-bit_idx) & mask)|
             (current[0] >> bit_idx)) & bs_bit_mask[bits];
}


int  RMBitStream::GetHuff( const short* table )
{
    int  val;
    int  code_bits;

    for(;;)
    {
        int table_bits = table[0];
        val = table[Show(table_bits) + 1];
        code_bits = val & 15;
        val >>= 4;

        if( code_bits != 0 ) break;
        table += val;
        Move( table_bits );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91原创在线视频| 国产午夜亚洲精品不卡| 麻豆91免费观看| 亚洲精品一区二区三区精华液| 国产成人一级电影| 日本不卡不码高清免费观看| 宅男在线国产精品| 91免费版在线看| 国产一区二区伦理| 蜜臀国产一区二区三区在线播放| 一区二区三区小说| 亚洲欧美视频一区| 欧美日本在线视频| 色88888久久久久久影院野外| 粉嫩av一区二区三区粉嫩 | 日本福利一区二区| 国产精品一区二区在线观看网站| 免费黄网站欧美| 亚洲午夜羞羞片| 夜夜精品浪潮av一区二区三区| 自拍偷拍亚洲欧美日韩| 欧美精品一区二区三区久久久| 日韩视频免费观看高清完整版 | 丝袜美腿亚洲一区| 亚洲国产成人av网| 日本午夜精品一区二区三区电影| 中文字幕中文字幕一区| 国产精品高潮呻吟久久| 中文字幕一区二区三区乱码在线| 国产偷国产偷精品高清尤物| 久久婷婷综合激情| 久久精子c满五个校花| 欧美日韩一区二区三区四区五区 | 亚洲国产激情av| 91精品黄色片免费大全| 日韩精品一区二区三区四区视频 | 91在线视频官网| 成人av在线看| 日本大香伊一区二区三区| 欧美亚州韩日在线看免费版国语版| 精品视频999| 欧美日韩1区2区| 精品日韩av一区二区| 日本一区二区成人| 亚洲男人的天堂av| 日韩电影在线看| 国产高清精品久久久久| 91在线无精精品入口| 宅男噜噜噜66一区二区66| 日韩欧美区一区二| 亚洲国产精品成人综合色在线婷婷| 一区二区久久久久久| 亚洲成人av一区| 激情成人综合网| 91久久精品国产91性色tv| 欧美不卡123| 亚洲综合在线电影| 麻豆精品视频在线观看免费 | 国产欧美日韩中文久久| 一区二区久久久| 国产白丝网站精品污在线入口| 色综合久久久久久久| 欧美白人最猛性xxxxx69交| 亚洲精品视频在线看| 国内精品在线播放| 国产激情视频一区二区三区欧美 | 91精品国产91久久久久久一区二区| 欧美日本国产视频| 自拍偷拍亚洲激情| 国产一区二区三区精品视频| 欧美色图第一页| 国产精品免费看片| 久久69国产一区二区蜜臀| 在线中文字幕一区| 国产精品久久夜| 亚洲无线码一区二区三区| gogo大胆日本视频一区| 久久精品夜夜夜夜久久| 日本不卡的三区四区五区| 欧美色大人视频| 国产亚洲精品久| 精品一区二区免费| 欧美一区二区三区喷汁尤物| 亚洲午夜视频在线观看| 成人成人成人在线视频| 久久亚洲影视婷婷| 黄页视频在线91| 日韩一级二级三级精品视频| 午夜视频一区在线观看| 欧美性感一类影片在线播放| 亚洲理论在线观看| 五月婷婷久久综合| 99re66热这里只有精品3直播| 亚洲欧美另类久久久精品 | 亚洲一区二区在线观看视频| 欧美在线观看视频一区二区| 日韩黄色免费电影| 国产亚洲综合色| 色美美综合视频| 日本美女一区二区| 国产精品蜜臀在线观看| 在线观看日韩电影| 国内精品国产成人国产三级粉色| 久久精品亚洲国产奇米99| 一本色道**综合亚洲精品蜜桃冫| 亚洲国产精品天堂| 久久精品亚洲乱码伦伦中文| 91福利视频网站| 国产成人在线色| 日韩精品成人一区二区在线| 国产欧美一区二区三区在线看蜜臀 | 成人午夜私人影院| 一区二区免费视频| 国产欧美日韩三级| 91精品国产aⅴ一区二区| 成人在线综合网| 奇米综合一区二区三区精品视频| 国产婷婷色一区二区三区 | 久久99精品国产麻豆婷婷| 中文字幕在线观看一区| 宅男在线国产精品| 一本色道综合亚洲| 国产剧情av麻豆香蕉精品| 五月天婷婷综合| 国产精品短视频| 国产午夜久久久久| 欧美一级免费大片| 在线中文字幕一区二区| 成人动漫精品一区二区| 精品亚洲成a人在线观看| 亚洲在线中文字幕| **欧美大码日韩| 久久视频一区二区| 欧美一区二区三区思思人| 欧洲亚洲精品在线| kk眼镜猥琐国模调教系列一区二区| 久久国产综合精品| 日本不卡视频在线观看| 亚洲一卡二卡三卡四卡无卡久久| 国产精品久久久久永久免费观看 | 国产成人精品网址| 激情国产一区二区 | 国产99久久久国产精品潘金| 美女一区二区在线观看| 图片区小说区区亚洲影院| 中文字幕日韩精品一区 | 欧美高清激情brazzers| 欧美性色综合网| 欧美综合视频在线观看| 在线一区二区三区做爰视频网站| 99在线精品视频| 99re成人精品视频| 91丝袜国产在线播放| 92精品国产成人观看免费| 91麻豆视频网站| 色婷婷av一区二区三区之一色屋| 91论坛在线播放| 色综合中文字幕国产| 在线看国产日韩| 欧美精品在线视频| 欧美一区二区二区| 精品国产乱子伦一区| 国产喂奶挤奶一区二区三区| 国产精品国产三级国产普通话99 | 亚洲制服欧美中文字幕中文字幕| 一区二区在线观看免费| 亚洲成av人片一区二区梦乃| 日韩av一二三| 国产精品乡下勾搭老头1| 99久久综合色| 欧美剧情片在线观看| 精品福利一区二区三区| 国产精品久久久久久久裸模| 亚洲日本欧美天堂| 日韩在线卡一卡二| 国产精品一区三区| 色婷婷狠狠综合| 日韩一区二区三区四区| 国产精品网站在线观看| 亚洲综合激情网| 国产在线播精品第三| 色婷婷久久久久swag精品 | 夫妻av一区二区| 在线免费视频一区二区| 欧美成人免费网站| 亚洲欧美日韩国产一区二区三区 | 国产精品久久久久永久免费观看 | 久久福利资源站| 97se亚洲国产综合在线| 日韩视频一区二区| 亚洲欧美另类小说| 精品一区二区三区视频在线观看| gogo大胆日本视频一区| 欧美一区二区在线视频| 国产精品美女久久久久aⅴ| 婷婷一区二区三区| 91麻豆国产自产在线观看| 欧美成人精品福利| 亚洲成年人网站在线观看| 成人福利视频网站|