mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2025-10-30 04:02:04 +08:00
fftools/ffmpeg: use a bsf list instead of individual bsfs
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
@@ -558,9 +558,7 @@ static void ffmpeg_cleanup(int ret)
|
||||
if (!ost)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < ost->nb_bitstream_filters; j++)
|
||||
av_bsf_free(&ost->bsf_ctx[j]);
|
||||
av_freep(&ost->bsf_ctx);
|
||||
av_bsf_free(&ost->bsf_ctx);
|
||||
|
||||
av_frame_free(&ost->filtered_frame);
|
||||
av_frame_free(&ost->last_frame);
|
||||
@@ -859,40 +857,15 @@ static void output_packet(OutputFile *of, AVPacket *pkt,
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
/* apply the output bitstream filters, if any */
|
||||
if (ost->nb_bitstream_filters) {
|
||||
int idx;
|
||||
|
||||
ret = av_bsf_send_packet(ost->bsf_ctx[0], eof ? NULL : pkt);
|
||||
/* apply the output bitstream filters */
|
||||
if (ost->bsf_ctx) {
|
||||
ret = av_bsf_send_packet(ost->bsf_ctx, eof ? NULL : pkt);
|
||||
if (ret < 0)
|
||||
goto finish;
|
||||
|
||||
eof = 0;
|
||||
idx = 1;
|
||||
while (idx) {
|
||||
/* get a packet from the previous filter up the chain */
|
||||
ret = av_bsf_receive_packet(ost->bsf_ctx[idx - 1], pkt);
|
||||
if (ret == AVERROR(EAGAIN)) {
|
||||
ret = 0;
|
||||
idx--;
|
||||
continue;
|
||||
} else if (ret == AVERROR_EOF) {
|
||||
eof = 1;
|
||||
} else if (ret < 0)
|
||||
goto finish;
|
||||
|
||||
/* send it to the next filter down the chain or to the muxer */
|
||||
if (idx < ost->nb_bitstream_filters) {
|
||||
ret = av_bsf_send_packet(ost->bsf_ctx[idx], eof ? NULL : pkt);
|
||||
if (ret < 0)
|
||||
goto finish;
|
||||
idx++;
|
||||
eof = 0;
|
||||
} else if (eof)
|
||||
goto finish;
|
||||
else
|
||||
write_packet(of, pkt, ost, 0);
|
||||
}
|
||||
while ((ret = av_bsf_receive_packet(ost->bsf_ctx, pkt)) >= 0)
|
||||
write_packet(of, pkt, ost, 0);
|
||||
if (ret == AVERROR(EAGAIN))
|
||||
ret = 0;
|
||||
} else if (!eof)
|
||||
write_packet(of, pkt, ost, 0);
|
||||
|
||||
@@ -3015,35 +2988,28 @@ static int check_init_output_file(OutputFile *of, int file_index)
|
||||
|
||||
static int init_output_bsfs(OutputStream *ost)
|
||||
{
|
||||
AVBSFContext *ctx;
|
||||
int i, ret;
|
||||
AVBSFContext *ctx = ost->bsf_ctx;
|
||||
int ret;
|
||||
|
||||
if (!ost->nb_bitstream_filters)
|
||||
if (!ctx)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < ost->nb_bitstream_filters; i++) {
|
||||
ctx = ost->bsf_ctx[i];
|
||||
|
||||
ret = avcodec_parameters_copy(ctx->par_in,
|
||||
i ? ost->bsf_ctx[i - 1]->par_out : ost->st->codecpar);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ctx->time_base_in = i ? ost->bsf_ctx[i - 1]->time_base_out : ost->st->time_base;
|
||||
|
||||
ret = av_bsf_init(ctx);
|
||||
if (ret < 0) {
|
||||
av_log(NULL, AV_LOG_ERROR, "Error initializing bitstream filter: %s\n",
|
||||
ost->bsf_ctx[i]->filter->name);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ctx = ost->bsf_ctx[ost->nb_bitstream_filters - 1];
|
||||
ret = avcodec_parameters_copy(ost->st->codecpar, ctx->par_out);
|
||||
ret = avcodec_parameters_copy(ctx->par_in, ost->st->codecpar);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ctx->time_base_in = ost->st->time_base;
|
||||
|
||||
ret = av_bsf_init(ctx);
|
||||
if (ret < 0) {
|
||||
av_log(NULL, AV_LOG_ERROR, "Error initializing bitstream filter: %s\n",
|
||||
ctx->filter->name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = avcodec_parameters_copy(ost->st->codecpar, ctx->par_out);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ost->st->time_base = ctx->time_base_out;
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user