[vlc-commits] es: change the video_format_t color range to an enum

Steve Lhomme git at videolan.org
Mon Dec 17 13:20:34 CET 2018


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Thu Dec 13 09:12:32 2018 +0100| [737b8faf33ef08d8d87f9108a7b0832b47e81cf2] | committer: Steve Lhomme

es: change the video_format_t color range to an enum

In many cases we don't know the value so it's better to use UNDEF.

A boolean also prevents from overwriting a value only when it's undefined.

The es_out display now separates the color space and the color range. One may
be known without the other.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=737b8faf33ef08d8d87f9108a7b0832b47e81cf2
---

 include/vlc_es.h                             |  2 +-
 modules/access/screen/win32.c                |  2 +-
 modules/access/v4l2/demux.c                  |  6 +++---
 modules/codec/aom.c                          |  2 +-
 modules/codec/avcodec/avcommon.h             | 13 ++++++++++++-
 modules/codec/avcodec/video.c                | 12 ++++--------
 modules/codec/dav1d.c                        |  2 +-
 modules/codec/jpeg.c                         |  2 +-
 modules/codec/png.c                          |  2 +-
 modules/codec/videotoolbox.m                 |  2 +-
 modules/codec/vpx.c                          |  2 +-
 modules/codec/x264.c                         |  2 +-
 modules/demux/mkv/matroska_segment_parse.cpp |  4 ++--
 modules/demux/mp4/essetup.c                  |  9 ++++++---
 modules/demux/mp4/heif.c                     |  3 ++-
 modules/hw/d3d9/dxva2_deinterlace.c          |  3 ++-
 modules/mux/mp4/libmp4mux.c                  |  2 +-
 modules/packetizer/av1.c                     |  2 +-
 modules/packetizer/av1_obu.c                 |  8 ++++----
 modules/packetizer/h264.c                    |  6 +++++-
 modules/packetizer/hevc.c                    |  4 +++-
 modules/packetizer/mpeg4video.c              |  2 +-
 modules/stream_out/transcode/encoder/video.c |  2 +-
 modules/video_output/placebo_utils.c         |  2 +-
 modules/video_output/win32/direct3d11.c      |  4 ++--
 src/input/es_out.c                           | 18 ++++++++++++++----
 26 files changed, 73 insertions(+), 45 deletions(-)

diff --git a/include/vlc_es.h b/include/vlc_es.h
index f123b5ddd6..9f0a6b040f 100644
--- a/include/vlc_es.h
+++ b/include/vlc_es.h
@@ -374,7 +374,7 @@ struct video_format_t
     video_color_primaries_t primaries;                  /**< color primaries */
     video_transfer_func_t transfer;                   /**< transfer function */
     video_color_space_t space;                        /**< YCbCr color space */
-    bool b_color_range_full;                    /**< 0-255 instead of 16-235 */
+    video_color_range_t color_range;            /**< 0-255 instead of 16-235 */
     video_chroma_location_t chroma_location;      /**< YCbCr chroma location */
 
     video_multiview_mode_t multiview_mode;        /** Multiview mode, 2D, 3D */
diff --git a/modules/access/screen/win32.c b/modules/access/screen/win32.c
index adf4fdb386..9db41cc6ba 100644
--- a/modules/access/screen/win32.c
+++ b/modules/access/screen/win32.c
@@ -136,7 +136,7 @@ int screen_InitCapture( demux_t *p_demux )
     p_sys->fmt.video.i_sar_num = p_sys->fmt.video.i_sar_den = 1;
     p_sys->fmt.video.i_chroma         = i_chroma;
     p_sys->fmt.video.transfer         = TRANSFER_FUNC_SRGB;
-    p_sys->fmt.video.b_color_range_full = true;
+    p_sys->fmt.video.color_range      = COLOR_RANGE_FULL;
 
     switch( i_chroma )
     {
diff --git a/modules/access/v4l2/demux.c b/modules/access/v4l2/demux.c
index 961ec32840..782398c87a 100644
--- a/modules/access/v4l2/demux.c
+++ b/modules/access/v4l2/demux.c
@@ -436,7 +436,7 @@ static int InitVideo (demux_t *demux, int fd, uint32_t caps)
             es_fmt.video.primaries = COLOR_PRIMARIES_SRGB;
             es_fmt.video.transfer = TRANSFER_FUNC_SRGB;
             es_fmt.video.space = COLOR_SPACE_BT601;
-            es_fmt.video.b_color_range_full = true;
+            es_fmt.video.color_range = COLOR_RANGE_FULL;
             break;
         case V4L2_COLORSPACE_SRGB:
             es_fmt.video.primaries = COLOR_PRIMARIES_SRGB;
@@ -529,10 +529,10 @@ static int InitVideo (demux_t *demux, int fd, uint32_t caps)
         case V4L2_QUANTIZATION_DEFAULT:
             break;
         case V4L2_QUANTIZATION_FULL_RANGE:
-            es_fmt.video.b_color_range_full = true;
+            es_fmt.video.color_range = COLOR_RANGE_FULL;
             break;
         case V4L2_QUANTIZATION_LIM_RANGE:
-            es_fmt.video.b_color_range_full = false;
+            es_fmt.video.color_range = COLOR_RANGE_LIMITED;
             break;
         default:
             msg_Err (demux, "unknown quantization: %u",
diff --git a/modules/codec/aom.c b/modules/codec/aom.c
index 6c130f4114..7b95b18661 100644
--- a/modules/codec/aom.c
+++ b/modules/codec/aom.c
@@ -225,7 +225,7 @@ static void OutputFrame(decoder_t *dec, const struct aom_image *img)
         v->primaries = iso_23001_8_cp_to_vlc_primaries(img->cp);
         v->transfer = iso_23001_8_tc_to_vlc_xfer(img->tc);
         v->space = iso_23001_8_mc_to_vlc_coeffs(img->mc);
-        v->b_color_range_full = img->range == AOM_CR_FULL_RANGE;
+        v->color_range = img->range == AOM_CR_FULL_RANGE ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
     }
 
     dec->fmt_out.video.projection_mode = dec->fmt_in.video.projection_mode;
diff --git a/modules/codec/avcodec/avcommon.h b/modules/codec/avcodec/avcommon.h
index ab6e7e72e3..9e43db4360 100644
--- a/modules/codec/avcodec/avcommon.h
+++ b/modules/codec/avcodec/avcommon.h
@@ -143,8 +143,19 @@ static inline vlc_rational_t FromAVRational(const AVRational rat)
 
 static inline void set_video_color_settings( const video_format_t *p_fmt, AVCodecContext *p_context )
 {
-    if( p_fmt->b_color_range_full )
+    switch( p_fmt->color_range )
+    {
+    case COLOR_RANGE_FULL:
         p_context->color_range = AVCOL_RANGE_JPEG;
+        break;
+    case COLOR_RANGE_LIMITED:
+        p_context->color_range = AVCOL_RANGE_MPEG;
+    case COLOR_RANGE_UNDEF: /* do nothing */
+        break;
+    default:
+        p_context->color_range = AVCOL_RANGE_UNSPECIFIED;
+        break;
+    }
 
     switch( p_fmt->space )
     {
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 50cae13171..9e83695e73 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -238,19 +238,15 @@ static int lavc_GetVideoFormat(decoder_t *dec, video_format_t *restrict fmt,
                                  * __MAX(ctx->ticks_per_frame, 1);
     }
 
-    /* FIXME we should only set the known values and let the core decide
-     * later of fallbacks, but we can't do that with a boolean */
     switch ( ctx->color_range )
     {
     case AVCOL_RANGE_JPEG:
-        fmt->b_color_range_full = true;
-        break;
-    case AVCOL_RANGE_UNSPECIFIED:
-        fmt->b_color_range_full = !vlc_fourcc_IsYUV( fmt->i_chroma );
+        fmt->color_range = COLOR_RANGE_FULL;
         break;
     case AVCOL_RANGE_MPEG:
-    default:
-        fmt->b_color_range_full = false;
+        fmt->color_range = COLOR_RANGE_LIMITED;
+        break;
+    default: /* do nothing */
         break;
     }
 
diff --git a/modules/codec/dav1d.c b/modules/codec/dav1d.c
index 74f5984574..363e9e7a78 100644
--- a/modules/codec/dav1d.c
+++ b/modules/codec/dav1d.c
@@ -127,7 +127,7 @@ static int NewPicture(Dav1dPicture *img, void *cookie)
         v->primaries = iso_23001_8_cp_to_vlc_primaries(img->seq_hdr->pri);
         v->transfer = iso_23001_8_tc_to_vlc_xfer(img->seq_hdr->trc);
         v->space = iso_23001_8_mc_to_vlc_coeffs(img->seq_hdr->mtrx);
-        v->b_color_range_full = img->seq_hdr->color_range;
+        v->color_range = img->seq_hdr->color_range ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
     }
 
     v->projection_mode = dec->fmt_in.video.projection_mode;
diff --git a/modules/codec/jpeg.c b/modules/codec/jpeg.c
index e72382cd9a..5f50f80819 100644
--- a/modules/codec/jpeg.c
+++ b/modules/codec/jpeg.c
@@ -180,7 +180,7 @@ static int OpenDecoder(vlc_object_t *p_this)
     p_dec->fmt_out.video.i_chroma =
     p_dec->fmt_out.i_codec = VLC_CODEC_RGB24;
     p_dec->fmt_out.video.transfer = TRANSFER_FUNC_SRGB;
-    p_dec->fmt_out.video.b_color_range_full = true;
+    p_dec->fmt_out.video.color_range = COLOR_RANGE_FULL;
     video_format_FixRgb(&p_dec->fmt_out.video);
 
     return VLC_SUCCESS;
diff --git a/modules/codec/png.c b/modules/codec/png.c
index 4f4c86b121..ad63e6321f 100644
--- a/modules/codec/png.c
+++ b/modules/codec/png.c
@@ -126,7 +126,7 @@ static int OpenDecoder( vlc_object_t *p_this )
     /* Set output properties */
     p_dec->fmt_out.i_codec = VLC_CODEC_RGBA;
     p_dec->fmt_out.video.transfer = TRANSFER_FUNC_SRGB;
-    p_dec->fmt_out.video.b_color_range_full = true;
+    p_dec->fmt_out.video.color_range = COLOR_RANGE_FULL;
 
     /* Set callbacks */
     p_dec->pf_decode = DecodeBlock;
diff --git a/modules/codec/videotoolbox.m b/modules/codec/videotoolbox.m
index e7753aebee..755779ff63 100644
--- a/modules/codec/videotoolbox.m
+++ b/modules/codec/videotoolbox.m
@@ -488,7 +488,7 @@ static bool ConfigureVoutH264(decoder_t *p_dec)
             p_dec->fmt_out.video.primaries = primaries;
             p_dec->fmt_out.video.transfer = transfer;
             p_dec->fmt_out.video.space = colorspace;
-            p_dec->fmt_out.video.b_color_range_full = full_range;
+            p_dec->fmt_out.video.color_range = full_range ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
         }
     }
 
diff --git a/modules/codec/vpx.c b/modules/codec/vpx.c
index 7c111e66d0..f03c7fae62 100644
--- a/modules/codec/vpx.c
+++ b/modules/codec/vpx.c
@@ -269,7 +269,7 @@ static int Decode(decoder_t *dec, block_t *block)
         v->primaries = vpx_color_mapping_table[img->cs].primaries;
         v->transfer = vpx_color_mapping_table[img->cs].transfer;
         v->space = vpx_color_mapping_table[img->cs].space;
-        v->b_color_range_full = img->range == VPX_CR_FULL_RANGE;
+        v->color_range = img->range == VPX_CR_FULL_RANGE ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
     }
 
     dec->fmt_out.video.projection_mode = dec->fmt_in.video.projection_mode;
diff --git a/modules/codec/x264.c b/modules/codec/x264.c
index 3802b24f4f..209d4a288c 100644
--- a/modules/codec/x264.c
+++ b/modules/codec/x264.c
@@ -816,7 +816,7 @@ static int  Open ( vlc_object_t *p_this )
         return VLC_ENOMEM;
 
     fullrange = var_GetBool( p_enc, SOUT_CFG_PREFIX "fullrange" );
-    fullrange |= p_enc->fmt_in.video.b_color_range_full;
+    fullrange |= p_enc->fmt_in.video.color_range == COLOR_RANGE_FULL;
     p_enc->fmt_in.i_codec = fullrange ? VLC_CODEC_J420 : VLC_CODEC_I420;
     p_sys->i_colorspace = X264_CSP_I420;
     char *psz_profile = var_GetString( p_enc, SOUT_CFG_PREFIX "profile" );
diff --git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp
index 549519e98d..e122530955 100644
--- a/modules/demux/mkv/matroska_segment_parse.cpp
+++ b/modules/demux/mkv/matroska_segment_parse.cpp
@@ -709,11 +709,11 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
             switch( static_cast<uint8>(range) )
             {
             case 1:
-                vars.tk->fmt.video.b_color_range_full = 0;
+                vars.tk->fmt.video.color_range = COLOR_RANGE_LIMITED;
                 name ="limited";
                 break;
             case 2:
-                vars.tk->fmt.video.b_color_range_full = 1;
+                vars.tk->fmt.video.color_range = COLOR_RANGE_FULL;
                 name ="full";
                 break;
             case 3: // Matrix coefficients + Transfer characteristics
diff --git a/modules/demux/mp4/essetup.c b/modules/demux/mp4/essetup.c
index 0af20f89e1..bd864e1b8a 100644
--- a/modules/demux/mp4/essetup.c
+++ b/modules/demux/mp4/essetup.c
@@ -504,8 +504,11 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample )
                     iso_23001_8_tc_to_vlc_xfer( BOXDATA( p_colr )->nclc.i_transfer_function_idx );
             p_track->fmt.video.space =
                     iso_23001_8_mc_to_vlc_coeffs( BOXDATA( p_colr )->nclc.i_matrix_idx );
-            p_track->fmt.video.b_color_range_full = BOXDATA(p_colr)->i_type == VLC_FOURCC( 'n', 'c', 'l', 'x' ) &&
-                    (BOXDATA(p_colr)->nclc.i_full_range >> 7) != 0;
+            if ( BOXDATA(p_colr)->i_type == VLC_FOURCC( 'n', 'c', 'l', 'x' ) &&
+                    (BOXDATA(p_colr)->nclc.i_full_range >> 7) != 0 )
+                p_track->fmt.video.color_range = COLOR_RANGE_FULL;
+            else
+                p_track->fmt.video.color_range = COLOR_RANGE_LIMITED;
         }
     }
 
@@ -725,7 +728,7 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample )
                             iso_23001_8_mc_to_vlc_coeffs( p_data->i_matrix_coeffs );
                 }
 
-                p_track->fmt.video.b_color_range_full = p_data->i_fullrange;
+                p_track->fmt.video.color_range = p_data->i_fullrange ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
                 p_track->fmt.video.i_bits_per_pixel = p_data->i_bit_depth;
 
                 if( p_data->i_codec_init_datasize )
diff --git a/modules/demux/mp4/heif.c b/modules/demux/mp4/heif.c
index d595ca9865..dae18d2497 100644
--- a/modules/demux/mp4/heif.c
+++ b/modules/demux/mp4/heif.c
@@ -390,7 +390,8 @@ static int SetPictureProperties( demux_t *p_demux, uint32_t i_item_id,
                                             p_prop->data.p_colr->nclc.i_transfer_function_idx );
                     fmt->video.space = iso_23001_8_mc_to_vlc_coeffs(
                                         p_prop->data.p_colr->nclc.i_matrix_idx );
-                    fmt->video.b_color_range_full = p_prop->data.p_colr->nclc.i_full_range;
+                    fmt->video.color_range = p_prop->data.p_colr->nclc.i_full_range ?
+                                COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
                     break;
                 case ATOM_clli:
                     fmt->video.lighting.MaxCLL = p_prop->data.p_CoLL->i_maxCLL;
diff --git a/modules/hw/d3d9/dxva2_deinterlace.c b/modules/hw/d3d9/dxva2_deinterlace.c
index 0f44ca442c..01b9c6f696 100644
--- a/modules/hw/d3d9/dxva2_deinterlace.c
+++ b/modules/hw/d3d9/dxva2_deinterlace.c
@@ -87,7 +87,8 @@ static void Flush(filter_t *filter)
 static void FillExtendedFormat( const video_format_t *p_fmt,
                                 DXVA2_ExtendedFormat *out )
 {
-    out->NominalRange = p_fmt->b_color_range_full ? DXVA2_NominalRange_0_255 : DXVA2_NominalRange_16_235;
+    out->NominalRange = p_fmt->color_range == COLOR_RANGE_FULL ?
+                DXVA2_NominalRange_0_255 : DXVA2_NominalRange_16_235;
     switch (p_fmt->space)
     {
     case COLOR_SPACE_BT601:
diff --git a/modules/mux/mp4/libmp4mux.c b/modules/mux/mp4/libmp4mux.c
index 1e28967a42..7620008feb 100644
--- a/modules/mux/mp4/libmp4mux.c
+++ b/modules/mux/mp4/libmp4mux.c
@@ -993,7 +993,7 @@ static bo_t *GetColrBox(const video_format_t *p_vfmt, bool b_mov)
         bo_add_16be(p_box, vlc_primaries_to_iso_23001_8_cp(p_vfmt->primaries));
         bo_add_16be(p_box, vlc_xfer_to_iso_23001_8_tc(p_vfmt->transfer));
         bo_add_16be(p_box, vlc_coeffs_to_iso_23001_8_mc(p_vfmt->space));
-        bo_add_8(p_box, p_vfmt->b_color_range_full ? 0x80 : 0x00);
+        bo_add_8(p_box, p_vfmt->color_range == COLOR_RANGE_FULL ? 0x80 : 0x00);
     }
     return p_box;
 }
diff --git a/modules/packetizer/av1.c b/modules/packetizer/av1.c
index f30d3434a1..47ac8fd363 100644
--- a/modules/packetizer/av1.c
+++ b/modules/packetizer/av1.c
@@ -147,7 +147,7 @@ static void UpdateDecoderFormat(decoder_t *p_dec)
         p_dec->fmt_out.video.primaries = prim;
         p_dec->fmt_out.video.transfer = xfer;
         p_dec->fmt_out.video.space = space;
-        p_dec->fmt_out.video.b_color_range_full = full;
+        p_dec->fmt_out.video.color_range = full ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
     }
 
     if(!p_dec->fmt_in.i_extra && !p_dec->fmt_out.i_extra)
diff --git a/modules/packetizer/av1_obu.c b/modules/packetizer/av1_obu.c
index 4e97470266..0488c36e93 100644
--- a/modules/packetizer/av1_obu.c
+++ b/modules/packetizer/av1_obu.c
@@ -194,17 +194,17 @@ static bool av1_parse_color_config(bs_t *p_bs,
 
     if(p_cc->mono_chrome)
     {
-        p_cc->color_range = bs_read1(p_bs);
+        p_cc->color_range = bs_read1(p_bs) ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
     }
     else if( p_cc->color_primaries == 1 &&
              p_cc->transfer_characteristics == 13 &&
              p_cc->matrix_coefficients == 0 )
     {
-        p_cc->color_range = 1;
+        p_cc->color_range = COLOR_RANGE_FULL;
     }
     else
     {
-        p_cc->color_range = bs_read1(p_bs);
+        p_cc->color_range = bs_read1(p_bs) ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
         if(seq_profile > 1)
         {
             if(BitDepth == 12)
@@ -542,7 +542,7 @@ bool AV1_get_colorimetry(const av1_OBU_sequence_header_t *p_seq,
     *p_primaries = iso_23001_8_cp_to_vlc_primaries(p_seq->color_config.color_primaries);
     *p_transfer = iso_23001_8_tc_to_vlc_xfer(p_seq->color_config.transfer_characteristics);
     *p_colorspace = iso_23001_8_mc_to_vlc_coeffs(p_seq->color_config.matrix_coefficients);
-    *p_full_range = p_seq->color_config.color_range;
+    *p_full_range = p_seq->color_config.color_range == COLOR_RANGE_FULL;
     return true;
 }
 
diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c
index f239b8531b..463aa3bee5 100644
--- a/modules/packetizer/h264.c
+++ b/modules/packetizer/h264.c
@@ -227,10 +227,14 @@ static void ActivateSets( decoder_t *p_dec, const h264_sequence_parameter_set_t
                 }
             }
             if( p_dec->fmt_in.video.primaries == COLOR_PRIMARIES_UNDEF )
+            {
+                bool color_full;
                 h264_get_colorimetry( p_sps, &p_dec->fmt_out.video.primaries,
                                       &p_dec->fmt_out.video.transfer,
                                       &p_dec->fmt_out.video.space,
-                                      &p_dec->fmt_out.video.b_color_range_full );
+                                      &color_full );
+                p_dec->fmt_out.video.color_range = color_full ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
+            }
         }
 
         if( p_dec->fmt_out.i_extra == 0 && p_pps )
diff --git a/modules/packetizer/hevc.c b/modules/packetizer/hevc.c
index aff8de39f4..b773adfdb9 100644
--- a/modules/packetizer/hevc.c
+++ b/modules/packetizer/hevc.c
@@ -560,11 +560,13 @@ static void ActivateSets(decoder_t *p_dec,
 
         if(p_dec->fmt_in.video.primaries == COLOR_PRIMARIES_UNDEF)
         {
+            bool color_full;
             (void) hevc_get_colorimetry( p_sps,
                                          &p_dec->fmt_out.video.primaries,
                                          &p_dec->fmt_out.video.transfer,
                                          &p_dec->fmt_out.video.space,
-                                         &p_dec->fmt_out.video.b_color_range_full);
+                                         &color_full);
+            p_dec->fmt_out.video.color_range = color_full ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
         }
 
         unsigned sizes[4];
diff --git a/modules/packetizer/mpeg4video.c b/modules/packetizer/mpeg4video.c
index e457d0c9cf..281e911a22 100644
--- a/modules/packetizer/mpeg4video.c
+++ b/modules/packetizer/mpeg4video.c
@@ -475,7 +475,7 @@ static int ParseVO( decoder_t *p_dec, block_t *p_vo )
             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;
+            p_dec->fmt_out.video.color_range = full_range ? COLOR_RANGE_FULL : COLOR_RANGE_LIMITED;
         }
     }
 
diff --git a/modules/stream_out/transcode/encoder/video.c b/modules/stream_out/transcode/encoder/video.c
index cfdaf655a3..ece2d3b0c6 100644
--- a/modules/stream_out/transcode/encoder/video.c
+++ b/modules/stream_out/transcode/encoder/video.c
@@ -238,7 +238,7 @@ void transcode_encoder_video_configure( vlc_object_t *p_obj,
     p_enc_out->space     = p_src->space;
     p_enc_out->transfer  = p_src->transfer;
     p_enc_out->primaries = p_src->primaries;
-    p_enc_out->b_color_range_full = p_src->b_color_range_full;
+    p_enc_out->color_range = p_src->color_range;
 
      /* set masks when RGB */
     video_format_FixRgb(&p_enc->p_encoder->fmt_in.video);
diff --git a/modules/video_output/placebo_utils.c b/modules/video_output/placebo_utils.c
index 90edf77be1..8dcb1e5f21 100644
--- a/modules/video_output/placebo_utils.c
+++ b/modules/video_output/placebo_utils.c
@@ -439,7 +439,7 @@ struct pl_color_repr vlc_placebo_ColorRepr(const video_format_t *fmt)
     return (struct pl_color_repr) {
         .sys        = sys,
         .alpha      = PL_ALPHA_PREMULTIPLIED,
-        .levels     = unlikely(fmt->b_color_range_full)
+        .levels     = unlikely(fmt->color_range == COLOR_RANGE_FULL)
                         ? PL_COLOR_LEVELS_PC
                         : PL_COLOR_LEVELS_TV,
         .bits = {
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 5fd66467e1..4489131ae5 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -1049,7 +1049,7 @@ static void D3D11SetColorSpace(vout_display_t *vd)
         goto done;
     }
 
-    bool src_full_range = vd->source.b_color_range_full ||
+    bool src_full_range = vd->source.color_range == COLOR_RANGE_FULL ||
                           /* the YUV->RGB conversion already output full range */
                           is_d3d11_opaque(vd->source.i_chroma) ||
                           vlc_fourcc_IsYUV(vd->source.i_chroma);
@@ -1490,7 +1490,7 @@ static int Direct3D11CreateFormatResources(vout_display_t *vd, const video_forma
 
     hr = D3D11_CompilePixelShader(vd, &sys->hd3d, sys->legacy_shader, &sys->d3d_dev,
                                   &sys->display, fmt->transfer, fmt->primaries,
-                                  fmt->b_color_range_full,
+                                  fmt->color_range == COLOR_RANGE_FULL,
                                   &sys->picQuad);
     if (FAILED(hr))
     {
diff --git a/src/input/es_out.c b/src/input/es_out.c
index 0cdd08cfe2..22033131af 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -3517,10 +3517,20 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const vlc_meta_t *p
            };
            static_assert(ARRAY_SIZE(space_names) == COLOR_SPACE_MAX+1,
                          "Color space table mismatch");
-           info_category_AddInfo( p_cat, _("Color space"), _("%s %s Range"),
-               vlc_gettext(space_names[fmt->video.space]),
-               vlc_gettext(fmt->video.b_color_range_full
-                           ? N_("Full") : N_("Limited")) );
+           info_category_AddInfo( p_cat, _("Color space"), "%s",
+               vlc_gettext(space_names[fmt->video.space]) );
+       }
+       if( fmt->video.color_range != COLOR_RANGE_UNDEF )
+       {
+           static const char range_names[][16] = {
+               [COLOR_RANGE_UNDEF]   = N_("Undefined"),
+               [COLOR_RANGE_FULL]    = N_("Full"),
+               [COLOR_RANGE_LIMITED] = N_("Limited"),
+           };
+           static_assert(ARRAY_SIZE(range_names) == COLOR_RANGE_MAX+1,
+                         "Color range table mismatch");
+           info_category_AddInfo( p_cat, _("Color Range"), "%s",
+               vlc_gettext(range_names[fmt->video.color_range]) );
        }
        if( fmt->video.chroma_location != CHROMA_LOCATION_UNDEF )
        {



More information about the vlc-commits mailing list