[FFmpeg-devel] Patch to parse H264 SEI Green Metadata

Michael Niedermayer michaelni at gmx.at
Mon Jun 29 15:49:28 CEST 2015


Hi

On Mon, Jun 29, 2015 at 01:01:48PM +0000, Nicolas Derouineau wrote:
> Two patches are now here enclosed:
> 
> The first one enable metadata parsing. The second one add a new options in the file avcodec/options_table.h
> 
> Tested with:
> 
> ./ffplay -debug green_metadata ~/GreenMetaDataSEI.264

Where can we find the sample file ?


> 
> Best Regards,
> 
> Nicolas DEROUINEAU
> Research Engineer
> VITEC
> 
> T.  +33 1 46 73 06 06
> E.  nicolas.derouineau at vitec.com
> W. www.vitec.com
> 
> ________________________________________
> De : ffmpeg-devel-bounces at ffmpeg.org <ffmpeg-devel-bounces at ffmpeg.org> de la part de Nicolas Derouineau <nicolas.derouineau at vitec.com>
> Envoyé : lundi 29 juin 2015 14:20
> À : FFmpeg development discussions and patches
> Objet : Re: [FFmpeg-devel] Patch to parse H264 SEI Green Metadata
> 
> Hello,
> Thank you for your comments.
> 
> Please find enclosed the updated patch.
> 
> I have tested it with the following cmdline:
> 
> ./ffplay -debug 1048576 ~/GreenMetaDataSEI.264
> 
> I know that this debug flag should be define somewhere as a string in order to display it with:
> 
> ./ffplay --help
> 
> Could someone point me to the correct location to do this ?
> 
> Ps: Reference Bitstreams are still available here: ftp-public-greenvideo.insa-rennes.fr
> 
> Ps 2: This message may look like a duplicate, but I have been experiencing issues to subscribe to the mailing list.
> 
> 
> 
> Best regards,
> Nicolas DEROUINEAU
> Research Engineer
> VITEC
> 
> T.  +33 1 46 73 06 06
> E.  nicolas.derouineau at vitec.com
> W. www.vitec.com
> 
> ________________________________________
> De : Vittorio Giovara <vittorio.giovara at gmail.com>
> Envoyé : vendredi 26 juin 2015 02:56
> À : FFmpeg development discussions and patches
> Cc : Nicolas Derouineau; Yahia Benmoussa; Erwan Raffin; michaelni at gmx.at; Didier Nicholson; Nicolas Tizon
> Objet : Re: [FFmpeg-devel] Patch to parse H264 SEI Green Metadata
> 
> On Thu, Jun 25, 2015 at 5:30 PM, Michael Niedermayer
> <michael at niedermayer.cc> wrote:
> > On Thu, Jun 25, 2015 at 11:13:53AM +0000, Nicolas Derouineau wrote:
> >> Hello,
> >> Please find here enclosed a patch enabling h264 Green Metada SEI parsing for FFMPEG. You'll be able to find reference bitstreams containing the metadata at the following adress:
> >>
> >> ftp-public-greenvideo.insa-rennes.fr
> >>
> >>
> >> The Nal SEI syntax is the same as the one used in the last JM release (19.0).
> >>
> >>
> >> Best Regards,
> >>
> >>
> >>
> >> Nicolas DEROUINEAU
> >> Research Engineer
> >> VITEC
> >>
> >> T.  +33 1 46 73 06 06
> >> E.  nicolas.derouineau at vitec.com<mailto:nicolas.derouineau at vitec.com>
> >> W. www.vitec.com<http://www.vitec.com/>;
> >
> >>  h264.h     |   20 ++++++++++++++++++
> >>  h264_sei.c |   67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >>  2 files changed, 87 insertions(+)
> >> feb39a55dd6afbaf341df765eafc02266c00a588  0002-Enabling-GreenMetadata-SEI-parsing-for-H264-decoder.patch
> >> From 60903bff6429182c84dc5daef0d26695d3f71861 Mon Sep 17 00:00:00 2001
> >> From: Nicolas DEROUINEAU <nicolas.derouineau at vitec.com>
> >> Date: Thu, 25 Jun 2015 13:02:39 +0200
> >> Subject: [PATCH 2/2] Enabling GreenMetadata SEI parsing for H264 decoder
> >>
> >> ---
> >>  libavcodec/h264.h     | 20 +++++++++++++++
> >>  libavcodec/h264_sei.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >>  2 files changed, 87 insertions(+)
> >>
> >> diff --git a/libavcodec/h264.h b/libavcodec/h264.h
> >> index 548510d..0324dc1 100644
> >> --- a/libavcodec/h264.h
> >> +++ b/libavcodec/h264.h
> >> @@ -137,6 +137,7 @@ typedef enum {
> >>      SEI_TYPE_RECOVERY_POINT         = 6,   ///< recovery point (frame # to decoder sync)
> >>      SEI_TYPE_FRAME_PACKING          = 45,  ///< frame packing arrangement
> >>      SEI_TYPE_DISPLAY_ORIENTATION    = 47,  ///< display orientation
> >> +    SEI_TYPE_GREEN_METADATA  = 56  ///< GreenMPEG information
> >>  } SEI_Type;
> >>
> >>  /**
> >> @@ -268,6 +269,22 @@ typedef struct FPA {
> >>  } FPA;
> >>
> >>  /**
> >> + * Green MetaData Information Type
> >> + */
> >> +typedef struct GreenMetaData {
> >> +    unsigned char  green_metadata_type;
> >> +    unsigned char  period_type;
> >> +    unsigned short num_seconds;
> >> +    unsigned short num_pictures;
> 
> uint16_t and uint8_t would probably be more appropriate here
> 
> >> +    unsigned char percent_non_zero_macroblocks;
> >> +    unsigned char percent_intra_coded_macroblocks;
> >> +    unsigned char percent_six_tap_filtering;
> >> +    unsigned char percent_alpha_point_deblocking_instance;
> >> +    unsigned char xsd_metric_type;
> >> +    unsigned short xsd_metric_value;
> >> +} GreenMetaData;
> >> +
> >> +/**
> >>   * Memory management control operation opcode.
> >>   */
> >>  typedef enum MMCOOpcode {
> >> @@ -804,6 +821,9 @@ typedef struct H264Context {
> >>      /* Motion Estimation */
> >>      qpel_mc_func (*qpel_put)[16];
> >>      qpel_mc_func (*qpel_avg)[16];
> >> +
> >> +    /*Green Metadata */
> >> +    GreenMetaData sei_GreenMetaData;
> 
> This is mostly a nit, but could you maybe avoid using CamelCase naming
> in function and variable names?
> eg GreenMetaData sei_green_metadata would reflect more the rest of the code.
> 
> thanks
> --
> Vittorio

>  avcodec.h  |    2 ++
>  h264.h     |   20 ++++++++++++++++++++
>  h264_sei.c |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 81 insertions(+)
> 1453ba266a63744aa16e59d4c18bcc1081d6e65f  0002-Enabling-GreenMetadata-SEI-parsing-for-H264-decoder.patch
> From d742bb556f794a16e03305195b5826ba8d2931a2 Mon Sep 17 00:00:00 2001
> From: NDE <nde at nde-OptiPlex-980.(none)>
> Date: Mon, 29 Jun 2015 12:13:16 +0200
> Subject: [PATCH 2/4] Enabling GreenMetadata SEI parsing for H264 decoder
> 
> ---
>  libavcodec/avcodec.h  |    2 ++
>  libavcodec/h264.h     |   20 +++++++++++++++++
>  libavcodec/h264_sei.c |   59 +++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 81 insertions(+)
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index ddbf0a3..7000145 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -2616,8 +2616,10 @@ typedef struct AVCodecContext {
>  #endif
>  #define FF_DEBUG_BUFFERS     0x00008000
>  #define FF_DEBUG_THREADS     0x00010000

> +#define FF_DEBUG_GREEN_MD    0x00100000
>  #define FF_DEBUG_NOMC        0x01000000

please use
#define FF_DEBUG_GREEN_MD    0x00800000
unless this value is already used
i think we should not add new holes in the list

>  
> +
>  #if FF_API_DEBUG_MV
>      /**
>       * debug

stray change


> diff --git a/libavcodec/h264.h b/libavcodec/h264.h
> index 15b9a5d..2cc3e50 100644
> --- a/libavcodec/h264.h
> +++ b/libavcodec/h264.h
> @@ -137,6 +137,7 @@ typedef enum {
>      SEI_TYPE_RECOVERY_POINT         = 6,   ///< recovery point (frame # to decoder sync)
>      SEI_TYPE_FRAME_PACKING          = 45,  ///< frame packing arrangement
>      SEI_TYPE_DISPLAY_ORIENTATION    = 47,  ///< display orientation
> +    SEI_TYPE_GREEN_METADATA  = 56  ///< GreenMPEG information

please keep this similarly formated as the surrounding code ("=" below
each previous)


[...]
>  options_table.h |    1 +
>  1 file changed, 1 insertion(+)
> 80ad6cb3a931768cb22d9349770fde6897eaa50c  0004-Update-for-libavcodec-debug-options-enabling-GreenMe.patch
> From ceac0fcf76195cc6b94a91834458fd9d7ce3e8a7 Mon Sep 17 00:00:00 2001
> From: Nicolas DEROUINEAU <nicolas.derouineau at vitec.com>
> Date: Mon, 29 Jun 2015 14:41:15 +0200
> Subject: [PATCH 4/4] Update for libavcodec debug options enabling
>  GreenMetadata SEI display on stdout
> 
> ---
>  libavcodec/options_table.h |    1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
> index a906864..76ae81f 100644
> --- a/libavcodec/options_table.h
> +++ b/libavcodec/options_table.h
> @@ -253,6 +253,7 @@ static const AVOption avcodec_options[] = {
>  {"mv", "motion vector", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MV }, INT_MIN, INT_MAX, V|D, "debug"},
>  #endif
>  {"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, "debug"},
> +{"green_metadata", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_GREEN_MD }, INT_MIN, INT_MAX, V|D, "debug"},

this also needs a update to
doc/codecs.texi

thanks

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Democracy is the form of government in which you can choose your dictator
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150629/98861392/attachment.asc>


More information about the ffmpeg-devel mailing list