From 7ae52f8a6b4a137f79b032b7094b3d5867839d52 Mon Sep 17 00:00:00 2001 From: Jan Sebechlebsky Date: Thu, 28 Jul 2016 18:18:13 +0200 Subject: [PATCH] avcodec/bsf: Add ff_bsf_get_packet_ref() function Use of this function can save unnecessary malloc operation in bitstream filter. Signed-off-by: Jan Sebechlebsky Signed-off-by: Michael Niedermayer --- libavcodec/bsf.c | 16 ++++++++++++++++ libavcodec/bsf.h | 11 +++++++++++ 2 files changed, 27 insertions(+) diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c index 8e36861f14..40fc925f0d 100644 --- a/libavcodec/bsf.c +++ b/libavcodec/bsf.c @@ -220,3 +220,19 @@ int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt) return 0; } + +int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt) +{ + AVBSFInternal *in = ctx->internal; + + if (in->eof) + return AVERROR_EOF; + + if (!ctx->internal->buffer_pkt->data && + !ctx->internal->buffer_pkt->side_data_elems) + return AVERROR(EAGAIN); + + av_packet_move_ref(pkt, ctx->internal->buffer_pkt); + + return 0; +} diff --git a/libavcodec/bsf.h b/libavcodec/bsf.h index 3435df5d86..af035eee44 100644 --- a/libavcodec/bsf.h +++ b/libavcodec/bsf.h @@ -28,6 +28,17 @@ */ int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt); +/** + * Called by bitstream filters to get packet for filtering. + * The reference to packet is moved to provided packet structure. + * + * @param ctx pointer to AVBSFContext of filter + * @param pkt pointer to packet to move reference to + * + * @return 0>= on success, negative AVERROR in case of failure + */ +int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt); + const AVClass *ff_bsf_child_class_next(const AVClass *prev); #endif /* AVCODEC_BSF_H */