[vlc-commits] packetizer: mpegvideo: simplify color setup
Francois Cartegnie
git at videolan.org
Wed Aug 8 15:17:15 CEST 2018
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Aug 8 14:31:20 2018 +0200| [527714135b257dd4b5e2f7274de2a9088d9a430c] | committer: Francois Cartegnie
packetizer: mpegvideo: simplify color setup
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=527714135b257dd4b5e2f7274de2a9088d9a430c
---
modules/packetizer/Makefile.am | 12 ++--
modules/packetizer/h264_nal.c | 13 ++--
modules/packetizer/hevc_nal.c | 13 ++--
modules/packetizer/hxxx_nal.h | 151 ----------------------------------------
modules/packetizer/mpeg4video.c | 8 +--
modules/packetizer/mpegvideo.c | 57 ++-------------
6 files changed, 33 insertions(+), 221 deletions(-)
diff --git a/modules/packetizer/Makefile.am b/modules/packetizer/Makefile.am
index 6781d3dcdc..4945ed7aca 100644
--- a/modules/packetizer/Makefile.am
+++ b/modules/packetizer/Makefile.am
@@ -1,8 +1,10 @@
packetizerdir = $(pluginsdir)/packetizer
libpacketizer_copy_plugin_la_SOURCES = packetizer/copy.c
-libpacketizer_mpegvideo_plugin_la_SOURCES = packetizer/mpegvideo.c
-libpacketizer_mpeg4video_plugin_la_SOURCES = packetizer/mpeg4video.c
+libpacketizer_mpegvideo_plugin_la_SOURCES = packetizer/mpegvideo.c \
+ packetizer/iso_color_tables.h
+libpacketizer_mpeg4video_plugin_la_SOURCES = packetizer/mpeg4video.c \
+ packetizer/iso_color_tables.h
libpacketizer_mjpeg_plugin_la_SOURCES = packetizer/mjpeg.c
libpacketizer_mpeg4audio_plugin_la_SOURCES = packetizer/mpeg4audio.c
libpacketizer_mpegaudio_plugin_la_SOURCES = packetizer/mpegaudio.c
@@ -11,7 +13,8 @@ libpacketizer_h264_plugin_la_SOURCES = \
packetizer/h264_slice.c packetizer/h264_slice.h \
packetizer/h264.c packetizer/hxxx_nal.h \
packetizer/hxxx_sei.c packetizer/hxxx_sei.h \
- packetizer/hxxx_common.c packetizer/hxxx_common.h
+ packetizer/hxxx_common.c packetizer/hxxx_common.h \
+ packetizer/iso_color_tables.h
libpacketizer_vc1_plugin_la_SOURCES = packetizer/vc1.c \
packetizer/hxxx_nal.h
libpacketizer_mlp_plugin_la_SOURCES = packetizer/mlp.c
@@ -21,7 +24,8 @@ libpacketizer_hevc_plugin_la_SOURCES = packetizer/hevc.c \
packetizer/hevc_nal.h packetizer/hevc_nal.c \
packetizer/hxxx_sei.c packetizer/hxxx_sei.h \
packetizer/hxxx_nal.h \
- packetizer/hxxx_common.c packetizer/hxxx_common.h
+ packetizer/hxxx_common.c packetizer/hxxx_common.h \
+ packetizer/iso_color_tables.h
libpacketizer_a52_plugin_la_SOURCES = packetizer/a52.c packetizer/a52.h
libpacketizer_dts_plugin_la_SOURCES = packetizer/dts.c \
packetizer/dts_header.c packetizer/dts_header.h
diff --git a/modules/packetizer/h264_nal.c b/modules/packetizer/h264_nal.c
index 6e8f9df1d8..d5144c69d8 100644
--- a/modules/packetizer/h264_nal.c
+++ b/modules/packetizer/h264_nal.c
@@ -25,6 +25,7 @@
#include "h264_nal.h"
#include "hxxx_nal.h"
+#include "iso_color_tables.h"
#include <vlc_bits.h>
#include <vlc_boxes.h>
@@ -460,9 +461,9 @@ static bool h264_parse_sequence_parameter_set_rbsp( bs_t *p_bs,
}
else
{
- p_sps->vui.colour.i_colour_primaries = HXXX_PRIMARIES_UNSPECIFIED;
- p_sps->vui.colour.i_transfer_characteristics = HXXX_TRANSFER_UNSPECIFIED;
- p_sps->vui.colour.i_matrix_coefficients = HXXX_MATRIX_UNSPECIFIED;
+ p_sps->vui.colour.i_colour_primaries = ISO_23001_8_CP_UNSPECIFIED;
+ p_sps->vui.colour.i_transfer_characteristics = ISO_23001_8_TC_UNSPECIFIED;
+ p_sps->vui.colour.i_matrix_coefficients = ISO_23001_8_MC_UNSPECIFIED;
}
}
@@ -806,11 +807,11 @@ bool h264_get_colorimetry( const h264_sequence_parameter_set_t *p_sps,
if( !p_sps->vui.b_valid )
return false;
*p_primaries =
- hxxx_colour_primaries_to_vlc( p_sps->vui.colour.i_colour_primaries );
+ iso_23001_8_cp_to_vlc_primaries( p_sps->vui.colour.i_colour_primaries );
*p_transfer =
- hxxx_transfer_characteristics_to_vlc( p_sps->vui.colour.i_transfer_characteristics );
+ iso_23001_8_tc_to_vlc_xfer( p_sps->vui.colour.i_transfer_characteristics );
*p_colorspace =
- hxxx_matrix_coeffs_to_vlc( p_sps->vui.colour.i_matrix_coefficients );
+ iso_23001_8_mc_to_vlc_coeffs( p_sps->vui.colour.i_matrix_coefficients );
*p_full_range = p_sps->vui.colour.b_full_range;
return true;
}
diff --git a/modules/packetizer/hevc_nal.c b/modules/packetizer/hevc_nal.c
index 117088a9d3..b88c4eca77 100644
--- a/modules/packetizer/hevc_nal.c
+++ b/modules/packetizer/hevc_nal.c
@@ -23,6 +23,7 @@
#include "hevc_nal.h"
#include "hxxx_nal.h"
+#include "iso_color_tables.h"
#include <vlc_common.h>
#include <vlc_bits.h>
@@ -472,9 +473,9 @@ static bool hevc_parse_vui_parameters_rbsp( bs_t *p_bs, hevc_vui_parameters_t *p
}
else
{
- p_vui->vs.colour.colour_primaries = HXXX_PRIMARIES_UNSPECIFIED;
- p_vui->vs.colour.transfer_characteristics = HXXX_TRANSFER_UNSPECIFIED;
- p_vui->vs.colour.matrix_coeffs = HXXX_MATRIX_UNSPECIFIED;
+ p_vui->vs.colour.colour_primaries = ISO_23001_8_CP_UNSPECIFIED;
+ p_vui->vs.colour.transfer_characteristics = ISO_23001_8_TC_UNSPECIFIED;
+ p_vui->vs.colour.matrix_coeffs = ISO_23001_8_MC_UNSPECIFIED;
}
}
@@ -1179,11 +1180,11 @@ bool hevc_get_colorimetry( const hevc_sequence_parameter_set_t *p_sps,
if( !p_sps->vui_parameters_present_flag )
return false;
*p_primaries =
- hxxx_colour_primaries_to_vlc( p_sps->vui.vs.colour.colour_primaries );
+ iso_23001_8_cp_to_vlc_primaries( p_sps->vui.vs.colour.colour_primaries );
*p_transfer =
- hxxx_transfer_characteristics_to_vlc( p_sps->vui.vs.colour.transfer_characteristics );
+ iso_23001_8_tc_to_vlc_xfer( p_sps->vui.vs.colour.transfer_characteristics );
*p_colorspace =
- hxxx_matrix_coeffs_to_vlc( p_sps->vui.vs.colour.matrix_coeffs );
+ iso_23001_8_mc_to_vlc_coeffs( p_sps->vui.vs.colour.matrix_coeffs );
*p_full_range = p_sps->vui.vs.video_full_range_flag;
return true;
}
diff --git a/modules/packetizer/hxxx_nal.h b/modules/packetizer/hxxx_nal.h
index 69d6c8420c..4da89a01b7 100644
--- a/modules/packetizer/hxxx_nal.h
+++ b/modules/packetizer/hxxx_nal.h
@@ -27,157 +27,6 @@
static const uint8_t annexb_startcode4[] = { 0x00, 0x00, 0x00, 0x01 };
#define annexb_startcode3 (&annexb_startcode4[1])
-/* Annex E: Colour primaries */
-enum hxxx_colour_primaries
-{
- HXXX_PRIMARIES_RESERVED0 = 0,
- HXXX_PRIMARIES_BT709 = 1,
- HXXX_PRIMARIES_UNSPECIFIED = 2,
- HXXX_PRIMARIES_RESERVED3 = 3,
- HXXX_PRIMARIES_BT470M = 4,
- HXXX_PRIMARIES_BT470BG = 5,
- HXXX_PRIMARIES_BT601_525 = 6,
- HXXX_PRIMARIES_SMTPE_240M = 7,
- HXXX_PRIMARIES_GENERIC_FILM = 8,
- HXXX_PRIMARIES_BT2020 = 9,
- HXXX_PRIMARIES_SMPTE_ST_428 = 10,
-};
-
-static inline video_color_primaries_t
-hxxx_colour_primaries_to_vlc( enum hxxx_colour_primaries i_colour )
-{
- switch( i_colour )
- {
- case HXXX_PRIMARIES_BT470BG:
- return COLOR_PRIMARIES_BT601_625;
-
- case HXXX_PRIMARIES_BT601_525:
- case HXXX_PRIMARIES_SMTPE_240M:
- return COLOR_PRIMARIES_BT601_625;
-
- case HXXX_PRIMARIES_BT709:
- return COLOR_PRIMARIES_BT709;
-
- case HXXX_PRIMARIES_BT2020:
- return COLOR_PRIMARIES_BT2020;
-
- case HXXX_PRIMARIES_BT470M:
- case HXXX_PRIMARIES_RESERVED0:
- case HXXX_PRIMARIES_UNSPECIFIED:
- case HXXX_PRIMARIES_RESERVED3:
- case HXXX_PRIMARIES_GENERIC_FILM:
- case HXXX_PRIMARIES_SMPTE_ST_428:
- default:
- return COLOR_PRIMARIES_UNDEF;
- }
-}
-
-/* Annex E: Transfer characteristics */
-enum hxxx_transfer_characteristics
-{
- HXXX_TRANSFER_RESERVED0 = 0,
- HXXX_TRANSFER_BT709 = 1,
- HXXX_TRANSFER_UNSPECIFIED = 2,
- HXXX_TRANSFER_RESERVED3 = 3,
- HXXX_TRANSFER_BT470M = 4,
- HXXX_TRANSFER_BT470BG = 5,
- HXXX_TRANSFER_BT601_525 = 6,
- HXXX_TRANSFER_SMTPE_240M = 7,
- HXXX_TRANSFER_LINEAR = 8,
- HXXX_TRANSFER_LOG = 9,
- HXXX_TRANSFER_LOG_SQRT = 10,
- HXXX_TRANSFER_IEC61966_2_4 = 11,
- HXXX_TRANSFER_BT1361 = 12,
- HXXX_TRANSFER_IEC61966_2_1 = 13,
- HXXX_TRANSFER_BT2020_V14 = 14,
- HXXX_TRANSFER_BT2020_V15 = 15,
- HXXX_TRANSFER_SMPTE_ST_2084 = 16,
- HXXX_TRANSFER_SMPTE_ST_428 = 17,
- HXXX_TRANSFER_ARIB_STD_B67 = 18,
-};
-
-static inline video_transfer_func_t
-hxxx_transfer_characteristics_to_vlc( enum hxxx_transfer_characteristics i_transfer )
-{
- switch( i_transfer )
- {
- case HXXX_TRANSFER_LINEAR:
- return TRANSFER_FUNC_LINEAR;
-
- case HXXX_TRANSFER_BT470M:
- return TRANSFER_FUNC_SRGB;
-
- case HXXX_TRANSFER_BT709:
- case HXXX_TRANSFER_BT601_525:
- case HXXX_TRANSFER_BT2020_V14:
- case HXXX_TRANSFER_BT2020_V15:
- return TRANSFER_FUNC_BT709;
-
- case HXXX_TRANSFER_SMPTE_ST_2084:
- return TRANSFER_FUNC_SMPTE_ST2084;
-
- case HXXX_TRANSFER_ARIB_STD_B67:
- return TRANSFER_FUNC_ARIB_B67;
-
- case HXXX_TRANSFER_RESERVED0:
- case HXXX_TRANSFER_UNSPECIFIED:
- case HXXX_TRANSFER_RESERVED3:
- case HXXX_TRANSFER_BT470BG:
- case HXXX_TRANSFER_SMTPE_240M:
- case HXXX_TRANSFER_LOG:
- case HXXX_TRANSFER_LOG_SQRT:
- case HXXX_TRANSFER_IEC61966_2_4:
- case HXXX_TRANSFER_BT1361:
- case HXXX_TRANSFER_IEC61966_2_1:
- case HXXX_TRANSFER_SMPTE_ST_428:
- default:
- return TRANSFER_FUNC_UNDEF;
- };
-}
-
-/* Annex E: Matrix coefficients */
-enum hxxx_matrix_coeffs
-{
- HXXX_MATRIX_IDENTITY = 0,
- HXXX_MATRIX_BT709 = 1,
- HXXX_MATRIX_UNSPECIFIED = 2,
- HXXX_MATRIX_RESERVED = 3,
- HXXX_MATRIX_FCC = 4,
- HXXX_MATRIX_BT470BG = 5,
- HXXX_MATRIX_BT601_525 = 6,
- HXXX_MATRIX_SMTPE_240M = 7,
- HXXX_MATRIX_YCGCO = 8,
- HXXX_MATRIX_BT2020_NCL = 9,
- HXXX_MATRIX_BT2020_CL = 10,
-};
-
-static inline video_color_space_t
-hxxx_matrix_coeffs_to_vlc( enum hxxx_matrix_coeffs i_transfer )
-{
- switch( i_transfer )
- {
- case HXXX_MATRIX_BT470BG:
- case HXXX_MATRIX_BT601_525:
- return COLOR_SPACE_BT601;
-
- case HXXX_MATRIX_BT709:
- return COLOR_SPACE_BT709;
-
- case HXXX_MATRIX_BT2020_NCL:
- case HXXX_MATRIX_BT2020_CL:
- return COLOR_SPACE_BT2020;
-
- case HXXX_MATRIX_IDENTITY:
- case HXXX_MATRIX_UNSPECIFIED:
- case HXXX_MATRIX_RESERVED:
- case HXXX_MATRIX_FCC:
- case HXXX_MATRIX_SMTPE_240M:
- case HXXX_MATRIX_YCGCO:
- default:
- return COLOR_SPACE_UNDEF;
- }
-}
-
/* strips any AnnexB startcode [0] 0 0 1 */
static inline bool hxxx_strip_AnnexB_startcode( const uint8_t **pp_data, size_t *pi_data )
{
diff --git a/modules/packetizer/mpeg4video.c b/modules/packetizer/mpeg4video.c
index efd1ad0ab1..a79fbb625f 100644
--- a/modules/packetizer/mpeg4video.c
+++ b/modules/packetizer/mpeg4video.c
@@ -41,7 +41,7 @@
#include <vlc_block_helper.h>
#include "packetizer_helper.h"
#include "startcode_helper.h"
-#include "hxxx_nal.h" /* colour values/mappings */
+#include "iso_color_tables.h"
/*****************************************************************************
* Module descriptor
@@ -472,9 +472,9 @@ static int ParseVO( decoder_t *p_dec, block_t *p_vo )
if( p_dec->fmt_in.video.primaries == COLOR_PRIMARIES_UNDEF )
{
- p_dec->fmt_out.video.primaries = hxxx_colour_primaries_to_vlc( colour_primaries );
- p_dec->fmt_out.video.transfer = hxxx_transfer_characteristics_to_vlc( colour_xfer );
- p_dec->fmt_out.video.space = hxxx_matrix_coeffs_to_vlc( colour_matrix_coeff );
+ p_dec->fmt_out.video.primaries = iso_23001_8_cp_to_vlc_primaries( colour_primaries );
+ p_dec->fmt_out.video.transfer = iso_23001_8_tc_to_vlc_xfer( colour_xfer );
+ p_dec->fmt_out.video.space = iso_23001_8_mc_to_vlc_coeffs( colour_matrix_coeff );
p_dec->fmt_out.video.b_color_range_full = full_range;
}
}
diff --git a/modules/packetizer/mpegvideo.c b/modules/packetizer/mpegvideo.c
index c1661d3c3c..1309bee7a2 100644
--- a/modules/packetizer/mpegvideo.c
+++ b/modules/packetizer/mpegvideo.c
@@ -54,6 +54,7 @@
#include "../codec/cc.h"
#include "packetizer_helper.h"
#include "startcode_helper.h"
+#include "iso_color_tables.h"
#include <limits.h>
@@ -813,56 +814,12 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
if( contains_color_description && p_frag->i_buffer > 11 )
{
- uint8_t color_primaries = p_frag->p_buffer[5];
- uint8_t color_transfer = p_frag->p_buffer[6];
- uint8_t color_matrix = p_frag->p_buffer[7];
- switch( color_primaries )
- {
- case 1:
- p_dec->fmt_out.video.primaries = COLOR_PRIMARIES_BT709;
- break;
- case 4: /* BT.470M */
- case 5: /* BT.470BG */
- p_dec->fmt_out.video.primaries = COLOR_PRIMARIES_BT601_625;
- break;
- case 6: /* SMPTE 170M */
- case 7: /* SMPTE 240M */
- p_dec->fmt_out.video.primaries = COLOR_PRIMARIES_BT601_525;
- break;
- default:
- break;
- }
- switch( color_transfer )
- {
- case 1:
- p_dec->fmt_out.video.transfer = TRANSFER_FUNC_BT709;
- break;
- case 4: /* BT.470M assumed gamma 2.2 */
- p_dec->fmt_out.video.transfer = TRANSFER_FUNC_SRGB;
- break;
- case 5: /* BT.470BG */
- case 6: /* SMPTE 170M */
- p_dec->fmt_out.video.transfer = TRANSFER_FUNC_BT2020;
- break;
- case 8: /* Linear */
- p_dec->fmt_out.video.transfer = TRANSFER_FUNC_LINEAR;
- break;
- default:
- break;
- }
- switch( color_matrix )
- {
- case 1:
- p_dec->fmt_out.video.space = COLOR_SPACE_BT709;
- break;
- case 5: /* BT.470BG */
- case 6: /* SMPTE 170 M */
- case 7: /* SMPTE 240 M */
- p_dec->fmt_out.video.space = COLOR_SPACE_BT601;
- break;
- default:
- break;
- }
+ p_dec->fmt_out.video.primaries =
+ iso_23001_8_cp_to_vlc_primaries( p_frag->p_buffer[5] );
+ p_dec->fmt_out.video.transfer =
+ iso_23001_8_tc_to_vlc_xfer( p_frag->p_buffer[6] );
+ p_dec->fmt_out.video.space =
+ iso_23001_8_mc_to_vlc_coeffs( p_frag->p_buffer[7] );
}
}
More information about the vlc-commits
mailing list