⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blockmap.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
字号:
/******************************************************************** *                                                                  * * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE.   * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       * *                                                                  * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2003                * * by the Xiph.Org Foundation http://www.xiph.org/                  * *                                                                  * ********************************************************************  function:  last mod: $Id: blockmap.c 11442 2006-05-27 17:28:08Z giles $ ********************************************************************/#include "codec_internal.h"static void CreateMapping ( ogg_int32_t (*BlockMap)[4][4],                            ogg_uint32_t FirstSB,                            ogg_uint32_t FirstFrag, ogg_uint32_t HFrags,                            ogg_uint32_t VFrags ){  ogg_uint32_t i, j = 0;  ogg_uint32_t xpos;  ogg_uint32_t ypos;  ogg_uint32_t SBrow, SBcol;  ogg_uint32_t SBRows, SBCols;  ogg_uint32_t MB, B;  ogg_uint32_t SB=FirstSB;  ogg_uint32_t FragIndex=FirstFrag;  /* Set Super-Block dimensions */  SBRows = VFrags/4 + ( VFrags%4 ? 1 : 0 );  SBCols = HFrags/4 + ( HFrags%4 ? 1 : 0 );  /* Map each Super-Block */  for ( SBrow=0; SBrow<SBRows; SBrow++ ){    for ( SBcol=0; SBcol<SBCols; SBcol++ ){      /* Y co-ordinate of Super-Block in Block units */      ypos = SBrow<<2;      /* Map Blocks within this Super-Block */      for ( i=0; (i<4) && (ypos<VFrags); i++, ypos++ ){        /* X co-ordinate of Super-Block in Block units */        xpos = SBcol<<2;        for ( j=0; (j<4) && (xpos<HFrags); j++, xpos++ ){          if ( i<2 ){            MB = ( j<2 ? 0 : 1 );          }else{            MB = ( j<2 ? 2 : 3 );          }          if ( i%2 ){            B = ( j%2 ? 3 : 2 );          }else{            B = ( j%2 ? 1 : 0 );          }          /* Set mapping and move to next fragment */          BlockMap[SB][MB][B] = FragIndex++;        }        /* Move to first fragment in next row in Super-Block */        FragIndex += HFrags-j;      }      /* Move on to next Super-Block */      SB++;      FragIndex -= i*HFrags-j;    }    /* Move to first Super-Block in next row */    FragIndex += 3*HFrags;  }}void CreateBlockMapping ( ogg_int32_t  (*BlockMap)[4][4],                          ogg_uint32_t YSuperBlocks,                          ogg_uint32_t UVSuperBlocks,                          ogg_uint32_t HFrags, ogg_uint32_t VFrags ) {  ogg_uint32_t i, j;  for ( i=0; i<YSuperBlocks + UVSuperBlocks * 2; i++ ){    for ( j=0; j<4; j++ ) {      BlockMap[i][j][0] = -1;      BlockMap[i][j][1] = -1;      BlockMap[i][j][2] = -1;      BlockMap[i][j][3] = -1;    }  }  CreateMapping ( BlockMap, 0, 0, HFrags, VFrags );  CreateMapping ( BlockMap, YSuperBlocks, HFrags*VFrags, HFrags/2, VFrags/2 );  CreateMapping ( BlockMap, YSuperBlocks + UVSuperBlocks, (HFrags*VFrags*5)/4,                  HFrags/2, VFrags/2 );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -