Improve pixel format handling #620
Draft
Conversation
- According to documentation, decoders may override pix_fmt at any time. So, always check for changes. - When pixel format is not set, pix_fmt should be None
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Allow user to set preferred format
Expose
get_formatto allow user to choose decoded pixel format, by adding aVideoCodecContext.preferred_formatproperty. If set and supported by the decoder, that format will be used; otherwise fall back to current behaviour.We could have exposed the callback directly for better control, but since there's
codec.video_formatsand PyAV tries to hide these complexities, I thought it was better this way. WDYT?Handle format overrides, not set
The current code only updates
VideoCodecContext.formatandVideoCodecContext.pix_fmtwhen the user modifies them. However, according to the documentation, decoders may override those values too (at open, when decoding frames, etc.). The code now checks forpix_fmt/width/heightchanges at every access.Also, when the pixel format is not set,
pix_fmtnow returns None instead of raising.