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

📄 ffimgfmt.cpp

📁 mpeg4 video codec mpeg4 video codec
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 2003-2006 Milan Cutka * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */#include "stdafx.h"#include "ffdshow_mediaguids.h"#include "ffImgfmt.h"#include <uuids.h>#include "char_t.h"const TcspInfo cspInfos[]={ {  FF_CSP_420P,_l("YV12"),  1,12, //Bpp  3, //numplanes  {0,1,1,0}, //shiftX  {0,1,1,0}, //shiftY  {0,128,128,0},  //black,  FOURCC_YV12, FOURCC_YV12, &MEDIASUBTYPE_YV12 }, {  FF_CSP_422P,_l("422P"),  1,18, //Bpp  3, //numplanes  {0,1,1,0}, //shiftX  {0,0,0,0}, //shiftY  {0,128,128,0},  //black  FOURCC_422P, FOURCC_422P, &MEDIASUBTYPE_422P }, {  FF_CSP_444P,_l("444P"),  1,24, //Bpp  3, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,128,128,0},  //black  FOURCC_444P, FOURCC_444P, &MEDIASUBTYPE_444P }, {  FF_CSP_411P,_l("411P"),  1,17, //Bpp  3, //numplanes  {0,2,2,0}, //shiftX  {0,0,0,0}, //shiftY  {0,128,128,0},  //black  FOURCC_411P, FOURCC_411P, &MEDIASUBTYPE_411P }, {  FF_CSP_410P,_l("410P"),  1,10, //Bpp  3, //numplanes  {0,2,2,0}, //shiftX  {0,2,2,0}, //shiftY  {0,128,128,0}, //black  FOURCC_410P, FOURCC_410P, &MEDIASUBTYPE_410P }, {  FF_CSP_YUY2,_l("YUY2"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0x8000,0,0,0},  //black  FOURCC_YUY2, FOURCC_YUY2, &MEDIASUBTYPE_YUY2,  0,1 //packedLumaOffset,packedChromaOffset }, {  FF_CSP_UYVY,_l("UYVY"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0x0080,0,0,0},  //black  FOURCC_UYVY, FOURCC_UYVY, &MEDIASUBTYPE_UYVY,  1,0 //packedLumaOffset,packedChromaOffset }, {  FF_CSP_YVYU,_l("YVYU"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0},  //shiftY  {0x8000,0,0,0},  //black  FOURCC_YVYU, FOURCC_YVYU, &MEDIASUBTYPE_YVYU,  0,1 //packedLumaOffset,packedChromaOffset }, {  FF_CSP_VYUY,_l("VYUY"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0},  //shiftY  {0x0080,0,0,0},  //black  FOURCC_VYUY, FOURCC_VYUY, &MEDIASUBTYPE_VYUY,  1,0 //packedLumaOffset,packedChromaOffset }, {  FF_CSP_ABGR,_l("ABGR"),  4,32, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB32 }, {  FF_CSP_RGBA,_l("RGBA"),  4,32, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB32 }, {  FF_CSP_BGR32,_l("BGR32"),  4,32, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB32 }, {  FF_CSP_BGR24,_l("BGR24"),  3,24, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB24 }, {  FF_CSP_BGR15,_l("BGR15"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB555 }, {  FF_CSP_BGR16,_l("BGR16"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB565 }, {  FF_CSP_RGB32,_l("RGB32"),  4,32, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, FOURCC_RGB3, &MEDIASUBTYPE_RGB32 }, {  FF_CSP_RGB24,_l("RGB24"),  3,24, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, FOURCC_RGB2, &MEDIASUBTYPE_RGB24 }, {  FF_CSP_RGB15,_l("RGB15"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, FOURCC_RGB5, &MEDIASUBTYPE_RGB555 }, {  FF_CSP_RGB16,_l("RGB16"),  2,16, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, FOURCC_RGB6, &MEDIASUBTYPE_RGB565 }, {  FF_CSP_PAL8,_l("pal8"),  1,8, //Bpp  1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  BI_RGB, 0, &MEDIASUBTYPE_RGB8 }, {  FF_CSP_CLJR,_l("cljr"),  1,16, //Bpp   1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  FOURCC_CLJR, FOURCC_CLJR, &MEDIASUBTYPE_CLJR }, {  FF_CSP_Y800,_l("gray"),  1,8, //Bpp   1, //numplanes  {0,0,0,0}, //shiftX  {0,0,0,0}, //shiftY  {0,0,0,0}, //black  FOURCC_Y800, FOURCC_Y800, &MEDIASUBTYPE_Y800 }, {  FF_CSP_NV12,_l("NV12"),  1,12, //Bpp  3, //numplanes  {0,1,1,0}, //shiftX  {0,1,1,0}, //shiftY  {0,128,128,0}, //black  FOURCC_NV12, FOURCC_NV12, &MEDIASUBTYPE_NV12 }, 0};TcspInfo cspInfoIYUV={ FF_CSP_420P,_l("YV12"), 1,12, //Bpp 3, //numplanes {0,1,1,0}, //shiftX {0,1,1,0}, //shiftY {0,128,128,0},  //black, FOURCC_IYUV, FOURCC_IYUV, &MEDIASUBTYPE_IYUV};TcspInfo cspInfoNV21={ FF_CSP_NV12,_l("NV21"), 1,12, //Bpp  3, //numplanes {0,1,1,0}, //shiftX {0,1,1,0}, //shiftY {0,128,128,0}, //black FOURCC_NV21, FOURCC_NV21, &MEDIASUBTYPE_NV21};const TcspFcc cspFccs[]={ _l("YV12")     ,FOURCC_YV12,FF_CSP_420P|FF_CSP_FLAGS_YUV_ADJ,false,true, _l("I420/IYUV"),FOURCC_I420,FF_CSP_420P|FF_CSP_FLAGS_YUV_ADJ|FF_CSP_FLAGS_YUV_ORDER,false,true, _l("YUY2")     ,FOURCC_YUY2,FF_CSP_YUY2,false,true, _l("YVYU")     ,FOURCC_YVYU,FF_CSP_YVYU,false,true, _l("UYVY")     ,FOURCC_UYVY,FF_CSP_UYVY,false,true, _l("VYUY")     ,FOURCC_VYUY,FF_CSP_VYUY,false,true, _l("RGB32")    ,FOURCC_RGB3,FF_CSP_RGB32,true,true, _l("RGB24")    ,FOURCC_RGB2,FF_CSP_RGB24,true,true, _l("RGB555")   ,FOURCC_RGB5,FF_CSP_RGB15,true,true, _l("RGB565")   ,FOURCC_RGB6,FF_CSP_RGB16,true,true, _l("CLJR")     ,FOURCC_CLJR,FF_CSP_CLJR,false,false, _l("Y800")     ,FOURCC_Y800,FF_CSP_Y800,false,true, _l("NV12")     ,FOURCC_NV12,FF_CSP_NV12,false,false, _l("NV21")     ,FOURCC_NV21,FF_CSP_NV12|FF_CSP_FLAGS_YUV_ORDER,false,false, NULL,0};char_t* csp_getName(int csp,char_t *buf,unsigned int len){ return csp_getName(csp_getInfo(csp),csp,buf,len);}char_t* csp_getName(const TcspInfo *cspInfo,int csp,char_t *buf,unsigned int len){ const char_t *colorspaceName=cspInfo?cspInfo->name:_l("unknown"); tsnprintf(buf,len,_l("%s%s%s%s%s%s"),colorspaceName,csp&FF_CSP_FLAGS_VFLIP?_l(",flipped"):_l(""),csp&FF_CSP_FLAGS_INTERLACED?_l(",interlaced"):_l(""),csp&FF_CSP_FLAGS_YUV_ADJ?_l(",adj"):_l(""),csp&FF_CSP_FLAGS_YUV_ORDER?_l(",VU"):_l(""),csp&FF_CSP_FLAGS_YUV_JPEG?_l(",JPEG"):_l("")); return buf;}const TcspInfo* csp_getInfoFcc(FOURCC fcccsp){ if (fcccsp==FOURCC_IYUV || fcccsp==FOURCC_I420)  return &cspInfoIYUV; else  {   for (int i=0;i<FF_CSPS_NUM;i++)    if (cspInfos[i].fcccsp==fcccsp)     return cspInfos+i;   return NULL;  }}int csp_bestMatch(int inCSP,int wantedCSPS,int *rank){ int outCSP=inCSP&wantedCSPS&FF_CSPS_MASK; if (outCSP)   {   if (rank) *rank=100;   return outCSP|(inCSP&~FF_CSPS_MASK);  }  const int *bestcsps=NULL; switch (inCSP&FF_CSPS_MASK)  {   case FF_CSP_420P:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_422P ,       FF_CSP_444P ,       FF_CSP_411P ,       FF_CSP_410P ,       FF_CSP_YUY2 ,       FF_CSP_UYVY ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,       FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_422P:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_420P ,       FF_CSP_444P ,       FF_CSP_411P ,       FF_CSP_410P ,       FF_CSP_YUY2 ,       FF_CSP_UYVY ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,       FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_444P:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_420P ,       FF_CSP_422P ,       FF_CSP_411P ,       FF_CSP_410P ,       FF_CSP_YUY2 ,       FF_CSP_UYVY ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,       FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_411P:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_420P ,       FF_CSP_422P ,       FF_CSP_444P ,       FF_CSP_410P ,       FF_CSP_YUY2 ,       FF_CSP_UYVY ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,       FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_410P:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_420P ,       FF_CSP_422P ,       FF_CSP_444P ,       FF_CSP_411P ,       FF_CSP_YUY2 ,       FF_CSP_UYVY ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,        FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_YUY2:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_UYVY ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,       FF_CSP_420P ,       FF_CSP_422P ,       FF_CSP_444P ,       FF_CSP_411P ,       FF_CSP_410P ,       FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_UYVY:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_YUY2 ,       FF_CSP_YVYU ,       FF_CSP_VYUY ,       FF_CSP_420P ,       FF_CSP_422P ,       FF_CSP_444P ,       FF_CSP_411P ,       FF_CSP_410P ,       FF_CSP_ABGR ,       FF_CSP_RGBA ,       FF_CSP_BGR32,       FF_CSP_RGB32,       FF_CSP_BGR24,       FF_CSP_RGB24,       FF_CSP_BGR16,       FF_CSP_RGB16,       FF_CSP_BGR15,       FF_CSP_RGB15,       FF_CSP_NULL      };     bestcsps=best;     break;     }   case FF_CSP_YVYU:    {     static const int best[FF_CSPS_NUM]=      {       FF_CSP_YUY2 ,       FF_CSP_UYVY ,       FF_CSP_VYUY ,       FF_CSP_420P ,       FF_CSP_422P ,       FF_CSP_444P ,       FF_CSP_411P ,       FF_CSP_410P ,       FF_CSP_ABGR ,

⌨️ 快捷键说明

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