comparison postproc/swscale.c @ 6582:f98313dcd428

yvu9 -> yv12 unscaled converter with linear chroma scaling
author michael
date Thu, 27 Jun 2002 23:48:53 +0000
parents 5059143aa020
children 0b5a789d7fab
comparison
equal deleted inserted replaced
6581:896c062e85ec 6582:f98313dcd428
1775 dst[2]+(srcSliceY>>1)*dstStride[2], 1775 dst[2]+(srcSliceY>>1)*dstStride[2],
1776 c->srcW, srcSliceH, 1776 c->srcW, srcSliceH,
1777 dstStride[0], dstStride[1], srcStride[0]); 1777 dstStride[0], dstStride[1], srcStride[0]);
1778 } 1778 }
1779 1779
1780 static void yvu9toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
1781 int srcSliceH, uint8_t* dst[], int dstStride[]){
1782 int i;
1783
1784 /* copy Y */
1785 if(srcStride[0]==dstStride[0])
1786 memcpy(dst[0]+ srcSliceY*dstStride[0], src[0], srcStride[0]*srcSliceH);
1787 else{
1788 uint8_t *srcPtr= src[0];
1789 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
1790
1791 for(i=0; i<srcSliceH; i++)
1792 {
1793 memcpy(dstPtr, srcPtr, c->srcW);
1794 srcPtr+= srcStride[0];
1795 dstPtr+= dstStride[0];
1796 }
1797 }
1798
1799 if(c->dstFormat==IMGFMT_YV12){
1800 planar2x(src[1], dst[1], c->chrSrcW, c->chrSrcH, srcStride[1], dstStride[1]);
1801 planar2x(src[2], dst[2], c->chrSrcW, c->chrSrcH, srcStride[2], dstStride[2]);
1802 }else{
1803 planar2x(src[1], dst[2], c->chrSrcW, c->chrSrcH, srcStride[1], dstStride[2]);
1804 planar2x(src[2], dst[1], c->chrSrcW, c->chrSrcH, srcStride[2], dstStride[1]);
1805 }
1806 }
1807
1780 /** 1808 /**
1781 * bring pointers in YUV order instead of YVU 1809 * bring pointers in YUV order instead of YVU
1782 */ 1810 */
1783 static inline void orderYUV(int format, uint8_t * sortedP[], int sortedStride[], uint8_t * p[], int stride[]){ 1811 static inline void orderYUV(int format, uint8_t * sortedP[], int sortedStride[], uint8_t * p[], int stride[]){
1784 if(format == IMGFMT_YV12 || format == IMGFMT_YVU9){ 1812 if(format == IMGFMT_YV12 || format == IMGFMT_YVU9){
2049 if(flags&SWS_PRINT_INFO) 2077 if(flags&SWS_PRINT_INFO)
2050 MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", 2078 MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n",
2051 vo_format_name(srcFormat), vo_format_name(dstFormat)); 2079 vo_format_name(srcFormat), vo_format_name(dstFormat));
2052 return c; 2080 return c;
2053 } 2081 }
2054 #if 1 2082
2055 /* simple copy */ 2083 /* simple copy */
2056 if( srcFormat == dstFormat 2084 if( srcFormat == dstFormat
2057 || (srcFormat==IMGFMT_YV12 && dstFormat==IMGFMT_I420) 2085 || (srcFormat==IMGFMT_YV12 && dstFormat==IMGFMT_I420)
2058 || (srcFormat==IMGFMT_I420 && dstFormat==IMGFMT_YV12) 2086 || (srcFormat==IMGFMT_I420 && dstFormat==IMGFMT_YV12)
2059 || (isPlanarYUV(srcFormat) && isGray(dstFormat)) 2087 || (isPlanarYUV(srcFormat) && isGray(dstFormat))
2065 if(flags&SWS_PRINT_INFO) 2093 if(flags&SWS_PRINT_INFO)
2066 MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", 2094 MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n",
2067 vo_format_name(srcFormat), vo_format_name(dstFormat)); 2095 vo_format_name(srcFormat), vo_format_name(dstFormat));
2068 return c; 2096 return c;
2069 } 2097 }
2070 #endif 2098
2099 if( srcFormat==IMGFMT_YVU9 && (dstFormat==IMGFMT_YV12 || dstFormat==IMGFMT_I420) )
2100 {
2101 c->swScale= yvu9toyv12Wrapper;
2102
2103 if(flags&SWS_PRINT_INFO)
2104 MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n",
2105 vo_format_name(srcFormat), vo_format_name(dstFormat));
2106 return c;
2107 }
2108
2071 /* bgr32to24 & rgb32to24*/ 2109 /* bgr32to24 & rgb32to24*/
2072 if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_BGR24) 2110 if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_BGR24)
2073 ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_RGB24)) 2111 ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_RGB24))
2074 { 2112 {
2075 c->swScale= bgr32to24Wrapper; 2113 c->swScale= bgr32to24Wrapper;