On 01/04/16 03:22, Tim Walker wrote:
> These errors neither prevent nor stop successful decoding
> of the E-AC-3 stream's "core", causing avpriv_request_sample
> to be called for every single frame in the bitstream.
> ---
>  libavcodec/ac3dec.h  |  2 ++
>  libavcodec/eac3dec.c | 10 ++++++++--
>  2 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
> index e4d443c..4c5359c 100644
> --- a/libavcodec/ac3dec.h
> +++ b/libavcodec/ac3dec.h
> @@ -92,6 +92,8 @@ typedef struct AC3DecodeContext {
>      int lfe_mix_level_exists;               ///< indicates if lfemixlevcod 
> is specified (lfemixlevcode)
>      int lfe_mix_level;                      ///< LFE mix level index         
>            (lfemixlevcod)
>      int eac3;                               ///< indicates if current frame 
> is E-AC-3
> +    int eac3_frame_dependent_found;         ///< bitstream has E-AC-3 
> dependent frame(s)
> +    int eac3_subsbtreamid_found;            ///< bitstream has E-AC-3 
> additional substream(s)
>      int dolby_surround_mode;                ///< dolby surround mode         
>            (dsurmod)
>      int dolby_surround_ex_mode;             ///< dolby surround ex mode      
>            (dsurexmod)
>      int dolby_headphone_mode;               ///< dolby headphone mode        
>            (dheadphonmod)
> diff --git a/libavcodec/eac3dec.c b/libavcodec/eac3dec.c
> index b9d079c..fe52d27 100644
> --- a/libavcodec/eac3dec.c
> +++ b/libavcodec/eac3dec.c
> @@ -300,7 +300,10 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
>         application can select from. each independent stream can also contain
>         dependent streams which are used to add or replace channels. */
>      if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
> -        avpriv_request_sample(s->avctx, "Dependent substream decoding");
> +        if (!s->eac3_frame_dependent_found) {
> +            s->eac3_frame_dependent_found = 1;
> +            avpriv_request_sample(s->avctx, "Dependent substream decoding");
> +        }
>          return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
>      } else if (s->frame_type == EAC3_FRAME_TYPE_RESERVED) {
>          av_log(s->avctx, AV_LOG_ERROR, "Reserved frame type\n");
> @@ -312,7 +315,10 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
>         associated to an independent stream have matching substream id's. */
>      if (s->substreamid) {
>          /* only decode substream with id=0. skip any additional substreams. 
> */
> -        avpriv_request_sample(s->avctx, "Additional substreams");
> +        if (!s->eac3_subsbtreamid_found) {
> +            s->eac3_subsbtreamid_found = 1;
> +            avpriv_request_sample(s->avctx, "Additional substreams");
> +        }
>          return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
>      }
>  
> 

The set looks ok.
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to