Skip to content
This repository has been archived by the owner on Mar 6, 2024. It is now read-only.

3 plane pixel formats are losing the alignment when copied from AVframe #17

Closed
hbiyik opened this issue Jul 27, 2023 · 1 comment
Closed

Comments

@hbiyik
Copy link
Owner

hbiyik commented Jul 27, 2023

happens with only yuv420p, yuv422p, bgr24 pixfmts, and when the decoder in used feeds in the soft avframes to rkmpp encoders

For a width 704 -> 784 pixel with 16 aligned hor stride, misaligns on the multipliers of 44,45,46,47,48 of 16.
Below is the visual output of an example

to reproduce
ffmpeg -t 1 -f lavfi -i testsrc=s=720x480,format=yuv420p -c:v h264_rkmpp_encoder -y out.mp4

image

or

image

to fix rgb24 cases, increasing the MPP hor or ver stride alignment from 16 to 64 fixes the issues, but this does not work for yuv420p and yuv422p.

#define RKMPP_STRIDE_ALIGN 16

The interleaved or semiplanar or 4 plane rgbA/0 formats are not impacted by the issue

My guess is that MPP is handling all plane buffer as a continuous plane with common stride size, if there are planes multiples of 2 ie: 1,2,4 then, accessing the sub planes are also aligned, but if it is 3 then the size of the planes maz not be aligned (?). Internally, mpp or ffmpeg should be handling those cases differently, since ffmpeg holds a seperate buffer for each plane.

This is most likely related to plane calculation here:

case AV_PIX_FMT_YUV420P:
or AVframe copy routine here
if(frame){

a special case of dimensions of 705x480 crashes the encoder driver, this seems to be another problem with mpp.
see: rockchip-linux/mpp#424

@hbiyik
Copy link
Owner Author

hbiyik commented Jul 28, 2023

fixed in eb34616

@hbiyik hbiyik closed this as completed Jul 31, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant