mirror of https://git.ffmpeg.org/ffmpeg.git
lavf/tee: use lavf API for applying bitstream filters
This commit is contained in:
parent
a5fd3a1a2b
commit
7a161b74ad
|
@ -405,47 +405,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) {
|
||||
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)
|
||||
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;
|
||||
|
@ -498,8 +457,9 @@ 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->streams[s2]->codec, &pkt2,
|
||||
tee->slaves[i].bsfs[s2])) < 0 ||
|
||||
(ret = av_interleaved_write_frame(avf2, &pkt2)) < 0)
|
||||
if (!ret_all)
|
||||
ret_all = ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue