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

📄 atmozonedefinition.cpp

📁 VLC Player Source Code
💻 CPP
字号:
#include "AtmoDefs.h"#if defined (WIN32)#  include <windows.h>#else#  include <vlc_codecs.h>#endif#include <math.h>#include <stdio.h>#include "AtmoZoneDefinition.h"CAtmoZoneDefinition::CAtmoZoneDefinition(void){}CAtmoZoneDefinition::~CAtmoZoneDefinition(void){}void CAtmoZoneDefinition::Fill(unsigned char value){  for(int i=0; i < IMAGE_SIZE; i++)      m_BasicWeight[i] = value;}// max weight to leftvoid CAtmoZoneDefinition::FillGradientFromLeft(){   int index = 0;   unsigned char col_norm;   for(int row=0; row < CAP_HEIGHT; row++) {       for(int col=0; col < CAP_WIDTH; col++) {           // should be a value between 0 .. 255?           col_norm = (255 * (CAP_WIDTH-col-1)) / (CAP_WIDTH-1);           m_BasicWeight[index++] = col_norm;       }   }}// max weight to rightvoid CAtmoZoneDefinition::FillGradientFromRight(){   int index = 0;   unsigned char col_norm;   for(int row=0; row < CAP_HEIGHT; row++) {      for(int col=0; col < CAP_WIDTH; col++) {          col_norm = (255 * col) / (CAP_WIDTH-1); // should be a value between 0 .. 255?          m_BasicWeight[index++] = col_norm;       }   }}// max weight from topvoid CAtmoZoneDefinition::FillGradientFromTop(){   int index = 0;   unsigned char row_norm;   for(int row=0; row < CAP_HEIGHT; row++) {       row_norm = (255 * (CAP_HEIGHT-row-1)) / (CAP_HEIGHT-1); // should be a value between 0 .. 255?       for(int col=0; col < CAP_WIDTH; col++) {           m_BasicWeight[index++] = row_norm;       }   }}// max weight from bottomvoid CAtmoZoneDefinition::FillGradientFromBottom(){   int index = 0;   unsigned char row_norm;   for(int row=0; row < CAP_HEIGHT; row++) {       row_norm = (255 * row) / (CAP_HEIGHT-1); // should be a value between 0 .. 255?       for(int col=0; col < CAP_WIDTH; col++) {           m_BasicWeight[index++] = row_norm;       }   }}int CAtmoZoneDefinition::LoadGradientFromBitmap(char *pszBitmap){  // transform 256 color image (gray scale!)  // into m_basicWeight or use the GREEN value of a 24bit image!  // channel of a true color bitmap!  BITMAPINFO bmpInfo;  BITMAPFILEHEADER  bmpFileHeader;  /*#define ATMO_LOAD_GRADIENT_OK  0#define ATMO_LOAD_GRADIENT_FAILED_SIZE    1#define ATMO_LOAD_GRADIENT_FAILED_HEADER  2  */   FILE *bmp = fopen(pszBitmap, "rb");   if(!bmp)     return ATMO_LOAD_GRADIENT_FILENOTFOND;    if(fread(&bmpFileHeader, sizeof(BITMAPFILEHEADER), 1, bmp) != 1)    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_SIZE;    }#ifdef _ATMO_VLC_PLUGIN_    if(bmpFileHeader.bfType != VLC_TWOCC('M','B'))#else    if(bmpFileHeader.bfType != MakeWord('M','B'))#endif    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_HEADER;    }    if(fread(&bmpInfo, sizeof(BITMAPINFO), 1, bmp) != 1)    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_SIZE;    }    if(bmpInfo.bmiHeader.biCompression != BI_RGB)    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_FORMAT;    }    if((bmpInfo.bmiHeader.biBitCount != 8) && (bmpInfo.bmiHeader.biBitCount != 24))    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_FORMAT;    }    int width = bmpInfo.bmiHeader.biWidth;    int height = bmpInfo.bmiHeader.biHeight;    ATMO_BOOL invertDirection = (height > 0);    height = abs(height);    if((width != CAP_WIDTH) || (height != CAP_HEIGHT))    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_SIZE;    }    fseek(bmp, bmpFileHeader.bfOffBits, SEEK_SET);    int imageSize = width * height * bmpInfo.bmiHeader.biBitCount/8;    unsigned char *pixelBuffer = (unsigned char *)malloc(imageSize);    if(fread(pixelBuffer,imageSize,1,bmp) != 1)    {        fclose(bmp);        return ATMO_LOAD_GRADIENT_FAILED_SIZE;    }    if(bmpInfo.bmiHeader.biBitCount == 8)    {        int ydest;        for(int y=0;y < CAP_HEIGHT; y++) {            if(invertDirection) {                ydest = (CAP_HEIGHT - y - 1);            } else {                ydest = y;            }            for(int x=0;x < CAP_WIDTH; x++) {                // palette should be grey scale - so that index 0 is black and                // index 255 means white!                // everything else would produce funny results!                m_BasicWeight[ydest * CAP_WIDTH + x] =                    pixelBuffer[y * CAP_WIDTH + x];            }        }    }    if(bmpInfo.bmiHeader.biBitCount == 24)    {        int ydest;        for(int y=0;y < CAP_HEIGHT; y++) {            if(invertDirection) {                ydest = (CAP_HEIGHT - y - 1);            } else {                ydest = y;            }            for(int x=0;x < CAP_WIDTH; x++) {                // use the green value as reference...                m_BasicWeight[ydest * CAP_WIDTH + x] =                    pixelBuffer[y * CAP_WIDTH * 3 + (x*3) + 1 ];            }        }    }    free(pixelBuffer);    fclose(bmp);    return ATMO_LOAD_GRADIENT_OK;}void CAtmoZoneDefinition::UpdateWeighting(int *destWeight,                                          int WidescreenMode,                                          int newEdgeWeightning){  /*    use the values in m_BasicWeight and newWeightning to    update the direct control array for the output thread!  */  int index = 0;  for(int row=0; row < CAP_HEIGHT; row++) {      for(int col=0; col < CAP_HEIGHT; col++) {          if ((WidescreenMode == 1) && ((row <= CAP_HEIGHT/8) || (row >= (7*CAP_HEIGHT)/8)))          {             destWeight[index] = 0;          } else {   		     destWeight[index] = (int)(255.0 * (float)pow( ((float)m_BasicWeight[index])/255.0 , newEdgeWeightning));          }          index++;      }  }}void CAtmoZoneDefinition::setZoneNumber(int num){    m_zonenumber = num;}int CAtmoZoneDefinition::getZoneNumber(){    return m_zonenumber;}

⌨️ 快捷键说明

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