avutil: Extract gamma determination from PNG encoder for future use. Adds private avpriv_get_gamma_from_trc() function to libavutil.
Signed-off-by: Kevin Wheatley <kevin.j.wheatley@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							parent
							
								
									6db20926c3
								
							
						
					
					
						commit
						86b59e6a50
					
				@ -28,6 +28,7 @@
 | 
			
		||||
#include "libavutil/avassert.h"
 | 
			
		||||
#include "libavutil/libm.h"
 | 
			
		||||
#include "libavutil/opt.h"
 | 
			
		||||
#include "libavutil/color_utils.h"
 | 
			
		||||
 | 
			
		||||
#include <zlib.h>
 | 
			
		||||
 | 
			
		||||
@ -277,31 +278,9 @@ static int png_get_chrm(enum AVColorPrimaries prim,  uint8_t *buf)
 | 
			
		||||
 | 
			
		||||
static int png_get_gama(enum AVColorTransferCharacteristic trc, uint8_t *buf)
 | 
			
		||||
{
 | 
			
		||||
    double gamma;
 | 
			
		||||
    switch (trc) {
 | 
			
		||||
        case AVCOL_TRC_BT709:
 | 
			
		||||
        case AVCOL_TRC_SMPTE170M:
 | 
			
		||||
        case AVCOL_TRC_SMPTE240M:
 | 
			
		||||
        case AVCOL_TRC_BT1361_ECG:
 | 
			
		||||
        case AVCOL_TRC_BT2020_10:
 | 
			
		||||
        case AVCOL_TRC_BT2020_12:
 | 
			
		||||
            /* these share a segmented TRC, but gamma 1.961 is a close
 | 
			
		||||
              approximation, and also more correct for decoding content */
 | 
			
		||||
            gamma = 1.961;
 | 
			
		||||
            break;
 | 
			
		||||
        case AVCOL_TRC_GAMMA22:
 | 
			
		||||
        case AVCOL_TRC_IEC61966_2_1:
 | 
			
		||||
            gamma = 2.2;
 | 
			
		||||
            break;
 | 
			
		||||
        case AVCOL_TRC_GAMMA28:
 | 
			
		||||
            gamma = 2.8;
 | 
			
		||||
            break;
 | 
			
		||||
        case AVCOL_TRC_LINEAR:
 | 
			
		||||
            gamma = 1.0;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return 0;
 | 
			
		||||
    }
 | 
			
		||||
    double gamma = avpriv_get_gamma_from_trc(trc);
 | 
			
		||||
    if (gamma <= 1e-6)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    AV_WB32_PNG(buf, 1.0 / gamma);
 | 
			
		||||
    return 1;
 | 
			
		||||
 | 
			
		||||
@ -88,6 +88,7 @@ OBJS = adler32.o                                                        \
 | 
			
		||||
       cast5.o                                                          \
 | 
			
		||||
       camellia.o                                                       \
 | 
			
		||||
       channel_layout.o                                                 \
 | 
			
		||||
       color_utils.o                                                    \
 | 
			
		||||
       cpu.o                                                            \
 | 
			
		||||
       crc.o                                                            \
 | 
			
		||||
       des.o                                                            \
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										52
									
								
								libavutil/color_utils.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								libavutil/color_utils.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2015 Kevin Wheatley <kevin.j.wheatley@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of FFmpeg.
 | 
			
		||||
 *
 | 
			
		||||
 * FFmpeg is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * FFmpeg is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with FFmpeg; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "libavutil/color_utils.h"
 | 
			
		||||
#include "libavutil/pixfmt.h"
 | 
			
		||||
 | 
			
		||||
double avpriv_get_gamma_from_trc(enum AVColorTransferCharacteristic trc)
 | 
			
		||||
{
 | 
			
		||||
    double gamma;
 | 
			
		||||
    switch (trc) {
 | 
			
		||||
        case AVCOL_TRC_BT709:
 | 
			
		||||
        case AVCOL_TRC_SMPTE170M:
 | 
			
		||||
        case AVCOL_TRC_SMPTE240M:
 | 
			
		||||
        case AVCOL_TRC_BT1361_ECG:
 | 
			
		||||
        case AVCOL_TRC_BT2020_10:
 | 
			
		||||
        case AVCOL_TRC_BT2020_12:
 | 
			
		||||
            /* these share a segmented TRC, but gamma 1.961 is a close
 | 
			
		||||
              approximation, and also more correct for decoding content */
 | 
			
		||||
            gamma = 1.961;
 | 
			
		||||
            break;
 | 
			
		||||
        case AVCOL_TRC_GAMMA22:
 | 
			
		||||
        case AVCOL_TRC_IEC61966_2_1:
 | 
			
		||||
            gamma = 2.2;
 | 
			
		||||
            break;
 | 
			
		||||
        case AVCOL_TRC_GAMMA28:
 | 
			
		||||
            gamma = 2.8;
 | 
			
		||||
            break;
 | 
			
		||||
        case AVCOL_TRC_LINEAR:
 | 
			
		||||
            gamma = 1.0;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            gamma = 0.0; // Unknown value representation
 | 
			
		||||
    }
 | 
			
		||||
    return gamma;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								libavutil/color_utils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								libavutil/color_utils.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2015 Kevin Wheatley <kevin.j.wheatley@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of FFmpeg.
 | 
			
		||||
 *
 | 
			
		||||
 * FFmpeg is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * FFmpeg is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with FFmpeg; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AVUTIL_COLOR_UTILS_H
 | 
			
		||||
#define AVUTIL_COLOR_UTILS_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "libavutil/pixfmt.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Determine a suitable 'gamma' value to match the supplied
 | 
			
		||||
 * AVColorTransferCharacteristic.
 | 
			
		||||
 *
 | 
			
		||||
 * See Apple Technical Note TN2257 (https://developer.apple.com/library/mac/technotes/tn2257/_index.html)
 | 
			
		||||
 *
 | 
			
		||||
 * @return Will return an approximation to the simple gamma function matching
 | 
			
		||||
 *         the supplied Transfer Characteristic, Will return 0.0 for any
 | 
			
		||||
 *         we cannot reasonably match against.
 | 
			
		||||
 */
 | 
			
		||||
double avpriv_get_gamma_from_trc(enum AVColorTransferCharacteristic trc);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@ -56,7 +56,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define LIBAVUTIL_VERSION_MAJOR  54
 | 
			
		||||
#define LIBAVUTIL_VERSION_MINOR  19
 | 
			
		||||
#define LIBAVUTIL_VERSION_MINOR  20
 | 
			
		||||
#define LIBAVUTIL_VERSION_MICRO 100
 | 
			
		||||
 | 
			
		||||
#define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user