-
Notifications
You must be signed in to change notification settings - Fork 5k
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
bcm2835-codec tweaks #4113
bcm2835-codec tweaks #4113
Conversation
@jc-kynesim I did go for the framework tweak instead of totally reworking the buffer feed code. @popcornmix Hopefully pixel aspect ratio reporting. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You lost me in the second commit, but here's some feedback.
|| !m2m_ctx->cap_q_ctx.q.streaming) { | ||
if (!m2m_ctx->out_q_ctx.buffered && | ||
(!m2m_ctx->out_q_ctx.q.streaming || | ||
!m2m_ctx->cap_q_ctx.q.streaming)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I may have misunderstood the intention of this commit, but it appears to bypass the streaming check if running in buffered mode.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're right, but it wasn't quite my intent. Too much inverted logic.
I wanted the existing logic when not buffering, but to not return should either queue be streaming when buffered. One to rework.
drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
Outdated
Show resolved
Hide resolved
drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
Outdated
Show resolved
Hide resolved
drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
Outdated
Show resolved
Hide resolved
Updated to hopefully address your comments. |
Kodi doesn't see the aspect ratio, but it might be getting lost in ffmpeg or kodi itself. I'll see if I can find it... |
Does Kodi / FFmpeg actually make use of the resolution changed event? If it has configured the output correctly then there is no event and we have no chance to report the PAR. |
dprintk("Streaming needs to be on for both queues\n"); | ||
if ((!m2m_ctx->out_q_ctx.q.streaming || | ||
!m2m_ctx->cap_q_ctx.q.streaming) && | ||
!(m2m_ctx->out_q_ctx.buffered && m2m_ctx->out_q_ctx.q.streaming)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just spent a minute or two writing out your condition as you described it:
if (!((m2m_ctx->out_q_ctx.q.streaming &&
m2m_ctx->cap_q_ctx.q.streaming) ||
(m2m_ctx->out_q_ctx.buffered && m2m_ctx->out_q_ctx.q.streaming))) {
and then using De Morgan's laws to transform it into what you have written. But I shouldn't have to - what's wrong with the literal version above?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The OP's version is just an evolution of pre-existing (and thus assumed stable to some degree through testing/deployment) code using a minimal set of changes.
The check could also be written as
if (!(m2m_ctx->out_q_ctx.q.streaming && m2m_ctx-cap_q_ctx.q.streaming) &&
!(m2m_ctx->out_q_ctx.buffered && m2m_ctx->out_q_ctx.q.streaming)) {
They are all logically equivalent but having OR inside the clause and top-level NOT in the proposed transformed version depending on the conditions could make it a slower performing check if no short-circuiting happens inside and the result is not final until after the negation is performed at the end.
The changes suggested in c54a951 still employ a short-circuit, so they look ok to me.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They aren't wrong, but in (especially) kernel work clarity trumps pretty much everything, especially when the compiler will likely generate the same code in both cases.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree on clarity, thus my suggestion above. Of course, as more conditions get added, the clause may have to be rewritten again.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was just retaining the format of the original term. I'll rework as requested.
In order to get the intended behaviour of the stateful video decoder API where only the OUTPUT queue needs to be enabled and fed buffers in order to get the SOURCE_CHANGED event that configures the CAPTURE queue, we want the device to run should either queue be streaming. Signed-off-by: Dave Stevenson <[email protected]>
Fixes: "staging/bcm2835-codec: Log the number of excess supported formats" Which used %u for printing a size_t, and 64bit builds then log a warning. Signed-off-by: Dave Stevenson <[email protected]>
If the format is detected by the driver and a V4L2_EVENT_SOURCE_CHANGE event is generated, then pass on the pixel aspect ratio as well. Signed-off-by: Dave Stevenson <[email protected]>
v4l_cropcap calls our vidioc_g_pixelaspect function to get the pixel aspect ratio, but also calls g_selection for V4L2_SEL_TGT_CROP_BOUNDS and V4L2_SEL_TGT_CROP_DEFAULT. Whilst it allows for vidioc_g_pixelaspect not to be implemented, it doesn't allow for either of the other two. Add in support for the additional selection targets. Signed-off-by: Dave Stevenson <[email protected]>
Providing the relevant licence has been purchased, then Pi0-3 can decode VC-1. Signed-off-by: Dave Stevenson <[email protected]>
I've dropped the patch for enabling the decoder on STREAMON(OUTPUT) for now, but done the v4l2_m2m rework that was requested. |
I'm happy with this. Aspect ratio does work (needs an ffmpeg patch). |
As mentioned on slack the VC1 patch doesn't support WMV9 (and the hardware/omplayer do). |
Not going to happen in the short term. The codec is getting upset at quite a low level with that. |
Okay, I'm happy with PR then. |
kernel: drm/vc4: crtc: Reduce PV fifo threshold on hvs4 See: raspberrypi/linux#4207 kernel: vc4/drm: Adjustments to hdmi audio dma to reduce glitches See: raspberrypi/linux#4208 kernel: overlays: gpio-led: new overlay See: raspberrypi/linux#4206 kernel: bcm2835-codec tweaks See: raspberrypi/linux#4113 kernel: Assign crypto aliases to different AES implementation modules See: raspberrypi/linux#4198 kernel: media: bcm2835-unicam: Fix bug in buffer swapping logic See: raspberrypi/linux#4189 kernel: configs: Add CONFIG_RTS_HCTOSYS=y See: raspberrypi/linux#4205 kernel: overlays: Improve the i2c-rtc,i2c_csi_dsi option firmware: video_decode: For VC1/WMV with no signalled header bytes, use start of 1st buffer See: raspberrypi/linux#4113
kernel: drm/vc4: crtc: Reduce PV fifo threshold on hvs4 See: raspberrypi/linux#4207 kernel: vc4/drm: Adjustments to hdmi audio dma to reduce glitches See: raspberrypi/linux#4208 kernel: overlays: gpio-led: new overlay See: raspberrypi/linux#4206 kernel: bcm2835-codec tweaks See: raspberrypi/linux#4113 kernel: Assign crypto aliases to different AES implementation modules See: raspberrypi/linux#4198 kernel: media: bcm2835-unicam: Fix bug in buffer swapping logic See: raspberrypi/linux#4189 kernel: configs: Add CONFIG_RTS_HCTOSYS=y See: raspberrypi/linux#4205 kernel: overlays: Improve the i2c-rtc,i2c_csi_dsi option firmware: video_decode: For VC1/WMV with no signalled header bytes, use start of 1st buffer See: raspberrypi/linux#4113
- firmware: isp: Fix handling of different YUV colour spaces - firmware: poe_hat: Actually close the I2C handle - firmware: platform: Define DVFS modes and change default to be fixed AVS voltage - firmware: arm_loader: Auto-select 64-bit for kernel8.img See: #1193 - firmware: hdmi: Throttle auto-i2c register writes to avoid PWM audio underrun - firmware: platform: Define DVFS modes and change default to be fixed AVS voltage - firmware: arm_loader: Auto-select 64-bit for kernel8.img See: #1193 - firmware: hdmi: Throttle auto-i2c register writes to avoid PWM audio underrun - firmware: video_decode lockup handling - firmware: isp: Initialise extras to avoid vpitch being random - firmware: usb: Fix dropouts with USB ethernet gadget See: raspberrypi/linux#4084 - firmware: imx477: Allow long exposures for the binned modes. See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=297521 - firmware: arm_dispmanx: Use ALPHA_MIX flag See: https://www.raspberrypi.org/forums/viewtopic.php?t=300769 - firmware: power: Refactor the interface to the PMICs - firmware: platform: vl805: Get BAR2 address from PCIe BAR2 registers - firmware: arm_loader: Return all borrowed DMA channels See: #1541 - firmware: hdmi_2711: Rework I2C driver to NOT use the AUTO-I2C block - firmware: gencmd: Allow groups of clocks/plls to be read together - firmware: power: Fix DA9090 under-voltage detection - firmware: NVME boot support - firmware: brfs: Fix USB bulk-read in start.elf See: Hexxeh/rpi-firmware#258 - firmware: hdmi_2711_i2c: Correct handling of start/stop codes for long read See: #1548 - firmware: video_decode: For VC1/WMV with no signalled header bytes, use start of 1st buffer See: raspberrypi/linux#4113 - firmware: vl805: Remove redundant log statement and fix warning - firmware: power: Fix DA9090 ADC1 register definition - firmware: arm_loader: Only report clocks arm has set, not siblings - firmware: arm_loader: Don't report clocks set as turbo side effect of arm clock - firmware: arm_loader: 2711: gpu clocks are not dependant - firmware: platform: Need to clear cached versions of get_max_clock_internal vars - firmware: Move core to PLLA and support accurate clk108 See: xbmc/xbmc#19263 - firmware: board_info: Separate memory size from OTP field encoding - firmware: power: Swap DA9090 ADC assignments to match XR77004 - firmware: board-info: Fix memsize on 3B+ - firmware: vcfw/power: Add a new latch for power_pad_control See: #1552 - firmware: arm_loader: kernel_old=1 should force kernel_address=0 See: #1561 - firmware: scalerlib: Fix offset applied to x coordinate of YUV10COL image See: https://forum.kodi.tv/showthread.php?tid=361164&pid=3024654#pid3024654 - firmware: isp: Ensure the VRF is locked when setting up video colour denoise See: raspberrypi/rpicam-apps#19 - firmware: isp: Remove custom EV mappings from camera tunings - firmware: Add support for board-type=0xXX conditional filters in bootloader, bootcode and firmware - firmware: Two UART1 patches See: #1566 - firmware: Pi400: Reduce MII clock freq when probing ethernet PHY - firmware: platform: Remove build-time constant for MICROVOLTS_PER_PIP - firmware: dt-blob.dts: Correct HDMI HPD and EMMC_ENABLE for CM4 See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&p=1858516 - firmware: vcfw/hdmi: CUSTOM modes used for FKMS didn't set RGB quant range correctly See: #1580 - firmware: PoE+ HAT support See: raspberrypi/linux#4367 - firmware: arm_loader: Use Pi4 bootloader MAC_ADDRESS if set - firmware: platform: Apply ARM thermal throttling rules on BCM2711 - firmware: bcm_host: Recognise all Pi 4 variants, add BCM2711 See: raspberrypi/userland#695 - firmware: video_decode: Use the ISP instead of vc_image_convert - firmware: hdmi-2711: Wait for HDMI hardware scheduler to activate in HDMI mode - arm_loader: Add message to release firmware framebuffer - firmware: arm_loader: Add rng-seed DT property See: #1595 - firmware: isp: Set the YUV420/YVU420 format stride to 64 byte - firmware: Revert: video_decode: Use the ISP instead of vc_image_convert - firmware: cec: Avoid sending messages with kms See: raspberrypi/linux#4460 - firmware: hdmi_cec: Remove TX/RX SW_INIT on power_on See: Hexxeh/rpi-firmware#267 See: https://www.raspberrypi.org/forums/viewtopic.php?p=1895082#p1895082 - firmware: arm_dt: Limit CMA to 256MB if total_mem < 2GB or gpu_mem > 256MB See: #1603 - firmware: video_decode: Use the ISP instead of vc_image_convert - firmware: video_decode: Correct support for YVU formats using ISP - firmware: firmware: Disable VLL loading from file system See: #1605 - firmware: arm_loader: Make most arm clock requests required See: #1598 - firmware: arm_loader: Consider required flags from GET_CLOCK_RATE See: #1598 - firmware: arm_dt: Load overlays for detected cameras - firmware: Make more use of the user-warnings DT property - firmware: hdmi_2711: Use HDMI block REPEAT_PIXEL instead of PV See: https://forum.libreelec.tv/thread/24415-le-10-beta-for-i4-force-hdmi-resolution - firmware: DSI display autodetection for kms - firmware: arm_loader: Allow hvs interrupt during SET_NOTIFY_DISPLAY_DONE - firmware: arm_display: Allow null buffer in successful call See: raspberrypi/linux#4540 - firmware: video_decode: Ensure all buffers are flushed before port disable completes - firmware: filesystem: sdcard: Fix Hybrid GPT partitions See: #1465 - firmware: tvservice: Add check to warn when running with kms - firmware: arm_loader: Allow non-optional reads of current clock See: #1619 - firmware: dispmanx: Demote null eptr from vcos_verify to no warning See: raspberrypi/linux#4592 - firmware: filesystem: sdcard: Probe FAT type in GPT ESD partitions - firmware: clock-2711: Limit PLLB VCO frequency to the high range - firmware: arm_dt: Export the boot-mode, partition and usb state via device-tree See: #1621 - firmware: video_decode: i/p port enable/disable without o/p active could stall See: RPi-Distro/vlc#48 See: Hexxeh/rpi-firmware#272 See: #1637 - firmware: userland: Reduce debug_sym error messages See: https://forums.raspberrypi.com/viewtopic.php?f=98&t=322238 - firmware: arm_dt: Increase maximum line length to 98 See: raspberrypi/linux#4638 - firmware: arm_loader: Allow VEC clock to be controlled by arm - firmware: platform: Remove licence on VP6, VP8, Theora, and FLAC See: raspberrypi/linux#4661 - firmware: ISP: Fix magenta colour in right hand image of stereo pair See: https://forums.raspberrypi.com/viewtopic.php?t=321089 - firmware: platform: Fix incorrect turbo voltage scaling on Pi0 See: raspberrypi/documentation#2255 - firmware: platform: Declare CM4's SIO_1V8_SEL and SD_PWR_ON See: raspberrypi/Raspberry-Pi-OS-64bit#188 - firmware: hello_fft: Update outdated link to V3D spec - firmware: hello_fft: Remove unused function declaration See: #1645 See: raspberrypi/userland#710 - firmware: dtoverlay: Rebase aliases in overlays like labels - firmware: isp: Set core/vpu min clock to 320Mhz during ISP operation - firmware: arm_loader: Enable watchdog early if wanted See: #1651 - firmware: board_info: Add upstream dtb names for cm1 & 3 - firmware: board_info: Add upstream dtb name for cm4 See: #1660 - firmware: platform: Allow users to disable camera boot HMAC check See: #1657 - firmware: clock: 2711: Fix potential API issue in 2711 VCO setup - firmware: arm_loader: Enable USB MSD boot mode on Zero 2 W - firmware: isp: Fix Rec.709 colour space problems
No description provided.