Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bitstream filter API fixes #1379

Merged
merged 2 commits into from
Apr 17, 2024
Merged

Bitstream filter API fixes #1379

merged 2 commits into from
Apr 17, 2024

Conversation

skeskinen
Copy link
Contributor

@skeskinen skeskinen commented Apr 17, 2024

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:

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.

@WyattBlue WyattBlue merged commit 21ddc60 into PyAV-Org:main Apr 17, 2024
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants