[vlc-devel] [vlc-commits] demux: heif: add preliminary support for AVIF

Hugo Beauzée-Luyssen hugo at beauzee.fr
Wed Nov 14 15:14:34 CET 2018


On Fri, Nov 9, 2018, at 5:05 PM, Francois Cartegnie wrote:
> vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Nov  
> 9 16:59:39 2018 +0100| [2f3675ebd867b9a23152fa38674e8dbffccbeabb] | 
> committer: Francois Cartegnie
> 
> demux: heif: add preliminary support for AVIF
> 
> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2f3675ebd867b9a23152fa38674e8dbffccbeabb
> ---
> 
>  modules/demux/mp4/heif.c   | 28 +++++++++++++++++++++++++---
>  modules/demux/mp4/libmp4.h |  2 ++
>  modules/demux/mp4/mp4.c    |  1 +
>  3 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/modules/demux/mp4/heif.c b/modules/demux/mp4/heif.c
> index a2cefecdc8..aa99f9e24c 100644
> --- a/modules/demux/mp4/heif.c
> +++ b/modules/demux/mp4/heif.c
> @@ -269,13 +269,19 @@ static int DemuxHEIF( demux_t *p_demux )
>          case VLC_FOURCC('a','v','c','1'):
>              es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_H264 );
>              break;
> +        case ATOM_av01:
> +            es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_AV1 );
> +            break;
>          case VLC_FOURCC('j','p','e','g'):
>              es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_JPEG );
>              break;
>          default:
> -            if( psz_mime && !strcasecmp( "image/jpeg", psz_mime ) )
> +            if( psz_mime )
>              {
> -                es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_JPEG );
> +                if( !strcasecmp( "image/jpeg", psz_mime ) )
> +                    es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_JPEG );
> +                else if( !strcasecmp( "image/avif", psz_mime ) )
> +                    es_format_Init( &fmt, VIDEO_ES, VLC_CODEC_AV1 );

Shouldn't there be an "else return VLC_DEMUXER_SUCCESS" ? Otherwise fmt seems uninitialized
(CID vlc-win32 #1475413)

>                  break;
>              }
>              return VLC_DEMUXER_SUCCESS; /* Unsupported picture, goto 
> next */
> @@ -300,9 +306,11 @@ static int DemuxHEIF( demux_t *p_demux )
>              {
>                  case ATOM_hvcC:
>                  case ATOM_avcC:
> +                case ATOM_av1C:
>                      if( !fmt.p_extra &&
>                         ((fmt.i_codec == VLC_CODEC_HEVC && p_prop-
> >i_type == ATOM_hvcC) ||
> -                        (fmt.i_codec == VLC_CODEC_H264 && p_prop-
> >i_type == ATOM_avcC)) )
> +                        (fmt.i_codec == VLC_CODEC_H264 && p_prop-
> >i_type == ATOM_avcC) ||
> +                        (fmt.i_codec == VLC_CODEC_AV1  && p_prop-
> >i_type == ATOM_av1C)) )
>                      {
>                          fmt.p_extra = malloc( p_prop->data.p_binary-
> >i_blob );
>                          if( fmt.p_extra )
> @@ -347,6 +355,18 @@ static int DemuxHEIF( demux_t *p_demux )
>                                          p_prop->data.p_colr-
> >nclc.i_matrix_idx );
>                      fmt.video.b_color_range_full = p_prop->data.p_colr-
> >nclc.i_full_range;
>                      break;
> +                case ATOM_clli:
> +                    fmt.video.lighting.MaxCLL = p_prop->data.p_CoLL-
> >i_maxCLL;
> +                    fmt.video.lighting.MaxFALL = p_prop->data.p_CoLL-
> >i_maxFALL;
> +                    break;
> +                case ATOM_mdcv:
> +                    memcpy( fmt.video.mastering.primaries,
> +                            p_prop->data.p_SmDm->primaries, 
> sizeof(uint16_t) * 6 );
> +                    memcpy( fmt.video.mastering.white_point,
> +                            p_prop->data.p_SmDm->white_point, 
> sizeof(uint16_t) * 2 );
> +                    fmt.video.mastering.max_luminance = p_prop-
> >data.p_SmDm->i_luminanceMax;
> +                    fmt.video.mastering.min_luminance = p_prop-
> >data.p_SmDm->i_luminanceMin;
> +                    break;
>              }
>          }
>      }
> @@ -451,11 +471,13 @@ int OpenHEIF( vlc_object_t * p_this )
>          case BRAND_heix:
>          case BRAND_jpeg:
>          case BRAND_avci:
> +        case BRAND_avif:
>              break;
>          case BRAND_msf1:
>          case BRAND_hevc:
>          case BRAND_hevx:
>          case BRAND_avcs:
> +        case BRAND_avis:
>          default:
>              return VLC_EGENERIC;
>      }
> diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
> index 18d0473f00..69ed1a60a4 100644
> --- a/modules/demux/mp4/libmp4.h
> +++ b/modules/demux/mp4/libmp4.h
> @@ -57,6 +57,8 @@ typedef int64_t stime_t;
>  #define BRAND_jpgs VLC_FOURCC( 'j', 'p', 'g', 's' ) /* heif */
>  #define BRAND_avci VLC_FOURCC( 'a', 'v', 'c', 'i' ) /* heif */
>  #define BRAND_avcs VLC_FOURCC( 'a', 'v', 'c', 's' ) /* heif */
> +#define BRAND_avif VLC_FOURCC( 'a', 'v', 'i', 'f' ) /* heif AV1 AVIF */
> +#define BRAND_avis VLC_FOURCC( 'a', 'v', 'i', 's' ) /* heig AV1 AVIF */
>  
>  #define ATOM_root VLC_FOURCC( 'r', 'o', 'o', 't' )
>  #define ATOM_uuid VLC_FOURCC( 'u', 'u', 'i', 'd' )
> diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
> index 556700f06a..0619f8ab74 100644
> --- a/modules/demux/mp4/mp4.c
> +++ b/modules/demux/mp4/mp4.c
> @@ -749,6 +749,7 @@ static int Open( vlc_object_t * p_this )
>                  case BRAND_mif1:
>                  case BRAND_jpeg:
>                  case BRAND_avci:
> +                case BRAND_avif:
>                  /* We don't yet support f4v, but avformat does. */
>                  case BRAND_f4v:
>                      return VLC_EGENERIC;
> 
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits


-- 
  Hugo Beauzée-Luyssen
  hugo at beauzee.fr


More information about the vlc-devel mailing list