[FFmpeg-cvslog] ffmpeg: use lavf API for applying bitstream filters
Rodger Combs
git at videolan.org
Mon Dec 28 16:11:42 CET 2015
ffmpeg | branch: master | Rodger Combs <rodger.combs at gmail.com> | Wed Oct 7 21:24:40 2015 -0500| [a5fd3a1a2bd2e8ac28434919e462cf61ce831eb2] | committer: Rodger Combs
ffmpeg: use lavf API for applying bitstream filters
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a5fd3a1a2bd2e8ac28434919e462cf61ce831eb2
---
ffmpeg.c | 46 ++++------------------------------------------
ffmpeg.h | 1 -
ffmpeg_opt.c | 6 +++++-
3 files changed, 9 insertions(+), 44 deletions(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index 10d0f25..c533785 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -683,47 +683,10 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
if (bsfc)
av_packet_split_side_data(pkt);
- while (bsfc) {
- AVPacket new_pkt = *pkt;
- AVDictionaryEntry *bsf_arg = av_dict_get(ost->bsf_args,
- bsfc->filter->name,
- NULL, 0);
- int a = av_bitstream_filter_filter(bsfc, avctx,
- bsf_arg ? bsf_arg->value : NULL,
- &new_pkt.data, &new_pkt.size,
- pkt->data, pkt->size,
- pkt->flags & AV_PKT_FLAG_KEY);
- if(a == 0 && new_pkt.data != pkt->data) {
- uint8_t *t = av_malloc(new_pkt.size + AV_INPUT_BUFFER_PADDING_SIZE); //the new should be a subset of the old so cannot overflow
- if(t) {
- memcpy(t, new_pkt.data, new_pkt.size);
- memset(t + new_pkt.size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- new_pkt.data = t;
- new_pkt.buf = NULL;
- a = 1;
- } else
- a = AVERROR(ENOMEM);
- }
- if (a > 0) {
- pkt->side_data = NULL;
- pkt->side_data_elems = 0;
- av_packet_unref(pkt);
- new_pkt.buf = av_buffer_create(new_pkt.data, new_pkt.size,
- av_buffer_default_free, NULL, 0);
- if (!new_pkt.buf)
- exit_program(1);
- } else if (a < 0) {
- new_pkt = *pkt;
- av_log(NULL, AV_LOG_ERROR, "Failed to open bitstream filter %s for stream %d with codec %s",
- bsfc->filter->name, pkt->stream_index,
- avctx->codec ? avctx->codec->name : "copy");
- print_error("", a);
- if (exit_on_error)
- exit_program(1);
- }
- *pkt = new_pkt;
-
- bsfc = bsfc->next;
+ if ((ret = av_apply_bitstream_filters(avctx, pkt, bsfc)) < 0) {
+ print_error("", ret);
+ if (exit_on_error)
+ exit_program(1);
}
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
@@ -4244,7 +4207,6 @@ static int transcode(void)
av_dict_free(&ost->sws_dict);
av_dict_free(&ost->swr_opts);
av_dict_free(&ost->resample_opts);
- av_dict_free(&ost->bsf_args);
}
}
}
diff --git a/ffmpeg.h b/ffmpeg.h
index fa24910..20322b0 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -454,7 +454,6 @@ typedef struct OutputStream {
AVDictionary *sws_dict;
AVDictionary *swr_opts;
AVDictionary *resample_opts;
- AVDictionary *bsf_args;
char *apad;
OSTFinished finished; /* no more packets should be written for this stream */
int unavailable; /* true if the steram is unavailable (possibly temporarily) */
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 3df46da..9b341cf 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -1255,7 +1255,11 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
bsfc_prev->next = bsfc;
else
ost->bitstream_filters = bsfc;
- av_dict_set(&ost->bsf_args, bsfc->filter->name, arg, 0);
+ if (arg)
+ if (!(bsfc->args = av_strdup(arg))) {
+ av_log(NULL, AV_LOG_FATAL, "Bitstream filter memory allocation failed\n");
+ exit_program(1);
+ }
bsfc_prev = bsfc;
bsf = next;
More information about the ffmpeg-cvslog
mailing list