Mercurial > mplayer.hg
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 { |