On 4/3/2017 7:00 AM, Michael Niedermayer wrote:
> On Sun, Apr 02, 2017 at 10:45:41PM -0300, James Almer wrote:
>> Signed-off-by: James Almer <jamr...@gmail.com>
>> ---
>>  libavcodec/hevc_parse.c | 32 +++++++++++++++++++++++++-------
>>  1 file changed, 25 insertions(+), 7 deletions(-)
>>
>> diff --git a/libavcodec/hevc_parse.c b/libavcodec/hevc_parse.c
>> index 6c1138e015..028ca5afe5 100644
>> --- a/libavcodec/hevc_parse.c
>> +++ b/libavcodec/hevc_parse.c
>> @@ -22,7 +22,8 @@
>>  #include "hevc_parse.h"
>>  
>>  static int hevc_decode_nal_units(const uint8_t *buf, int buf_size, 
>> HEVCParamSets *ps,
>> -                                 int is_nalff, int nal_length_size, void 
>> *logctx)
>> +                                 int is_nalff, int nal_length_size, int 
>> err_recognition,
>> +                                 void *logctx)
>>  {
>>      int i;
>>      int ret = 0;
>> @@ -38,9 +39,21 @@ static int hevc_decode_nal_units(const uint8_t *buf, int 
>> buf_size, HEVCParamSets
>>  
>>          /* ignore everything except parameter sets and VCL NALUs */
>>          switch (nal->type) {
>> -        case HEVC_NAL_VPS: ff_hevc_decode_nal_vps(&nal->gb, logctx, ps);    
>> break;
>> -        case HEVC_NAL_SPS: ff_hevc_decode_nal_sps(&nal->gb, logctx, ps, 1); 
>> break;
>> -        case HEVC_NAL_PPS: ff_hevc_decode_nal_pps(&nal->gb, logctx, ps);    
>> break;
>> +        case HEVC_NAL_VPS:
>> +            ret = ff_hevc_decode_nal_vps(&nal->gb, logctx, ps);
>> +            if (ret < 0)
>> +                goto done;
>> +            break;
>> +        case HEVC_NAL_SPS:
>> +            ret = ff_hevc_decode_nal_sps(&nal->gb, logctx, ps, 1);
>> +            if (ret < 0)
>> +                goto done;
>> +            break;
>> +        case HEVC_NAL_PPS:
>> +            ret = ff_hevc_decode_nal_pps(&nal->gb, logctx, ps);
>> +            if (ret < 0)
>> +                goto done;
>> +            break;
>>          case HEVC_NAL_TRAIL_R:
>>          case HEVC_NAL_TRAIL_N:
>>          case HEVC_NAL_TSA_N:
> 
> I didnt investigate how exactly this is used but from just the patch
> this seems not optimal
> For example, if you have 3 PPS NALs and the first fails to decode
> you might still be able to fully decode the other 2

I'm mimicking the behavior of decode_nal_unit() in hevcdec.c, which is
currently used during frame decoding and extradata decoding.
This patchset aims at removing duplicate code while keeping the hevc
decoder behaving the same as it was before. I could skip this change
if that's preferred, but if this behavior is not optimal then someone
who better understands the codec should look at it.

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to