On Fri, Sep 21, 2012 at 4:59 PM, Justin Ruggles
<justin.rugg...@gmail.com> wrote:
> On 09/21/2012 10:31 AM, Reinhard Tartler wrote:
>> On Tue, Sep 4, 2012 at 7:03 PM, Reinhard Tartler <siret...@tauware.de> wrote:
>>> Not all applications (e.g. MPlayer) set block_align, and
>>> when using a different demuxer it might not even be
>>> easily available.
>>>
>>> Therefore fall back to selecting mode based on bit rate as before if
>>> block_align has not useful value.  It can't be worse than failing to
>>> decode completely.
>>>
>>> Based on a patch by: Reimar Döffinger <reimar.doeffin...@gmx.de> with
>>> suggestions by Derek Buitenhuis <derek.buitenh...@gmail.com>
>>>
>>> (commit 1d0d63052b82c76e10c45cd38cdd27677de72e81)
>>>
>>> Signed-off-by: Reinhard Tartler <siret...@tauware.de>
>>> ---
>>>  libavcodec/sipr.c |   12 ++++++++++--
>>>  1 file changed, 10 insertions(+), 2 deletions(-)
>>>
>>> Derek, did you mean something like this one? I persume that
>>> AV_EF_EXPLODE has to be set explicitly by the application so that an
>>> invalid block_align does not signal the error.
>>>
>>> diff --git a/libavcodec/sipr.c b/libavcodec/sipr.c
>>> index 971d05b..1839a22 100644
>>> --- a/libavcodec/sipr.c
>>> +++ b/libavcodec/sipr.c
>>> @@ -485,8 +485,16 @@ static av_cold int sipr_decoder_init(AVCodecContext * 
>>> avctx)
>>>      case 29: ctx->mode = MODE_6k5; break;
>>>      case 37: ctx->mode = MODE_5k0; break;
>>>      default:
>>> -        av_log(avctx, AV_LOG_ERROR, "Invalid block_align: %d\n", 
>>> avctx->block_align);
>>> -        return AVERROR(EINVAL);
>>> +        if (avctx->err_recognition & AV_EF_EXPLODE) {
>>> +            av_log(avctx, AV_LOG_ERROR, "Invalid block_align: %d\n", 
>>> avctx->block_align);
>>> +            return AVERROR(EINVAL);
>>> +        }
>>> +        else {
>>> +            if      (avctx->bit_rate > 12200) ctx->mode = MODE_16k;
>>> +            else if (avctx->bit_rate > 7500 ) ctx->mode = MODE_8k5;
>>> +            else if (avctx->bit_rate > 5750 ) ctx->mode = MODE_6k5;
>>> +            else                              ctx->mode = MODE_5k0;
>>> +        }
>>>      }
>>>
>>>      av_log(avctx, AV_LOG_DEBUG, "Mode: %s\n", modes[ctx->mode].mode_name);
>>> --
>>
>> is the patch above OK to apply?
>>
>
> I like the previous version better. Just change it to AV_LOG_WARNING,
> and maybe give a more specific message like "Invalid block_align.
> Guessing the mode based on bit_rate."
>

pushed yesterday with CC: libav-stable@ after a variant of this got OKed on irc

-- 
regards,
    Reinhard
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to