Originally committed as revision 9495 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
Michael Niedermayer authored on 2003/02/24 07:05:55... | ... |
@@ -226,11 +226,11 @@ float sws_lum_sharpen= 0.0; |
226 | 226 |
(if there is no support for something compiled in it wont appear here) */ |
227 | 227 |
static CpuCaps cpuCaps; |
228 | 228 |
|
229 |
-void (*swScale)(SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, |
|
229 |
+int (*swScale)(SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, |
|
230 | 230 |
int srcSliceH, uint8_t* dst[], int dstStride[])=NULL; |
231 | 231 |
|
232 |
-static SwsVector *getConvVec(SwsVector *a, SwsVector *b); |
|
233 |
- |
|
232 |
+static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b); |
|
233 |
+ |
|
234 | 234 |
extern const uint8_t dither_2x2_4[2][8]; |
235 | 235 |
extern const uint8_t dither_2x2_8[2][8]; |
236 | 236 |
extern const uint8_t dither_8x8_32[8][8]; |
... | ... |
@@ -306,9 +306,9 @@ static void doTest(uint8_t *ref[3], int refStride[3], int w, int h, int srcForma |
306 | 306 |
out[i]= malloc(refStride[i]*h); |
307 | 307 |
} |
308 | 308 |
|
309 |
- srcContext= getSwsContext(w, h, IMGFMT_YV12, srcW, srcH, srcFormat, flags, NULL, NULL); |
|
310 |
- dstContext= getSwsContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL); |
|
311 |
- outContext= getSwsContext(dstW, dstH, dstFormat, w, h, IMGFMT_YV12, flags, NULL, NULL); |
|
309 |
+ srcContext= sws_getContext(w, h, IMGFMT_YV12, srcW, srcH, srcFormat, flags, NULL, NULL); |
|
310 |
+ dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL); |
|
311 |
+ outContext= sws_getContext(dstW, dstH, dstFormat, w, h, IMGFMT_YV12, flags, NULL, NULL); |
|
312 | 312 |
if(srcContext==NULL ||dstContext==NULL ||outContext==NULL){ |
313 | 313 |
printf("Failed allocating swsContext\n"); |
314 | 314 |
goto end; |
... | ... |
@@ -340,9 +340,9 @@ static void doTest(uint8_t *ref[3], int refStride[3], int w, int h, int srcForma |
340 | 340 |
|
341 | 341 |
end: |
342 | 342 |
|
343 |
- freeSwsContext(srcContext); |
|
344 |
- freeSwsContext(dstContext); |
|
345 |
- freeSwsContext(outContext); |
|
343 |
+ sws_freeContext(srcContext); |
|
344 |
+ sws_freeContext(dstContext); |
|
345 |
+ sws_freeContext(outContext); |
|
346 | 346 |
|
347 | 347 |
for(i=0; i<3; i++){ |
348 | 348 |
free(src[i]); |
... | ... |
@@ -918,12 +918,12 @@ void SwScale_YV12slice(unsigned char* src[], int srcStride[], int srcSliceY , |
918 | 918 |
default: return; |
919 | 919 |
} |
920 | 920 |
|
921 |
- if(!context) context=getSwsContextFromCmdLine(srcW, srcH, IMGFMT_YV12, dstW, dstH, dstFormat); |
|
921 |
+ if(!context) context=sws_getContextFromCmdLine(srcW, srcH, IMGFMT_YV12, dstW, dstH, dstFormat); |
|
922 | 922 |
|
923 | 923 |
context->swScale(context, src, srcStride, srcSliceY, srcSliceH, dst, dstStride3); |
924 | 924 |
} |
925 | 925 |
|
926 |
-void swsGetFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam) |
|
926 |
+void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam) |
|
927 | 927 |
{ |
928 | 928 |
static int firstTime=1; |
929 | 929 |
*flags=0; |
... | ... |
@@ -939,62 +939,62 @@ void swsGetFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, Sws |
939 | 939 |
} |
940 | 940 |
else if(verbose>1) *flags= SWS_PRINT_INFO; |
941 | 941 |
|
942 |
- if(src_filter.lumH) freeVec(src_filter.lumH); |
|
943 |
- if(src_filter.lumV) freeVec(src_filter.lumV); |
|
944 |
- if(src_filter.chrH) freeVec(src_filter.chrH); |
|
945 |
- if(src_filter.chrV) freeVec(src_filter.chrV); |
|
942 |
+ if(src_filter.lumH) sws_freeVec(src_filter.lumH); |
|
943 |
+ if(src_filter.lumV) sws_freeVec(src_filter.lumV); |
|
944 |
+ if(src_filter.chrH) sws_freeVec(src_filter.chrH); |
|
945 |
+ if(src_filter.chrV) sws_freeVec(src_filter.chrV); |
|
946 | 946 |
|
947 | 947 |
if(sws_lum_gblur!=0.0){ |
948 |
- src_filter.lumH= getGaussianVec(sws_lum_gblur, 3.0); |
|
949 |
- src_filter.lumV= getGaussianVec(sws_lum_gblur, 3.0); |
|
948 |
+ src_filter.lumH= sws_getGaussianVec(sws_lum_gblur, 3.0); |
|
949 |
+ src_filter.lumV= sws_getGaussianVec(sws_lum_gblur, 3.0); |
|
950 | 950 |
}else{ |
951 |
- src_filter.lumH= getIdentityVec(); |
|
952 |
- src_filter.lumV= getIdentityVec(); |
|
951 |
+ src_filter.lumH= sws_getIdentityVec(); |
|
952 |
+ src_filter.lumV= sws_getIdentityVec(); |
|
953 | 953 |
} |
954 | 954 |
|
955 | 955 |
if(sws_chr_gblur!=0.0){ |
956 |
- src_filter.chrH= getGaussianVec(sws_chr_gblur, 3.0); |
|
957 |
- src_filter.chrV= getGaussianVec(sws_chr_gblur, 3.0); |
|
956 |
+ src_filter.chrH= sws_getGaussianVec(sws_chr_gblur, 3.0); |
|
957 |
+ src_filter.chrV= sws_getGaussianVec(sws_chr_gblur, 3.0); |
|
958 | 958 |
}else{ |
959 |
- src_filter.chrH= getIdentityVec(); |
|
960 |
- src_filter.chrV= getIdentityVec(); |
|
959 |
+ src_filter.chrH= sws_getIdentityVec(); |
|
960 |
+ src_filter.chrV= sws_getIdentityVec(); |
|
961 | 961 |
} |
962 | 962 |
|
963 | 963 |
if(sws_chr_sharpen!=0.0){ |
964 |
- SwsVector *g= getConstVec(-1.0, 3); |
|
965 |
- SwsVector *id= getConstVec(10.0/sws_chr_sharpen, 1); |
|
964 |
+ SwsVector *g= sws_getConstVec(-1.0, 3); |
|
965 |
+ SwsVector *id= sws_getConstVec(10.0/sws_chr_sharpen, 1); |
|
966 | 966 |
g->coeff[1]=2.0; |
967 |
- addVec(id, g); |
|
968 |
- convVec(src_filter.chrH, id); |
|
969 |
- convVec(src_filter.chrV, id); |
|
970 |
- freeVec(g); |
|
971 |
- freeVec(id); |
|
967 |
+ sws_addVec(id, g); |
|
968 |
+ sws_convVec(src_filter.chrH, id); |
|
969 |
+ sws_convVec(src_filter.chrV, id); |
|
970 |
+ sws_freeVec(g); |
|
971 |
+ sws_freeVec(id); |
|
972 | 972 |
} |
973 | 973 |
|
974 | 974 |
if(sws_lum_sharpen!=0.0){ |
975 |
- SwsVector *g= getConstVec(-1.0, 3); |
|
976 |
- SwsVector *id= getConstVec(10.0/sws_lum_sharpen, 1); |
|
975 |
+ SwsVector *g= sws_getConstVec(-1.0, 3); |
|
976 |
+ SwsVector *id= sws_getConstVec(10.0/sws_lum_sharpen, 1); |
|
977 | 977 |
g->coeff[1]=2.0; |
978 |
- addVec(id, g); |
|
979 |
- convVec(src_filter.lumH, id); |
|
980 |
- convVec(src_filter.lumV, id); |
|
981 |
- freeVec(g); |
|
982 |
- freeVec(id); |
|
978 |
+ sws_addVec(id, g); |
|
979 |
+ sws_convVec(src_filter.lumH, id); |
|
980 |
+ sws_convVec(src_filter.lumV, id); |
|
981 |
+ sws_freeVec(g); |
|
982 |
+ sws_freeVec(id); |
|
983 | 983 |
} |
984 | 984 |
|
985 | 985 |
if(sws_chr_hshift) |
986 |
- shiftVec(src_filter.chrH, sws_chr_hshift); |
|
986 |
+ sws_shiftVec(src_filter.chrH, sws_chr_hshift); |
|
987 | 987 |
|
988 | 988 |
if(sws_chr_vshift) |
989 |
- shiftVec(src_filter.chrV, sws_chr_vshift); |
|
989 |
+ sws_shiftVec(src_filter.chrV, sws_chr_vshift); |
|
990 | 990 |
|
991 |
- normalizeVec(src_filter.chrH, 1.0); |
|
992 |
- normalizeVec(src_filter.chrV, 1.0); |
|
993 |
- normalizeVec(src_filter.lumH, 1.0); |
|
994 |
- normalizeVec(src_filter.lumV, 1.0); |
|
991 |
+ sws_normalizeVec(src_filter.chrH, 1.0); |
|
992 |
+ sws_normalizeVec(src_filter.chrV, 1.0); |
|
993 |
+ sws_normalizeVec(src_filter.lumH, 1.0); |
|
994 |
+ sws_normalizeVec(src_filter.lumV, 1.0); |
|
995 | 995 |
|
996 |
- if(verbose > 1) printVec(src_filter.chrH); |
|
997 |
- if(verbose > 1) printVec(src_filter.lumH); |
|
996 |
+ if(verbose > 1) sws_printVec(src_filter.chrH); |
|
997 |
+ if(verbose > 1) sws_printVec(src_filter.lumH); |
|
998 | 998 |
|
999 | 999 |
switch(sws_flags) |
1000 | 1000 |
{ |
... | ... |
@@ -1017,13 +1017,13 @@ void swsGetFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, Sws |
1017 | 1017 |
} |
1018 | 1018 |
|
1019 | 1019 |
// will use sws_flags & src_filter (from cmd line) |
1020 |
-SwsContext *getSwsContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat) |
|
1020 |
+SwsContext *sws_getContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat) |
|
1021 | 1021 |
{ |
1022 | 1022 |
int flags; |
1023 | 1023 |
SwsFilter *dstFilterParam, *srcFilterParam; |
1024 |
- swsGetFlagsAndFilterFromCmdLine(&flags, &srcFilterParam, &dstFilterParam); |
|
1024 |
+ sws_getFlagsAndFilterFromCmdLine(&flags, &srcFilterParam, &dstFilterParam); |
|
1025 | 1025 |
|
1026 |
- return getSwsContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, srcFilterParam, dstFilterParam); |
|
1026 |
+ return sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, srcFilterParam, dstFilterParam); |
|
1027 | 1027 |
} |
1028 | 1028 |
|
1029 | 1029 |
static double getSplineCoeff(double a, double b, double c, double d, double dist) |
... | ... |
@@ -1245,7 +1245,7 @@ static inline void initFilter(int16_t **outFilter, int16_t **filterPos, int *out |
1245 | 1245 |
scaleFilter.coeff= filter + i*filterSize; |
1246 | 1246 |
scaleFilter.length= filterSize; |
1247 | 1247 |
|
1248 |
- if(srcFilter) outVec= getConvVec(srcFilter, &scaleFilter); |
|
1248 |
+ if(srcFilter) outVec= sws_getConvVec(srcFilter, &scaleFilter); |
|
1249 | 1249 |
else outVec= &scaleFilter; |
1250 | 1250 |
|
1251 | 1251 |
ASSERT(outVec->length == filter2Size) |
... | ... |
@@ -1258,7 +1258,7 @@ static inline void initFilter(int16_t **outFilter, int16_t **filterPos, int *out |
1258 | 1258 |
|
1259 | 1259 |
(*filterPos)[i]+= (filterSize-1)/2 - (filter2Size-1)/2; |
1260 | 1260 |
|
1261 |
- if(outVec != &scaleFilter) freeVec(outVec); |
|
1261 |
+ if(outVec != &scaleFilter) sws_freeVec(outVec); |
|
1262 | 1262 |
} |
1263 | 1263 |
free(filter); filter=NULL; |
1264 | 1264 |
|
... | ... |
@@ -1607,7 +1607,7 @@ cpuCaps= gCpuCaps; |
1607 | 1607 |
#endif //!RUNTIME_CPUDETECT |
1608 | 1608 |
} |
1609 | 1609 |
|
1610 |
-static void PlanarToNV12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1610 |
+static int PlanarToNV12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1611 | 1611 |
int srcSliceH, uint8_t* dstParam[], int dstStride[]){ |
1612 | 1612 |
uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; |
1613 | 1613 |
/* Copy Y plane */ |
... | ... |
@@ -1630,9 +1630,10 @@ static void PlanarToNV12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], |
1630 | 1630 |
interleaveBytes( src[1],src[2],dst,c->srcW,srcSliceH,srcStride[1],srcStride[2],dstStride[0] ); |
1631 | 1631 |
else /* I420 & IYUV */ |
1632 | 1632 |
interleaveBytes( src[2],src[1],dst,c->srcW,srcSliceH,srcStride[2],srcStride[1],dstStride[0] ); |
1633 |
+ return srcSliceH; |
|
1633 | 1634 |
} |
1634 | 1635 |
|
1635 |
-static void PlanarToYuy2Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1636 |
+static int PlanarToYuy2Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1636 | 1637 |
int srcSliceH, uint8_t* dstParam[], int dstStride[]){ |
1637 | 1638 |
uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; |
1638 | 1639 |
|
... | ... |
@@ -1640,10 +1641,11 @@ static void PlanarToYuy2Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], |
1640 | 1640 |
yv12toyuy2( src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0] ); |
1641 | 1641 |
else /* I420 & IYUV */ |
1642 | 1642 |
yv12toyuy2( src[0],src[2],src[1],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0] ); |
1643 |
+ return srcSliceH; |
|
1643 | 1644 |
} |
1644 | 1645 |
|
1645 | 1646 |
/* {RGB,BGR}{15,16,24,32} -> {RGB,BGR}{15,16,24,32} */ |
1646 |
-static void rgb2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1647 |
+static int rgb2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1647 | 1648 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
1648 | 1649 |
const int srcFormat= c->srcFormat; |
1649 | 1650 |
const int dstFormat= c->dstFormat; |
... | ... |
@@ -1714,9 +1716,10 @@ static void rgb2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int s |
1714 | 1714 |
dstPtr+= dstStride[0]; |
1715 | 1715 |
} |
1716 | 1716 |
} |
1717 |
+ return srcSliceH; |
|
1717 | 1718 |
} |
1718 | 1719 |
|
1719 |
-static void bgr24toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1720 |
+static int bgr24toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1720 | 1721 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
1721 | 1722 |
|
1722 | 1723 |
rgb24toyv12( |
... | ... |
@@ -1726,9 +1729,10 @@ static void bgr24toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], i |
1726 | 1726 |
dst[2]+(srcSliceY>>1)*dstStride[2], |
1727 | 1727 |
c->srcW, srcSliceH, |
1728 | 1728 |
dstStride[0], dstStride[1], srcStride[0]); |
1729 |
+ return srcSliceH; |
|
1729 | 1730 |
} |
1730 | 1731 |
|
1731 |
-static void yvu9toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1732 |
+static int yvu9toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
1732 | 1733 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
1733 | 1734 |
int i; |
1734 | 1735 |
|
... | ... |
@@ -1754,6 +1758,7 @@ static void yvu9toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], in |
1754 | 1754 |
planar2x(src[1], dst[2], c->chrSrcW, c->chrSrcH, srcStride[1], dstStride[2]); |
1755 | 1755 |
planar2x(src[2], dst[1], c->chrSrcW, c->chrSrcH, srcStride[2], dstStride[1]); |
1756 | 1756 |
} |
1757 |
+ return srcSliceH; |
|
1757 | 1758 |
} |
1758 | 1759 |
|
1759 | 1760 |
/** |
... | ... |
@@ -1792,7 +1797,7 @@ inline void sws_orderYUV(int format, uint8_t * sortedP[], int sortedStride[], ui |
1792 | 1792 |
} |
1793 | 1793 |
|
1794 | 1794 |
/* unscaled copy like stuff (assumes nearly identical formats) */ |
1795 |
-static void simpleCopy(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
1795 |
+static int simpleCopy(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
1796 | 1796 |
int srcSliceH, uint8_t* dstParam[], int dstStrideParam[]){ |
1797 | 1797 |
|
1798 | 1798 |
int srcStride[3]; |
... | ... |
@@ -1860,6 +1865,7 @@ static void simpleCopy(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], |
1860 | 1860 |
} |
1861 | 1861 |
} |
1862 | 1862 |
} |
1863 |
+ return srcSliceH; |
|
1863 | 1864 |
} |
1864 | 1865 |
|
1865 | 1866 |
static int remove_dup_fourcc(int fourcc) |
... | ... |
@@ -1985,7 +1991,7 @@ int sws_getColorspaceDetails(SwsContext *c, int **inv_table, int *srcRange, int |
1985 | 1985 |
return 0; |
1986 | 1986 |
} |
1987 | 1987 |
|
1988 |
-SwsContext *getSwsContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags, |
|
1988 |
+SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags, |
|
1989 | 1989 |
SwsFilter *srcFilter, SwsFilter *dstFilter){ |
1990 | 1990 |
|
1991 | 1991 |
SwsContext *c; |
... | ... |
@@ -2374,11 +2380,20 @@ SwsContext *getSwsContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, |
2374 | 2374 |
} |
2375 | 2375 |
|
2376 | 2376 |
/** |
2377 |
+ * swscale warper, so we dont need to export the SwsContext |
|
2378 |
+ */ |
|
2379 |
+int sws_scale(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, |
|
2380 |
+ int srcSliceH, uint8_t* dst[], int dstStride[]){ |
|
2381 |
+ return c->swScale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride); |
|
2382 |
+} |
|
2383 |
+//FIXME order YV12/I420 here |
|
2384 |
+ |
|
2385 |
+/** |
|
2377 | 2386 |
* returns a normalized gaussian curve used to filter stuff |
2378 | 2387 |
* quality=3 is high quality, lowwer is lowwer quality |
2379 | 2388 |
*/ |
2380 | 2389 |
|
2381 |
-SwsVector *getGaussianVec(double variance, double quality){ |
|
2390 |
+SwsVector *sws_getGaussianVec(double variance, double quality){ |
|
2382 | 2391 |
const int length= (int)(variance*quality + 0.5) | 1; |
2383 | 2392 |
int i; |
2384 | 2393 |
double *coeff= memalign(sizeof(double), length*sizeof(double)); |
... | ... |
@@ -2394,12 +2409,12 @@ SwsVector *getGaussianVec(double variance, double quality){ |
2394 | 2394 |
coeff[i]= exp( -dist*dist/(2*variance*variance) ) / sqrt(2*variance*PI); |
2395 | 2395 |
} |
2396 | 2396 |
|
2397 |
- normalizeVec(vec, 1.0); |
|
2397 |
+ sws_normalizeVec(vec, 1.0); |
|
2398 | 2398 |
|
2399 | 2399 |
return vec; |
2400 | 2400 |
} |
2401 | 2401 |
|
2402 |
-SwsVector *getConstVec(double c, int length){ |
|
2402 |
+SwsVector *sws_getConstVec(double c, int length){ |
|
2403 | 2403 |
int i; |
2404 | 2404 |
double *coeff= memalign(sizeof(double), length*sizeof(double)); |
2405 | 2405 |
SwsVector *vec= malloc(sizeof(SwsVector)); |
... | ... |
@@ -2414,7 +2429,7 @@ SwsVector *getConstVec(double c, int length){ |
2414 | 2414 |
} |
2415 | 2415 |
|
2416 | 2416 |
|
2417 |
-SwsVector *getIdentityVec(void){ |
|
2417 |
+SwsVector *sws_getIdentityVec(void){ |
|
2418 | 2418 |
double *coeff= memalign(sizeof(double), sizeof(double)); |
2419 | 2419 |
SwsVector *vec= malloc(sizeof(SwsVector)); |
2420 | 2420 |
coeff[0]= 1.0; |
... | ... |
@@ -2425,7 +2440,7 @@ SwsVector *getIdentityVec(void){ |
2425 | 2425 |
return vec; |
2426 | 2426 |
} |
2427 | 2427 |
|
2428 |
-void normalizeVec(SwsVector *a, double height){ |
|
2428 |
+void sws_normalizeVec(SwsVector *a, double height){ |
|
2429 | 2429 |
int i; |
2430 | 2430 |
double sum=0; |
2431 | 2431 |
double inv; |
... | ... |
@@ -2439,14 +2454,14 @@ void normalizeVec(SwsVector *a, double height){ |
2439 | 2439 |
a->coeff[i]*= inv; |
2440 | 2440 |
} |
2441 | 2441 |
|
2442 |
-void scaleVec(SwsVector *a, double scalar){ |
|
2442 |
+void sws_scaleVec(SwsVector *a, double scalar){ |
|
2443 | 2443 |
int i; |
2444 | 2444 |
|
2445 | 2445 |
for(i=0; i<a->length; i++) |
2446 | 2446 |
a->coeff[i]*= scalar; |
2447 | 2447 |
} |
2448 | 2448 |
|
2449 |
-static SwsVector *getConvVec(SwsVector *a, SwsVector *b){ |
|
2449 |
+static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b){ |
|
2450 | 2450 |
int length= a->length + b->length - 1; |
2451 | 2451 |
double *coeff= memalign(sizeof(double), length*sizeof(double)); |
2452 | 2452 |
int i, j; |
... | ... |
@@ -2468,7 +2483,7 @@ static SwsVector *getConvVec(SwsVector *a, SwsVector *b){ |
2468 | 2468 |
return vec; |
2469 | 2469 |
} |
2470 | 2470 |
|
2471 |
-static SwsVector *sumVec(SwsVector *a, SwsVector *b){ |
|
2471 |
+static SwsVector *sws_sumVec(SwsVector *a, SwsVector *b){ |
|
2472 | 2472 |
int length= MAX(a->length, b->length); |
2473 | 2473 |
double *coeff= memalign(sizeof(double), length*sizeof(double)); |
2474 | 2474 |
int i; |
... | ... |
@@ -2485,7 +2500,7 @@ static SwsVector *sumVec(SwsVector *a, SwsVector *b){ |
2485 | 2485 |
return vec; |
2486 | 2486 |
} |
2487 | 2487 |
|
2488 |
-static SwsVector *diffVec(SwsVector *a, SwsVector *b){ |
|
2488 |
+static SwsVector *sws_diffVec(SwsVector *a, SwsVector *b){ |
|
2489 | 2489 |
int length= MAX(a->length, b->length); |
2490 | 2490 |
double *coeff= memalign(sizeof(double), length*sizeof(double)); |
2491 | 2491 |
int i; |
... | ... |
@@ -2503,7 +2518,7 @@ static SwsVector *diffVec(SwsVector *a, SwsVector *b){ |
2503 | 2503 |
} |
2504 | 2504 |
|
2505 | 2505 |
/* shift left / or right if "shift" is negative */ |
2506 |
-static SwsVector *getShiftedVec(SwsVector *a, int shift){ |
|
2506 |
+static SwsVector *sws_getShiftedVec(SwsVector *a, int shift){ |
|
2507 | 2507 |
int length= a->length + ABS(shift)*2; |
2508 | 2508 |
double *coeff= memalign(sizeof(double), length*sizeof(double)); |
2509 | 2509 |
int i; |
... | ... |
@@ -2522,39 +2537,39 @@ static SwsVector *getShiftedVec(SwsVector *a, int shift){ |
2522 | 2522 |
return vec; |
2523 | 2523 |
} |
2524 | 2524 |
|
2525 |
-void shiftVec(SwsVector *a, int shift){ |
|
2526 |
- SwsVector *shifted= getShiftedVec(a, shift); |
|
2525 |
+void sws_shiftVec(SwsVector *a, int shift){ |
|
2526 |
+ SwsVector *shifted= sws_getShiftedVec(a, shift); |
|
2527 | 2527 |
free(a->coeff); |
2528 | 2528 |
a->coeff= shifted->coeff; |
2529 | 2529 |
a->length= shifted->length; |
2530 | 2530 |
free(shifted); |
2531 | 2531 |
} |
2532 | 2532 |
|
2533 |
-void addVec(SwsVector *a, SwsVector *b){ |
|
2534 |
- SwsVector *sum= sumVec(a, b); |
|
2533 |
+void sws_addVec(SwsVector *a, SwsVector *b){ |
|
2534 |
+ SwsVector *sum= sws_sumVec(a, b); |
|
2535 | 2535 |
free(a->coeff); |
2536 | 2536 |
a->coeff= sum->coeff; |
2537 | 2537 |
a->length= sum->length; |
2538 | 2538 |
free(sum); |
2539 | 2539 |
} |
2540 | 2540 |
|
2541 |
-void subVec(SwsVector *a, SwsVector *b){ |
|
2542 |
- SwsVector *diff= diffVec(a, b); |
|
2541 |
+void sws_subVec(SwsVector *a, SwsVector *b){ |
|
2542 |
+ SwsVector *diff= sws_diffVec(a, b); |
|
2543 | 2543 |
free(a->coeff); |
2544 | 2544 |
a->coeff= diff->coeff; |
2545 | 2545 |
a->length= diff->length; |
2546 | 2546 |
free(diff); |
2547 | 2547 |
} |
2548 | 2548 |
|
2549 |
-void convVec(SwsVector *a, SwsVector *b){ |
|
2550 |
- SwsVector *conv= getConvVec(a, b); |
|
2551 |
- free(a->coeff); |
|
2549 |
+void sws_convVec(SwsVector *a, SwsVector *b){ |
|
2550 |
+ SwsVector *conv= sws_getConvVec(a, b); |
|
2551 |
+ free(a->coeff); |
|
2552 | 2552 |
a->coeff= conv->coeff; |
2553 | 2553 |
a->length= conv->length; |
2554 | 2554 |
free(conv); |
2555 | 2555 |
} |
2556 | 2556 |
|
2557 |
-SwsVector *cloneVec(SwsVector *a){ |
|
2557 |
+SwsVector *sws_cloneVec(SwsVector *a){ |
|
2558 | 2558 |
double *coeff= memalign(sizeof(double), a->length*sizeof(double)); |
2559 | 2559 |
int i; |
2560 | 2560 |
SwsVector *vec= malloc(sizeof(SwsVector)); |
... | ... |
@@ -2567,7 +2582,7 @@ SwsVector *cloneVec(SwsVector *a){ |
2567 | 2567 |
return vec; |
2568 | 2568 |
} |
2569 | 2569 |
|
2570 |
-void printVec(SwsVector *a){ |
|
2570 |
+void sws_printVec(SwsVector *a){ |
|
2571 | 2571 |
int i; |
2572 | 2572 |
double max=0; |
2573 | 2573 |
double min=0; |
... | ... |
@@ -2590,7 +2605,7 @@ void printVec(SwsVector *a){ |
2590 | 2590 |
} |
2591 | 2591 |
} |
2592 | 2592 |
|
2593 |
-void freeVec(SwsVector *a){ |
|
2593 |
+void sws_freeVec(SwsVector *a){ |
|
2594 | 2594 |
if(!a) return; |
2595 | 2595 |
if(a->coeff) free(a->coeff); |
2596 | 2596 |
a->coeff=NULL; |
... | ... |
@@ -2598,7 +2613,7 @@ void freeVec(SwsVector *a){ |
2598 | 2598 |
free(a); |
2599 | 2599 |
} |
2600 | 2600 |
|
2601 |
-void freeSwsContext(SwsContext *c){ |
|
2601 |
+void sws_freeContext(SwsContext *c){ |
|
2602 | 2602 |
int i; |
2603 | 2603 |
if(!c) return; |
2604 | 2604 |
|
... | ... |
@@ -19,7 +19,15 @@ |
19 | 19 |
#ifndef SWSCALE_H |
20 | 20 |
#define SWSCALE_H |
21 | 21 |
|
22 |
-#include "swscale_internal.h" //FIXME HACK REMOVE |
|
22 |
+/** |
|
23 |
+ * @file swscale.h |
|
24 |
+ * @brief |
|
25 |
+ * external api for the swscale stuff |
|
26 |
+ */ |
|
27 |
+ |
|
28 |
+#ifdef __cplusplus |
|
29 |
+extern "C" { |
|
30 |
+#endif |
|
23 | 31 |
|
24 | 32 |
/* values for the flags, the stuff on the command line is different */ |
25 | 33 |
#define SWS_FAST_BILINEAR 1 |
... | ... |
@@ -76,42 +84,47 @@ typedef struct { |
76 | 76 |
SwsVector *chrV; |
77 | 77 |
} SwsFilter; |
78 | 78 |
|
79 |
+struct SwsContext; |
|
79 | 80 |
|
81 |
+//typedef struct SwsContext; |
|
80 | 82 |
// *** bilinear scaling and yuv->rgb & yuv->yuv conversion of yv12 slices: |
81 | 83 |
// *** Note: it's called multiple times while decoding a frame, first time y==0 |
82 | 84 |
// dstbpp == 12 -> yv12 output |
83 | 85 |
// will use sws_flags |
86 |
+// deprecated, will be removed |
|
84 | 87 |
void SwScale_YV12slice(unsigned char* src[],int srcStride[], int srcSliceY, |
85 | 88 |
int srcSliceH, uint8_t* dst[], int dstStride, int dstbpp, |
86 | 89 |
int srcW, int srcH, int dstW, int dstH); |
87 | 90 |
|
88 |
-// Obsolete, will be removed soon |
|
89 |
-void SwScale_Init(); |
|
90 |
- |
|
91 | 91 |
|
92 |
+void sws_freeContext(struct SwsContext *swsContext); |
|
92 | 93 |
|
93 |
-void freeSwsContext(SwsContext *swsContext); |
|
94 |
- |
|
95 |
-SwsContext *getSwsContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat); |
|
96 |
-SwsContext *getSwsContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags, |
|
94 |
+struct SwsContext *sws_getContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat); |
|
95 |
+struct SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags, |
|
97 | 96 |
SwsFilter *srcFilter, SwsFilter *dstFilter); |
98 |
-void swsGetFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam); |
|
99 |
- |
|
100 |
-int sws_setColorspaceDetails(SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation); |
|
101 |
-int sws_getColorspaceDetails(SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation); |
|
102 |
- |
|
103 |
-SwsVector *getGaussianVec(double variance, double quality); |
|
104 |
-SwsVector *getConstVec(double c, int length); |
|
105 |
-SwsVector *getIdentityVec(void); |
|
106 |
-void scaleVec(SwsVector *a, double scalar); |
|
107 |
-void normalizeVec(SwsVector *a, double height); |
|
108 |
-void convVec(SwsVector *a, SwsVector *b); |
|
109 |
-void addVec(SwsVector *a, SwsVector *b); |
|
110 |
-void subVec(SwsVector *a, SwsVector *b); |
|
111 |
-void shiftVec(SwsVector *a, int shift); |
|
112 |
-SwsVector *cloneVec(SwsVector *a); |
|
113 |
- |
|
114 |
-void printVec(SwsVector *a); |
|
115 |
-void freeVec(SwsVector *a); |
|
97 |
+int sws_scale(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, |
|
98 |
+ int srcSliceH, uint8_t* dst[], int dstStride[]); |
|
99 |
+ |
|
100 |
+void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam); //FIXME try to seperate this |
|
101 |
+ |
|
102 |
+int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation); |
|
103 |
+int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation); |
|
104 |
+SwsVector *sws_getGaussianVec(double variance, double quality); |
|
105 |
+SwsVector *sws_getConstVec(double c, int length); |
|
106 |
+SwsVector *sws_getIdentityVec(void); |
|
107 |
+void sws_scaleVec(SwsVector *a, double scalar); |
|
108 |
+void sws_normalizeVec(SwsVector *a, double height); |
|
109 |
+void sws_convVec(SwsVector *a, SwsVector *b); |
|
110 |
+void sws_addVec(SwsVector *a, SwsVector *b); |
|
111 |
+void sws_subVec(SwsVector *a, SwsVector *b); |
|
112 |
+void sws_shiftVec(SwsVector *a, int shift); |
|
113 |
+SwsVector *sws_cloneVec(SwsVector *a); |
|
114 |
+ |
|
115 |
+void sws_printVec(SwsVector *a); |
|
116 |
+void sws_freeVec(SwsVector *a); |
|
117 |
+ |
|
118 |
+#ifdef __cplusplus |
|
119 |
+} |
|
120 |
+#endif |
|
116 | 121 |
|
117 | 122 |
#endif |
... | ... |
@@ -21,13 +21,12 @@ |
21 | 21 |
|
22 | 22 |
#define MAX_FILTER_SIZE 256 |
23 | 23 |
|
24 |
-struct SwsContext; |
|
25 |
- |
|
26 |
-typedef void (*SwsFunc)(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, |
|
24 |
+typedef int (*SwsFunc)(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, |
|
27 | 25 |
int srcSliceH, uint8_t* dst[], int dstStride[]); |
28 | 26 |
|
29 | 27 |
/* this struct should be aligned on at least 32-byte boundary */ |
30 | 28 |
typedef struct SwsContext{ |
29 |
+ SwsFunc swScale; |
|
31 | 30 |
int srcW, srcH, dstH; |
32 | 31 |
int chrSrcW, chrSrcH, chrDstW, chrDstH; |
33 | 32 |
int lumXInc, chrXInc; |
... | ... |
@@ -85,8 +84,6 @@ typedef struct SwsContext{ |
85 | 85 |
int dstColorspaceTable[4]; |
86 | 86 |
int srcRange, dstRange; |
87 | 87 |
|
88 |
- SwsFunc swScale; |
|
89 |
- |
|
90 | 88 |
#define RED_DITHER "0*8" |
91 | 89 |
#define GREEN_DITHER "1*8" |
92 | 90 |
#define BLUE_DITHER "2*8" |
... | ... |
@@ -121,7 +118,6 @@ typedef struct SwsContext{ |
121 | 121 |
int esp; |
122 | 122 |
} SwsContext; |
123 | 123 |
//FIXME check init (where 0) |
124 |
-//FIXME split private & public |
|
125 | 124 |
|
126 | 125 |
inline void sws_orderYUV(int format, uint8_t * sortedP[], int sortedStride[], uint8_t * p[], int stride[]); |
127 | 126 |
SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); |
... | ... |
@@ -2502,7 +2502,7 @@ FUNNY_UV_CODE |
2502 | 2502 |
} |
2503 | 2503 |
} |
2504 | 2504 |
|
2505 |
-static void RENAME(swScale)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
2505 |
+static int RENAME(swScale)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
2506 | 2506 |
int srcSliceH, uint8_t* dstParam[], int dstStrideParam[]){ |
2507 | 2507 |
|
2508 | 2508 |
/* load a few things into local vars to make the code more readable? and faster */ |
... | ... |
@@ -2540,6 +2540,7 @@ static void RENAME(swScale)(SwsContext *c, uint8_t* srcParam[], int srcStridePar |
2540 | 2540 |
uint8_t *formatConvBuffer= c->formatConvBuffer; |
2541 | 2541 |
const int chrSrcSliceY= srcSliceY >> c->chrSrcVSubSample; |
2542 | 2542 |
const int chrSrcSliceH= -((-srcSliceH) >> c->chrSrcVSubSample); |
2543 |
+ int lastDstY; |
|
2543 | 2544 |
|
2544 | 2545 |
/* vars whch will change and which we need to storw back in the context */ |
2545 | 2546 |
int dstY= c->dstY; |
... | ... |
@@ -2603,6 +2604,8 @@ i--; |
2603 | 2603 |
lastInChrBuf= -1; |
2604 | 2604 |
} |
2605 | 2605 |
|
2606 |
+ lastDstY= dstY; |
|
2607 |
+ |
|
2606 | 2608 |
for(;dstY < dstH; dstY++){ |
2607 | 2609 |
unsigned char *dest =dst[0]+dstStride[0]*dstY; |
2608 | 2610 |
const int chrDstY= dstY>>c->chrDstVSubSample; |
... | ... |
@@ -2810,4 +2813,6 @@ i--; |
2810 | 2810 |
c->chrBufIndex= chrBufIndex; |
2811 | 2811 |
c->lastInLumBuf= lastInLumBuf; |
2812 | 2812 |
c->lastInChrBuf= lastInChrBuf; |
2813 |
+ |
|
2814 |
+ return dstY - lastDstY; |
|
2813 | 2815 |
} |
... | ... |
@@ -262,7 +262,7 @@ const int32_t Inverse_Table_6_9[8][4] = { |
262 | 262 |
dst_2[6*i+3] = b[Y]; dst_2[6*i+4] = g[Y]; dst_2[6*i+5] = r[Y]; |
263 | 263 |
|
264 | 264 |
#define PROLOG(func_name, dst_type) \ |
265 |
-static void func_name(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, \ |
|
265 |
+static int func_name(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, \ |
|
266 | 266 |
int srcSliceH, uint8_t* dst[], int dstStride[]){\ |
267 | 267 |
uint8_t *src[3];\ |
268 | 268 |
int srcStride[3];\ |
... | ... |
@@ -294,6 +294,7 @@ static void func_name(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], |
294 | 294 |
dst_2 += dst_delta;\ |
295 | 295 |
}\ |
296 | 296 |
}\ |
297 |
+ return srcSliceH;\ |
|
297 | 298 |
} |
298 | 299 |
|
299 | 300 |
PROLOG(yuv2rgb_c_32, uint32_t) |
... | ... |
@@ -33,7 +33,7 @@ |
33 | 33 |
#include "../libvo/img_format.h" //FIXME try to reduce dependency of such stuff |
34 | 34 |
#include "swscale.h" |
35 | 35 |
|
36 |
-static void mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
36 |
+static int mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
37 | 37 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
38 | 38 |
uint8_t *src[3]; |
39 | 39 |
int srcStride[3]; |
... | ... |
@@ -48,9 +48,10 @@ static void mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrid |
48 | 48 |
|
49 | 49 |
mlib_VideoColorYUV2ARGB420(dst[0], src[0], src[1], src[2], c->dstW, |
50 | 50 |
c->dstH, dstStride[0], srcStride[0], srcStride[1]); |
51 |
+ return srcSliceH; |
|
51 | 52 |
} |
52 | 53 |
|
53 |
-static void mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
54 |
+static int mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
54 | 55 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
55 | 56 |
uint8_t *src[3]; |
56 | 57 |
int srcStride[3]; |
... | ... |
@@ -65,9 +66,10 @@ static void mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrid |
65 | 65 |
|
66 | 66 |
mlib_VideoColorYUV2ABGR420(dst[0], src[0], src[1], src[2], c->dstW, |
67 | 67 |
c->dstH, dstStride[0], srcStride[0], srcStride[1]); |
68 |
+ return srcSliceH; |
|
68 | 69 |
} |
69 | 70 |
|
70 |
-static void mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
71 |
+static int mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
71 | 72 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
72 | 73 |
uint8_t *src[3]; |
73 | 74 |
int srcStride[3]; |
... | ... |
@@ -82,6 +84,7 @@ static void mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStride |
82 | 82 |
|
83 | 83 |
mlib_VideoColorYUV2RGB420(dst[0], src[0], src[1], src[2], c->dstW, |
84 | 84 |
c->dstH, dstStride[0], srcStride[0], srcStride[1]); |
85 |
+ return srcSliceH; |
|
85 | 86 |
} |
86 | 87 |
|
87 | 88 |
|
... | ... |
@@ -123,7 +123,7 @@ |
123 | 123 |
"punpcklbw %%mm5, %%mm2;" /* G7 G6 G5 G4 G3 G2 G1 G0 */\ |
124 | 124 |
|
125 | 125 |
|
126 |
-static inline void RENAME(yuv420_rgb16)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
126 |
+static inline int RENAME(yuv420_rgb16)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
127 | 127 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
128 | 128 |
int srcStride[3]; |
129 | 129 |
uint8_t *src[3]; |
... | ... |
@@ -217,9 +217,11 @@ YUV2RGB |
217 | 217 |
} |
218 | 218 |
|
219 | 219 |
__asm__ __volatile__ (EMMS); |
220 |
+ |
|
221 |
+ return srcSliceH; |
|
220 | 222 |
} |
221 | 223 |
|
222 |
-static inline void RENAME(yuv420_rgb15)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
224 |
+static inline int RENAME(yuv420_rgb15)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
223 | 225 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
224 | 226 |
int srcStride[3]; |
225 | 227 |
uint8_t *src[3]; |
... | ... |
@@ -308,9 +310,10 @@ YUV2RGB |
308 | 308 |
} |
309 | 309 |
|
310 | 310 |
__asm__ __volatile__ (EMMS); |
311 |
+ return srcSliceH; |
|
311 | 312 |
} |
312 | 313 |
|
313 |
-static inline void RENAME(yuv420_rgb24)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
314 |
+static inline int RENAME(yuv420_rgb24)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
314 | 315 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
315 | 316 |
int srcStride[3]; |
316 | 317 |
uint8_t *src[3]; |
... | ... |
@@ -456,9 +459,10 @@ YUV2RGB |
456 | 456 |
} |
457 | 457 |
|
458 | 458 |
__asm__ __volatile__ (EMMS); |
459 |
+ return srcSliceH; |
|
459 | 460 |
} |
460 | 461 |
|
461 |
-static inline void RENAME(yuv420_rgb32)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
462 |
+static inline int RENAME(yuv420_rgb32)(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
|
462 | 463 |
int srcSliceH, uint8_t* dst[], int dstStride[]){ |
463 | 464 |
int srcStride[3]; |
464 | 465 |
uint8_t *src[3]; |
... | ... |
@@ -544,4 +548,5 @@ YUV2RGB |
544 | 544 |
} |
545 | 545 |
|
546 | 546 |
__asm__ __volatile__ (EMMS); |
547 |
+ return srcSliceH; |
|
547 | 548 |
} |