libvmaf/src/feature/luminance_tools.h (18 lines of code) (raw):

/** * * Copyright 2016-2020 Netflix, Inc. * * Licensed under the BSD+Patent License (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://opensource.org/licenses/BSDplusPatent * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef VMAF_LUMINANCE_TOOLS_H_ #define VMAF_LUMINANCE_TOOLS_H_ typedef double (*VmafEOTF)(double V); /* * Limited pixel range means that only values between 16 and 235 will be used in 8 bits * (rescale the bounds appropriately for other bitdepths). * Full pixel range means that values from 0 to 2^bitdepth - 1 will be used. */ enum VmafPixelRange { VMAF_PIXEL_RANGE_UNKNOWN, VMAF_PIXEL_RANGE_LIMITED, VMAF_PIXEL_RANGE_FULL, }; /* * Contains the necessary information to normalize a luma value down to [0, 1]. */ typedef struct VmafLumaRange { int foot; int head; } VmafLumaRange; /* * Constructor for the LumaRange struct. */ int vmaf_luminance_init_luma_range(VmafLumaRange *luma_range, int bitdepth, enum VmafPixelRange pix_range); /* * Returns the EOTF corresponding to the string given. * eotf_str must be one of ['bt1886', 'pq'] */ int vmaf_luminance_init_eotf(VmafEOTF *eotf, const char *eotf_str); /* * Takes a normalized luma value in the [0, 1] range and returns a luminance value. */ double vmaf_luminance_bt1886_eotf(double V); /* * Takes a normalized luma value in the [0, 1] range and returns a luminance value. */ double vmaf_luminance_pq_eotf(double V); /* * Takes a luma value, normalizes it and applies the given VmafEOTF * to return a luminance value. */ double vmaf_luminance_get_luminance(int sample, VmafLumaRange luma_range, VmafEOTF eotf); #endif