> > +static int uint_y_to_float_y_wrapper(SwsContext *c, const uint8_t *src[], > + int srcStride[], int srcSliceY, > + int srcSliceH, uint8_t *dst[], int > dstStride[]) > +{ > + int y, x; > + int dstStrideFloat = dstStride[0] >> 2;; > + const uint8_t *srcPtr = src[0]; > + float *dstPtr = (float *)(dst[0] + dstStride[0] * srcSliceY); > + > + for (y = 0; y < srcSliceH; ++y){ > + for (x = 0; x < c->srcW; ++x){ > + dstPtr[x] = (float)srcPtr[x] / 255.0f; > + } > + srcPtr += srcStride[0]; > + dstPtr += dstStrideFloat; > + } > + > + return srcSliceH; > +} > + > +static int float_y_to_uint_y_wrapper(SwsContext *c, const uint8_t* src[], > + int srcStride[], int srcSliceY, > + int srcSliceH, uint8_t* dst[], int > dstStride[]) > +{ > + int y, x; > + int srcStrideFloat = srcStride[0] >> 2; > + const float *srcPtr = (const float *)src[0]; > + uint8_t *dstPtr = dst[0] + dstStride[0] * srcSliceY; > + > + for (y = 0; y < srcSliceH; ++y){ > + for (x = 0; x < c->srcW; ++x){ > + dstPtr[x] = (uint8_t)(255.0f * FFMIN(FFMAX(srcPtr[x], 0.0f), > 1.0f)); > + } > + srcPtr += srcStrideFloat; > + dstPtr += dstStride[0]; > + } > + > + return srcSliceH; > +} >
Maybe you can avoid to use float for these conversions like in libavcodec/exr.c, where there is a float to uint16 conversion Martin _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel