[FFmpeg-devel] [PATCH 4/7] lavf/tee: use lavf API for applying bitstream filters
Rodger Combs
rodger.combs at gmail.com
Thu Oct 8 22:07:38 CEST 2015
---
libavformat/tee.c | 43 ++-----------------------------------------
1 file changed, 2 insertions(+), 41 deletions(-)
diff --git a/libavformat/tee.c b/libavformat/tee.c
index c619eae..5080c8d 100644
--- a/libavformat/tee.c
+++ b/libavformat/tee.c
@@ -384,45 +384,6 @@ fail:
return ret;
}
-static int filter_packet(void *log_ctx, AVPacket *pkt,
- AVFormatContext *fmt_ctx, AVBitStreamFilterContext *bsf_ctx)
-{
- AVCodecContext *enc_ctx = fmt_ctx->streams[pkt->stream_index]->codec;
- int ret = 0;
-
- while (bsf_ctx) {
- AVPacket new_pkt = *pkt;
- ret = av_bitstream_filter_filter(bsf_ctx, enc_ctx, NULL,
- &new_pkt.data, &new_pkt.size,
- pkt->data, pkt->size,
- pkt->flags & AV_PKT_FLAG_KEY);
- if (ret == 0 && new_pkt.data != pkt->data) {
- if ((ret = av_copy_packet(&new_pkt, pkt)) < 0)
- break;
- ret = 1;
- }
-
- if (ret > 0) {
- av_free_packet(pkt);
- new_pkt.buf = av_buffer_create(new_pkt.data, new_pkt.size,
- av_buffer_default_free, NULL, 0);
- if (!new_pkt.buf)
- break;
- }
- if (ret < 0) {
- av_log(log_ctx, AV_LOG_ERROR,
- "Failed to filter bitstream with filter %s for stream %d in file '%s' with codec %s\n",
- bsf_ctx->filter->name, pkt->stream_index, fmt_ctx->filename,
- avcodec_get_name(enc_ctx->codec_id));
- }
- *pkt = new_pkt;
-
- bsf_ctx = bsf_ctx->next;
- }
-
- return ret;
-}
-
static int tee_write_trailer(AVFormatContext *avf)
{
TeeContext *tee = avf->priv_data;
@@ -475,8 +436,8 @@ static int tee_write_packet(AVFormatContext *avf, AVPacket *pkt)
pkt2.duration = av_rescale_q(pkt->duration, tb, tb2);
pkt2.stream_index = s2;
- filter_packet(avf2, &pkt2, avf2, tee->slaves[i].bsfs[s2]);
- if ((ret = av_interleaved_write_frame(avf2, &pkt2)) < 0)
+ if ((ret = av_apply_bitstream_filters(avf2, &pkt2, tee->slaves[i].bsfs[s2])) < 0 ||
+ (ret = av_interleaved_write_frame(avf2, &pkt2)) < 0)
if (!ret_all)
ret_all = ret;
}
--
2.6.0
More information about the ffmpeg-devel
mailing list