comparison libswscale/swscale.c @ 27180:1a35c35a631e

Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
author lu_zero
date Sun, 06 Jul 2008 03:26:32 +0000
parents 4c8ad45769c7
children a6ca10caead4
comparison
equal deleted inserted replaced
27179:77b12b0470e4 27180:1a35c35a631e
1729 } 1729 }
1730 return srcSliceH; 1730 return srcSliceH;
1731 } 1731 }
1732 1732
1733 /* unscaled copy like stuff (assumes nearly identical formats) */ 1733 /* unscaled copy like stuff (assumes nearly identical formats) */
1734 static int simpleCopy(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, 1734 static int packedCopy(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
1735 int srcSliceH, uint8_t* dst[], int dstStride[]){ 1735 int srcSliceH, uint8_t* dst[], int dstStride[]){
1736 1736
1737 if (isPacked(c->srcFormat)) 1737
1738 {
1739 if (dstStride[0]==srcStride[0] && srcStride[0] > 0) 1738 if (dstStride[0]==srcStride[0] && srcStride[0] > 0)
1740 memcpy(dst[0] + dstStride[0]*srcSliceY, src[0], srcSliceH*dstStride[0]); 1739 memcpy(dst[0] + dstStride[0]*srcSliceY, src[0], srcSliceH*dstStride[0]);
1741 else 1740 else
1742 { 1741 {
1743 int i; 1742 int i;
1755 memcpy(dstPtr, srcPtr, length); 1754 memcpy(dstPtr, srcPtr, length);
1756 srcPtr+= srcStride[0]; 1755 srcPtr+= srcStride[0];
1757 dstPtr+= dstStride[0]; 1756 dstPtr+= dstStride[0];
1758 } 1757 }
1759 } 1758 }
1760 } 1759
1761 else 1760 return srcSliceH;
1762 { /* Planar YUV or gray */ 1761 }
1762 static int planarCopy(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
1763 int srcSliceH, uint8_t* dst[], int dstStride[])
1764 {
1765
1763 int plane; 1766 int plane;
1764 for (plane=0; plane<3; plane++) 1767 for (plane=0; plane<3; plane++)
1765 { 1768 {
1766 int length= plane==0 ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample); 1769 int length= plane==0 ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample);
1767 int y= plane==0 ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample); 1770 int y= plane==0 ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample);
1788 dstPtr+= dstStride[plane]; 1791 dstPtr+= dstStride[plane];
1789 } 1792 }
1790 } 1793 }
1791 } 1794 }
1792 } 1795 }
1793 } 1796
1794 return srcSliceH; 1797 return srcSliceH;
1795 } 1798 }
1796 1799
1797 static int gray16togray(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, 1800 static int gray16togray(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
1798 int srcSliceH, uint8_t* dst[], int dstStride[]){ 1801 int srcSliceH, uint8_t* dst[], int dstStride[]){
2206 /* simple copy */ 2209 /* simple copy */
2207 if ( srcFormat == dstFormat 2210 if ( srcFormat == dstFormat
2208 || (isPlanarYUV(srcFormat) && isGray(dstFormat)) 2211 || (isPlanarYUV(srcFormat) && isGray(dstFormat))
2209 || (isPlanarYUV(dstFormat) && isGray(srcFormat))) 2212 || (isPlanarYUV(dstFormat) && isGray(srcFormat)))
2210 { 2213 {
2211 c->swScale= simpleCopy; 2214 if (isPacked(c->srcFormat))
2215 c->swScale= packedCopy;
2216 else /* Planar YUV or gray */
2217 c->swScale= planarCopy;
2212 } 2218 }
2213 2219
2214 /* gray16{le,be} conversions */ 2220 /* gray16{le,be} conversions */
2215 if (isGray16(srcFormat) && (isPlanarYUV(dstFormat) || (dstFormat == PIX_FMT_GRAY8))) 2221 if (isGray16(srcFormat) && (isPlanarYUV(dstFormat) || (dstFormat == PIX_FMT_GRAY8)))
2216 { 2222 {