This is a little follow-up to PR #1375 and issue #489
I realized and fixed 2 problems with the API as defined previously:
par_out of AVBSFContext stands for output parameters and it contains the codec parameters as modified by the bitfilter. This needs to be exposed so that the user can get the modified codec.
Here's a minimal example that shows example expected usage and why it's useful to separate the input and output arguments:
with av.open(input_path, mode='r') as input_av_container:
v_stream = input_av_container.streams.video[0]
with av.open(output_path, 'w') as output_av_container:
out_stream = output_av_container.add_stream(template=v_stream)
filter = av.bitstream.BitStreamFilterContext('h264_mp4toannexb',
in_stream = v_stream, out_stream = out_stream)
for packet in input_av_container.demux(v_stream):
for p in filter.filter(packet):
p.stream = out_stream
output_av_container.mux(p)
for p in filter.filter(None):
p.stream = out_stream
output_av_container.mux(p)
av_bsf_flush is useful during discontinuous demuxing, e.g. after seeking. It allows reset of the internal bitfilter state. Otherwise you'd have to destroy and recreate the filter every time after seeking/draining the internal filter buffer. This is now exposed as BitStreamFilterContext.flush(). I also added a test case for this function.
Hello again,
This is a little follow-up to PR #1375 and issue #489 I realized and fixed 2 problems with the API as defined previously:
par_out
of AVBSFContext stands for output parameters and it contains the codec parameters as modified by the bitfilter. This needs to be exposed so that the user can get the modified codec.Here's a minimal example that shows example expected usage and why it's useful to separate the input and output arguments:
av_bsf_flush
is useful during discontinuous demuxing, e.g. after seeking. It allows reset of the internal bitfilter state. Otherwise you'd have to destroy and recreate the filter every time after seeking/draining the internal filter buffer. This is now exposed asBitStreamFilterContext.flush()
. I also added a test case for this function.