|
|
|
@ -1256,6 +1256,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!unscaled && c->gamma_flag && (srcFormat != tmpFmt || dstFormat != tmpFmt)) { |
|
|
|
|
SwsContext *c2; |
|
|
|
|
c->cascaded_context[0] = NULL; |
|
|
|
|
|
|
|
|
|
ret = av_image_alloc(c->cascaded_tmp, c->cascaded_tmpStride, |
|
|
|
@ -1272,11 +1273,18 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, |
|
|
|
|
|
|
|
|
|
c->cascaded_context[1] = sws_getContext(srcW, srcH, tmpFmt, |
|
|
|
|
dstW, dstH, tmpFmt, |
|
|
|
|
flags | SWS_GAMMA_CORRECT, srcFilter, dstFilter, c->param); |
|
|
|
|
flags, srcFilter, dstFilter, c->param); |
|
|
|
|
|
|
|
|
|
if (!c->cascaded_context[1]) |
|
|
|
|
return -1; |
|
|
|
|
|
|
|
|
|
c2 = c->cascaded_context[1]; |
|
|
|
|
c2->is_internal_gamma = 1; |
|
|
|
|
c2->gamma = alloc_gamma_tbl( c->gamma_value); |
|
|
|
|
c2->inv_gamma = alloc_gamma_tbl(1.f/c->gamma_value); |
|
|
|
|
if (!c2->gamma || !c2->inv_gamma) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
c->cascaded_context[2] = NULL; |
|
|
|
|
if (dstFormat != tmpFmt) { |
|
|
|
|
ret = av_image_alloc(c->cascaded1_tmp, c->cascaded1_tmpStride, |
|
|
|
@ -1293,18 +1301,6 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
c->gamma = NULL; |
|
|
|
|
c->inv_gamma = NULL; |
|
|
|
|
if (c->flags & SWS_GAMMA_CORRECT) { |
|
|
|
|
c->gamma = alloc_gamma_tbl(c->gamma_value); |
|
|
|
|
if (!c->gamma) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
c->inv_gamma = alloc_gamma_tbl(1.f/c->gamma_value); |
|
|
|
|
if (!c->inv_gamma) { |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (isBayer(srcFormat)) { |
|
|
|
|
if (!unscaled || |
|
|
|
|
(dstFormat != AV_PIX_FMT_RGB24 && dstFormat != AV_PIX_FMT_YUV420P)) { |
|
|
|
|