libswscale: Adds conversions from/to float gray format.
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
committed by
Michael Niedermayer
parent
551a029a18
commit
582bc5a348
@@ -258,6 +258,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
|
||||
[AV_PIX_FMT_P010BE] = { 1, 1 },
|
||||
[AV_PIX_FMT_P016LE] = { 1, 1 },
|
||||
[AV_PIX_FMT_P016BE] = { 1, 1 },
|
||||
[AV_PIX_FMT_GRAYF32LE] = { 1, 1 },
|
||||
[AV_PIX_FMT_GRAYF32BE] = { 1, 1 },
|
||||
};
|
||||
|
||||
int sws_isSupportedInput(enum AVPixelFormat pix_fmt)
|
||||
@@ -1173,6 +1175,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
|
||||
const AVPixFmtDescriptor *desc_dst;
|
||||
int ret = 0;
|
||||
enum AVPixelFormat tmpFmt;
|
||||
static const float float_mult = 1.0f / 255.0f;
|
||||
|
||||
cpu_flags = av_get_cpu_flags();
|
||||
flags = c->flags;
|
||||
@@ -1537,6 +1540,19 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
|
||||
}
|
||||
}
|
||||
|
||||
if (unscaled && c->srcBpc == 8 && dstFormat == AV_PIX_FMT_GRAYF32){
|
||||
for (i = 0; i < 256; ++i){
|
||||
c->uint2float_lut[i] = (float)i * float_mult;
|
||||
}
|
||||
}
|
||||
|
||||
// float will be converted to uint16_t
|
||||
if ((srcFormat == AV_PIX_FMT_GRAYF32BE || srcFormat == AV_PIX_FMT_GRAYF32LE) &&
|
||||
(!unscaled || unscaled && dstFormat != srcFormat && (srcFormat != AV_PIX_FMT_GRAYF32 ||
|
||||
dstFormat != AV_PIX_FMT_GRAY8))){
|
||||
c->srcBpc = 16;
|
||||
}
|
||||
|
||||
if (CONFIG_SWSCALE_ALPHA && isALPHA(srcFormat) && !isALPHA(dstFormat)) {
|
||||
enum AVPixelFormat tmpFormat = alphaless_fmt(srcFormat);
|
||||
|
||||
@@ -1793,7 +1809,9 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
|
||||
|
||||
/* unscaled special cases */
|
||||
if (unscaled && !usesHFilter && !usesVFilter &&
|
||||
(c->srcRange == c->dstRange || isAnyRGB(dstFormat))) {
|
||||
(c->srcRange == c->dstRange || isAnyRGB(dstFormat) ||
|
||||
srcFormat == AV_PIX_FMT_GRAYF32 && dstFormat == AV_PIX_FMT_GRAY8 ||
|
||||
srcFormat == AV_PIX_FMT_GRAY8 && dstFormat == AV_PIX_FMT_GRAYF32)) {
|
||||
ff_get_unscaled_swscale(c);
|
||||
|
||||
if (c->swscale) {
|
||||
|
Reference in New Issue
Block a user