On 4/5/2017 6:53 PM, Hendrik Leppkes wrote: > On Wed, Apr 5, 2017 at 11:40 PM, James Almer <jamr...@gmail.com> wrote: >> On 4/3/2017 10:46 AM, James Almer wrote: >>> 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. >> >> To add some context, the functions in hevc_parse.c are currently used >> only by the mediacodec based hevc decoder to decode extradata, and it's >> a duplicate of existing functionality in hevcdec.c used by the internal >> hevc decoder. >> >> This set aims at putting the hevc_parse.c version on par with the >> hevcdec.c one (in the scope of extradata parsing, not frame) to share it >> between the two decoders and any other that may need it in the future. >> This patch checks for PS failures and aborts if err_recog is set to >> explode. The second makes apply_defdispwin user defined instead of >> having it hardcoded to 1. The third avoids aborting on NALs not needed >> or expected in extradata, and the last two patches make hevcdec.c use >> ff_hevc_decode_extradata(). >> >> Not aborting on PS NAL failures here would technically mean a change in >> behavior on the internal hevc decoder once patch five is applied, and >> I'd rather no do that as part of this set. >> > > Keeping the current behavior for the HEVC software decoder seems > ideal. If a change in behavior is wanted afterwards, it should be > dealt with in a separate change, and not this refactoring. > > - Hendrik
Patchset pushed then. Thanks. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel