On 4/18/2023 7:30 AM, Dawid Kozinski wrote:
static EVCParserSliceHeader *parse_slice_header(const uint8_t *bs, int bs_size,
EVCParserContext *ev)
{
GetBitContext gb;
EVCParserSliceHeader *sh;
EVCParserPPS *pps;
EVCParserSPS *sps;
int num_tiles_in_slice = 0;
int slice_pic_parameter_set_id;
if (init_get_bits8(&gb, bs, bs_size) < 0)
return NULL;
slice_pic_parameter_set_id = get_ue_golomb(&gb);
if (slice_pic_parameter_set_id < 0 || slice_pic_parameter_set_id >=
EVC_MAX_PPS_COUNT)
return NULL;
sh = &ev->slice_header[slice_pic_parameter_set_id];
pps = &ev->pps[slice_pic_parameter_set_id];
sps = &ev->sps[slice_pic_parameter_set_id];
Missing a check to see if either of these two exist/were parsed.
[...]
+static int evc_parse(AVCodecParserContext *s, AVCodecContext *avctx,
+ const uint8_t **poutbuf, int *poutbuf_size,
+ const uint8_t *buf, int buf_size)
+{
+ int next;
+ EVCParserContext *ev = s->priv_data;
+ ParseContext *pc = &ev->pc;
+
+ if (s->flags & PARSER_FLAG_COMPLETE_FRAMES)
+ next = buf_size;
+ else {
+ next = evc_find_frame_end(s, buf, buf_size, avctx);
+ if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
+ *poutbuf = NULL;
+ *poutbuf_size = 0;
+ return buf_size;
+ }
+ }
+
+ parse_nal_units(s, buf, buf_size, avctx);
+
+ // poutbuf contains just one Access Unit
+ *poutbuf = buf;
+ *poutbuf_size = buf_size;
+
+ return next;
+
Does the mp4 encapsulation allow the stripping of parameter sets from
packets? If so, you should parse extradata here too, otherwise no
sps/pps will be handled.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".