+ int ret;
+
+ ret = ff_bsf_get_packet_ref(ctx, pkt);
+ if (ret < 0)
+ return ret;
+
+ if (s->freq == REMOVE_FREQ_ALL ||
+ (s->freq == REMOVE_FREQ_NONKEYFRAME && !(pkt->flags & AV_PKT_FLAG_KEY)) ||
+ (s->freq == REMOVE_FREQ_KEYFRAME && pkt->flags & AV_PKT_FLAG_KEY)) {
+ int i;
+
+ switch (ctx->par_in->codec_id) {
+ case AV_CODEC_ID_AV1:
+ i = av1_split(pkt->data, pkt->size, ctx);
+ break;
+ case AV_CODEC_ID_AVS2:
+ case AV_CODEC_ID_AVS3:
+ case AV_CODEC_ID_CAVS:
+ case AV_CODEC_ID_MPEG4:
+ i = mpeg4video_split(pkt->data, pkt->size);
+ break;
+ case AV_CODEC_ID_H264:
+ i = h264_split(pkt->data, pkt->size);
+ break;
+ case AV_CODEC_ID_HEVC:
+ i = hevc_split(pkt->data, pkt->size);
+ break;
+ case AV_CODEC_ID_MPEG1VIDEO:
+ case AV_CODEC_ID_MPEG2VIDEO:
+ i = mpegvideo_split(pkt->data, pkt->size);
+ break;
+ case AV_CODEC_ID_VC1:
+ i = vc1_split(pkt->data, pkt->size);
+ break;
+ default:
+ i = 0;
+ }
+
+ pkt->data += i;
+ pkt->size -= i;
+ }
+
+ return 0;