📄 ffimgfmt.cpp
字号:
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_VYUY: { static const int best[FF_CSPS_NUM]= { FF_CSP_YUY2 , FF_CSP_UYVY , FF_CSP_YVYU , 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_ABGR: { static const int best[FF_CSPS_NUM]= { 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_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_RGBA: { static const int best[FF_CSPS_NUM]= { FF_CSP_ABGR , 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_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_BGR32: { static const int best[FF_CSPS_NUM]= { FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_RGB32, FF_CSP_BGR24, FF_CSP_RGB24, FF_CSP_BGR16, FF_CSP_RGB16, FF_CSP_BGR15, FF_CSP_RGB15, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_BGR24: { static const int best[FF_CSPS_NUM]= { FF_CSP_RGB24, FF_CSP_BGR32, FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_RGB32, FF_CSP_BGR16, FF_CSP_RGB16, FF_CSP_BGR15, FF_CSP_RGB15, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_BGR15: { static const int best[FF_CSPS_NUM]= { FF_CSP_BGR32, FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_BGR24, FF_CSP_BGR16, FF_CSP_RGB32, FF_CSP_RGB24, FF_CSP_RGB15, FF_CSP_RGB16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_BGR16: { static const int best[FF_CSPS_NUM]= { FF_CSP_BGR32, FF_CSP_BGR24, FF_CSP_BGR15, FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_RGB32, FF_CSP_RGB24, FF_CSP_RGB15, FF_CSP_RGB16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_RGB32: { static const int best[FF_CSPS_NUM]= { FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_BGR32, FF_CSP_BGR24, FF_CSP_RGB24, FF_CSP_BGR15, FF_CSP_BGR16, FF_CSP_RGB15, FF_CSP_RGB16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_RGB24: { static const int best[FF_CSPS_NUM]= { FF_CSP_BGR24, FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_BGR32, FF_CSP_RGB32, FF_CSP_BGR15, FF_CSP_BGR16, FF_CSP_RGB15, FF_CSP_RGB16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_RGB15: { static const int best[FF_CSPS_NUM]= { FF_CSP_BGR15, FF_CSP_RGB32, FF_CSP_RGB24, FF_CSP_RGB16, FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_BGR32, FF_CSP_BGR24, FF_CSP_BGR16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_RGB16: { static const int best[FF_CSPS_NUM]= { FF_CSP_RGB15, FF_CSP_RGB32, FF_CSP_RGB24, FF_CSP_ABGR , FF_CSP_RGBA , FF_CSP_BGR32, FF_CSP_BGR24, FF_CSP_BGR15, FF_CSP_BGR16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_PAL8: { static const int best[FF_CSPS_NUM]= { FF_CSP_RGB32, FF_CSP_BGR32, FF_CSP_RGB24, FF_CSP_BGR24, FF_CSP_RGB15, FF_CSP_BGR15, FF_CSP_RGB16, FF_CSP_BGR16, FF_CSP_420P , 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_NULL }; bestcsps=best; break; } case FF_CSP_CLJR: { static const int best[FF_CSPS_NUM]= { FF_CSP_420P , 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_Y800: { static const int best[FF_CSPS_NUM]= { FF_CSP_420P , 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_NV12: { static const int best[FF_CSPS_NUM]= { FF_CSP_420P , 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; } default:return FF_CSP_NULL; } if (rank) *rank=99; while (*bestcsps) { if (*bestcsps&wantedCSPS) return *bestcsps|(inCSP&~FF_CSPS_MASK); bestcsps++; if (rank) (*rank)--; } return FF_CSP_NULL;}bool csp_inFOURCCmask(int x,FOURCC fcc){ switch (fcc) { case FOURCC_MASK_YUV:return !!csp_isYUV(x); case FOURCC_MASK_RGB:return !!csp_isRGB(x); case FOURCC_MASK_PAL:return !!csp_isPAL(x); default:return false; }}bool TcspInfos::TsortFc::operator ()(const TcspInfo* csp1,const TcspInfo* csp2){ int rank1;csp_bestMatch(csp,csp1->id,&rank1); int rank2;csp_bestMatch(csp,csp2->id,&rank2); return rank1>rank2;}void TcspInfos::sort(int csp){ std::sort(begin(),end(),TsortFc(csp&FF_CSPS_MASK));}int getBMPcolorspace(const BITMAPINFOHEADER *hdr,const TcspInfos &forcedCsps){ int csp; switch(hdr->biCompression) { case BI_RGB: switch (hdr->biBitCount) { case 8:csp=FF_CSP_PAL8|FF_CSP_FLAGS_VFLIP;break; case 15:csp=FF_CSP_RGB15|FF_CSP_FLAGS_VFLIP;break; case 16:csp=FF_CSP_RGB16|FF_CSP_FLAGS_VFLIP;break; case 24:csp=FF_CSP_RGB24|FF_CSP_FLAGS_VFLIP;break; case 32:csp=FF_CSP_RGB32|FF_CSP_FLAGS_VFLIP;break; default:return FF_CSP_NULL; } break; case FOURCC_I420: case FOURCC_IYUV: csp=FF_CSP_420P|FF_CSP_FLAGS_YUV_ADJ|FF_CSP_FLAGS_YUV_ORDER; break; case FOURCC_YV12: csp=FF_CSP_420P|FF_CSP_FLAGS_YUV_ADJ; break; case FOURCC_YUYV: case FOURCC_YUY2: case FOURCC_V422: csp=FF_CSP_YUY2; break; case FOURCC_YVYU: csp=FF_CSP_YVYU; break; case FOURCC_UYVY: csp=FF_CSP_UYVY; break; case FOURCC_VYUY: csp=FF_CSP_VYUY; break; case FOURCC_Y800: csp=FF_CSP_Y800; break; case FOURCC_444P: case FOURCC_YV24: csp=FF_CSP_444P; break; case FOURCC_422P: case FOURCC_YV16: csp=FF_CSP_422P; break; case FOURCC_411P: case FOURCC_Y41B: csp=FF_CSP_411P; break; case FOURCC_410P: csp=FF_CSP_410P; break; default: return FF_CSP_NULL; } bool ok; if (!forcedCsps.empty()) ok=std::find(forcedCsps.begin(),forcedCsps.end(),csp_getInfo(csp))!=forcedCsps.end(); else ok=true; return ok?csp:FF_CSP_NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -