[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <19f844ee-da08-4497-a4f7-c90d45554534@linaro.org>
Date: Thu, 21 Aug 2025 14:58:12 +0200
From: Neil Armstrong <neil.armstrong@...aro.org>
To: Dikshita Agarwal <quic_dikshita@...cinc.com>,
Vikash Garodia <quic_vgarodia@...cinc.com>,
Abhinav Kumar <abhinav.kumar@...ux.dev>,
Bryan O'Donoghue <bryan.odonoghue@...aro.org>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Stefan Schmidt <stefan.schmidt@...aro.org>,
Vedang Nagar <quic_vnagar@...cinc.com>, Hans Verkuil <hverkuil@...nel.org>
Cc: linux-media@...r.kernel.org, linux-arm-msm@...r.kernel.org,
linux-kernel@...r.kernel.org, Renjiang Han <quic_renjiang@...cinc.com>,
Wangao Wang <quic_wangaow@...cinc.com>
Subject: Re: [PATCH v3 00/26] Enable H.264/H.265 encoder support and fixes in
iris driver common code
On 21/08/2025 09:21, Dikshita Agarwal wrote:
>
>
> On 8/20/2025 8:29 PM, Neil Armstrong wrote:
>> Hi,
>>
>> On 20/08/2025 11:07, Dikshita Agarwal wrote:
>>> Hi All,
>>>
>>> This patch series adds support for H.264 and H.265 encoder in iris
>>> driver and includes a few fixes and cleanup in the common code that were
>>> identified during encoder bring-up process.
>>>
>>> The changes include:
>>> - Enabling support for H.264 and H.265 encoding.
>>> - Fixes and improvements in shared componenets used by both encoder and
>>> decoder paths.
>>> - Ensuring compatibility and stability with the existing decoder flow.
>>>
>>> Changes in v3:
>>> - Fixed the log when destroying the interanl buffers (Jorge)
>>> - Updated commit text with issue details in patch 05/25 (Krzysztof)
>>> - Added a patch to simplify conditional logic in stop handling for hfi
>>> gen1 (Bryan)
>>> - Reduced duplicate code while registering video devices (Bryan)
>>> - Added a fix for try fmt handling in decoder (Self)
>>> - Fixed the value of max core mbps for qcs8300 (Vikash)
>>> - Simplied the frame rate handling in driver by using non q16 format and
>>> converted to q16 when setting to firmware (Vikash)
>>> - Fixed the issue with bitstream resolution setting to firmware (Neil)
>>> - Addressed other review comments (Vikash, Bryan)
>>> - Link to v2:
>>> https://lore.kernel.org/r/20250813-iris-video-encoder-v2-0-c725ff673078@quicinc.com
>>>
>>> Changes in v2:
>>> - Fixed sparse/coccinnelle issues.
>>> - Fixed the kernel doc warning.
>>> - Removed unsupported PEAK_BITRATE property from SM8250.
>>> - Dropped patch 04/25 to fix quality issue with encoder.
>>> - Enhanced command handling for encoder to allow start/stop commands.
>>> - Expanded rate control condition checks to include additional rate
>>> control types for HFI Gen2.
>>> - Updated default value to MAX_QP for all caps related to max QP settings.
>>> - Add support for INPUT/OUTPUT_BUF_HOST_MAX_COUNT caps for encoder.
>>> - Link to v1:
>>> https://lore.kernel.org/r/20250704-iris-video-encoder-v1-0-b6ce24e273cf@quicinc.com
>>>
>>> All patches have been tested with v4l2-compliance, v4l2-ctl and
>>> Gstreamer on SM8250 and SM8550 for encoder, at the same time ensured
>>> that the existing decoder functionality remains uneffected.
>>>
>>> Commands used for V4l2-ctl validation:
>>>
>>> v4l2-ctl --verbose
>>> --set-fmt-video-out=width=1280,height=720,pixelformat=NV12
>>> --set-selection-output target=crop,top=0,left=0,width=1280,height=720
>>> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap
>>> --stream-from=/media/cyclists_1280x720_92frames.yuv
>>> --stream-to=/tmp/cyclists_1280x720_92frames.h264 -d /dev/video1
>>>
>>> v4l2-ctl --verbose
>>> --set-fmt-video-out=width=1280,height=720,pixelformat=NV12
>>> --set-selection-output target=crop,top=0,left=0,width=1280,height=720
>>> --set-fmt-video=pixelformat=HEVC --stream-mmap --stream-out-mmap
>>> --stream-from=/media/cyclists_1280x720_92frames.yuv
>>> --stream-to=/tmp/cyclists_1280x720_92frames.hevc -d /dev/video1
>>
>> - I've tested this serie on SM8650, first I failed to get HEVC working with
>> the following command:
>>
>> v4l2-ctl --verbose
>> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12
>> --set-selection-output target=crop,top=0,left=0,width=1920,height=1080
>> --set-fmt-video=pixelformat=HEVC --stream-mmap --stream-out-mmap
>> --stream-from=Big_Buck_Bunny_1080_10s.yuv
>> --stream-to=Big_Buck_Bunny_1080_10s.hevc -d /dev/video1
>>
>> I got:
>> qcom-iris aa00000.video-codec: session error received 0x1000005: unknown
>>
>> I checked the diff with v2, and reverting this make HEVC encoding work again:
>
> This is strange, we don't see any such issue on SM8550.
> Could you pls share the full logs.
I tried again with a 720p stream with your exact command line from the cover letter
and it still fails with HEVC:
$ v4l2-ctl --verbose --set-fmt-video-out=width=1280,height=720,pixelformat=NV12 --set-selection-output target=crop,top=0,left=0,width=1280,height=720 --set-fmt-video=pixelformat=HEVC --stream-mmap --stream-out-mmap --stream-from=Big_Buck_Bunny_720_10s.yuv --stream-to=Big_Buck_Bunny_720_10s.hevc -d /dev/video1
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture Multiplanar:
Width/Height : 320/240
Pixel Format : 'HEVC' (HEVC)
Field : None
Number of planes : 1
Flags :
Colorspace : Default
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Default
Plane 0 :
Bytes per Line : 0
Size Image : 245760
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Output Multiplanar:
Width/Height : 1280/736
Pixel Format : 'NV12' (Y/UV 4:2:0)
Field : None
Number of planes : 1
Flags :
Colorspace : Default
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization : Default
Plane 0 :
Bytes per Line : 1280
Size Image : 1413120
VIDIOC_G_SELECTION: ok
VIDIOC_S_SELECTION: ok
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_REQBUFS returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_G_FMT returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_STREAMON returned 0 (Success)
VIDIOC_G_FMT: ok
VIDIOC_DQBUF: failed: Input/output error
out dqbuf: 0 seq: 0 bytesused: 0 ts: 0.000000 field: Any
VIDIOC_DQBUF: failed: Input/output error
DMESG:
[ 370.390568] videobuf2_common: [out-0000000057b84b86] vb2_core_reqbufs: call_qop(queue_setup)
[ 370.390585] qcom-iris aa00000.video-codec: state changed from 1 to 1
[ 370.390591] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_alloc: call_memop(0, alloc)
[ 370.390742] videobuf2_common: [out-0000000057b84b86] __setup_offsets: buffer 0, plane 0 offset 0x00000000
[ 370.390746] videobuf2_common: [out-0000000057b84b86] __vb2_queue_alloc: call_vb_qop(0, buf_init)
[ 370.390749] videobuf2_common: [out-0000000057b84b86] vb2_plane_cookie: call_memop(0, cookie)
[ 370.390752] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_alloc: call_memop(1, alloc)
[ 370.390911] videobuf2_common: [out-0000000057b84b86] __setup_offsets: buffer 1, plane 0 offset 0x00008000
[ 370.390913] videobuf2_common: [out-0000000057b84b86] __vb2_queue_alloc: call_vb_qop(1, buf_init)
[ 370.390915] videobuf2_common: [out-0000000057b84b86] vb2_plane_cookie: call_memop(1, cookie)
[ 370.390918] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_alloc: call_memop(2, alloc)
[ 370.391139] videobuf2_common: [out-0000000057b84b86] __setup_offsets: buffer 2, plane 0 offset 0x00010000
[ 370.391141] videobuf2_common: [out-0000000057b84b86] __vb2_queue_alloc: call_vb_qop(2, buf_init)
[ 370.391143] videobuf2_common: [out-0000000057b84b86] vb2_plane_cookie: call_memop(2, cookie)
[ 370.391145] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_alloc: call_memop(3, alloc)
[ 370.391293] videobuf2_common: [out-0000000057b84b86] __setup_offsets: buffer 3, plane 0 offset 0x00018000
[ 370.391296] videobuf2_common: [out-0000000057b84b86] __vb2_queue_alloc: call_vb_qop(3, buf_init)
[ 370.391297] videobuf2_common: [out-0000000057b84b86] vb2_plane_cookie: call_memop(3, cookie)
[ 370.391299] videobuf2_common: [out-0000000057b84b86] __vb2_queue_alloc: allocated 4 buffers, 1 plane(s) each
[ 370.391363] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.391418] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.391470] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.391522] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.391584] videobuf2_common: [out-0000000057b84b86] vb2_mmap: call_memop(0, mmap)
[ 370.391638] vb2_common_vm_open: 00000000210e3729, refcount: 1, vma: ffff96927000-ffff96a80000
[ 370.391642] vb2_dc_mmap: mapped dma addr 0xdfa00000 at 0xffff96927000, size 1413120
[ 370.391646] videobuf2_common: [out-0000000057b84b86] vb2_mmap: buffer 0, plane 0 successfully mapped
[ 370.391656] videobuf2_common: [out-0000000057b84b86] vb2_mmap: call_memop(1, mmap)
[ 370.391701] vb2_common_vm_open: 0000000076540d0f, refcount: 1, vma: ffff967ce000-ffff96927000
[ 370.391704] vb2_dc_mmap: mapped dma addr 0xdf800000 at 0xffff967ce000, size 1413120
[ 370.391706] videobuf2_common: [out-0000000057b84b86] vb2_mmap: buffer 1, plane 0 successfully mapped
[ 370.391716] videobuf2_common: [out-0000000057b84b86] vb2_mmap: call_memop(2, mmap)
[ 370.391759] vb2_common_vm_open: 00000000fe5c7906, refcount: 1, vma: ffff96675000-ffff967ce000
[ 370.391761] vb2_dc_mmap: mapped dma addr 0xdf600000 at 0xffff96675000, size 1413120
[ 370.391763] videobuf2_common: [out-0000000057b84b86] vb2_mmap: buffer 2, plane 0 successfully mapped
[ 370.391768] videobuf2_common: [out-0000000057b84b86] vb2_mmap: call_memop(3, mmap)
[ 370.391812] vb2_common_vm_open: 000000006a194006, refcount: 1, vma: ffff9651c000-ffff96675000
[ 370.391814] vb2_dc_mmap: mapped dma addr 0xdf400000 at 0xffff9651c000, size 1413120
[ 370.391816] videobuf2_common: [out-0000000057b84b86] vb2_mmap: buffer 3, plane 0 successfully mapped
[ 370.392050] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.393015] videobuf2_common: [out-0000000057b84b86] __buf_prepare: call_vb_qop(0, buf_out_validate)
[ 370.393021] videobuf2_common: [out-0000000057b84b86] __prepare_mmap: call_vb_qop(0, buf_prepare)
[ 370.393024] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_prepare: call_memop(0, prepare)
[ 370.393027] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.393030] videobuf2_common: [out-0000000057b84b86] vb2_core_qbuf: qbuf of buffer 0 succeeded
[ 370.393033] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.393037] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.393039] v4l2_m2m_try_run: No job pending
[ 370.393098] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.393715] videobuf2_common: [out-0000000057b84b86] __buf_prepare: call_vb_qop(1, buf_out_validate)
[ 370.393720] videobuf2_common: [out-0000000057b84b86] __prepare_mmap: call_vb_qop(1, buf_prepare)
[ 370.393723] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_prepare: call_memop(1, prepare)
[ 370.393725] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.393728] videobuf2_common: [out-0000000057b84b86] vb2_core_qbuf: qbuf of buffer 1 succeeded
[ 370.393730] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.393733] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.393735] v4l2_m2m_try_run: No job pending
[ 370.393792] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.394421] videobuf2_common: [out-0000000057b84b86] __buf_prepare: call_vb_qop(2, buf_out_validate)
[ 370.394425] videobuf2_common: [out-0000000057b84b86] __prepare_mmap: call_vb_qop(2, buf_prepare)
[ 370.394427] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_prepare: call_memop(2, prepare)
[ 370.394430] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.394432] videobuf2_common: [out-0000000057b84b86] vb2_core_qbuf: qbuf of buffer 2 succeeded
[ 370.394435] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.394437] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.394439] v4l2_m2m_try_run: No job pending
[ 370.394496] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.395199] videobuf2_common: [out-0000000057b84b86] __buf_prepare: call_vb_qop(3, buf_out_validate)
[ 370.395203] videobuf2_common: [out-0000000057b84b86] __prepare_mmap: call_vb_qop(3, buf_prepare)
[ 370.395205] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_prepare: call_memop(3, prepare)
[ 370.395208] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.395210] videobuf2_common: [out-0000000057b84b86] vb2_core_qbuf: qbuf of buffer 3 succeeded
[ 370.395212] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.395214] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.395216] v4l2_m2m_try_run: No job pending
[ 370.395273] videobuf2_common: [out-0000000057b84b86] vb2_core_streamon: call_qop(prepare_streaming) (nop)
[ 370.395277] videobuf2_common: [out-0000000057b84b86] __enqueue_in_driver: call_vb_qop(0, buf_queue)
[ 370.395280] videobuf2_common: [out-0000000057b84b86] __enqueue_in_driver: call_vb_qop(1, buf_queue)
[ 370.395282] videobuf2_common: [out-0000000057b84b86] __enqueue_in_driver: call_vb_qop(2, buf_queue)
[ 370.395285] videobuf2_common: [out-0000000057b84b86] __enqueue_in_driver: call_vb_qop(3, buf_queue)
[ 370.395287] videobuf2_common: [out-0000000057b84b86] vb2_start_streaming: call_qop(start_streaming)
[ 370.396462] qcom-iris aa00000.video-codec: state changed from 2 to 2
[ 370.396469] videobuf2_common: [out-0000000057b84b86] vb2_core_streamon: successful
[ 370.396473] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.396475] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.396477] v4l2_m2m_try_run: No job pending
[ 370.396583] videobuf2_common: [cap-00000000e59a888f] vb2_core_streamoff: successful
[ 370.396629] videobuf2_common: [cap-00000000e59a888f] vb2_core_reqbufs: call_qop(queue_setup)
[ 370.396633] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_alloc: call_memop(0, alloc)
[ 370.396691] videobuf2_common: [cap-00000000e59a888f] __setup_offsets: buffer 0, plane 0 offset 0x00000000
[ 370.396694] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_alloc: call_vb_qop(0, buf_init)
[ 370.396696] videobuf2_common: [cap-00000000e59a888f] vb2_plane_cookie: call_memop(0, cookie)
[ 370.396699] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_alloc: call_memop(1, alloc)
[ 370.396746] videobuf2_common: [cap-00000000e59a888f] __setup_offsets: buffer 1, plane 0 offset 0x00008000
[ 370.396748] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_alloc: call_vb_qop(1, buf_init)
[ 370.396750] videobuf2_common: [cap-00000000e59a888f] vb2_plane_cookie: call_memop(1, cookie)
[ 370.396752] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_alloc: call_memop(2, alloc)
[ 370.396809] videobuf2_common: [cap-00000000e59a888f] __setup_offsets: buffer 2, plane 0 offset 0x00010000
[ 370.396811] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_alloc: call_vb_qop(2, buf_init)
[ 370.396813] videobuf2_common: [cap-00000000e59a888f] vb2_plane_cookie: call_memop(2, cookie)
[ 370.396814] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_alloc: call_memop(3, alloc)
[ 370.396884] videobuf2_common: [cap-00000000e59a888f] __setup_offsets: buffer 3, plane 0 offset 0x00018000
[ 370.396886] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_alloc: call_vb_qop(3, buf_init)
[ 370.396888] videobuf2_common: [cap-00000000e59a888f] vb2_plane_cookie: call_memop(3, cookie)
[ 370.396889] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_alloc: allocated 4 buffers, 1 plane(s) each
[ 370.396896] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.396899] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.396902] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.396904] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.396919] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: call_memop(0, mmap)
[ 370.396945] vb2_common_vm_open: 0000000095b56358, refcount: 1, vma: ffff9646f000-ffff9651c000
[ 370.396948] vb2_dc_mmap: mapped dma addr 0xdf300000 at 0xffff9646f000, size 708608
[ 370.396951] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: buffer 0, plane 0 successfully mapped
[ 370.396960] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: call_memop(1, mmap)
[ 370.396984] vb2_common_vm_open: 000000005cf693ed, refcount: 1, vma: ffff963c2000-ffff9646f000
[ 370.396987] vb2_dc_mmap: mapped dma addr 0xdf200000 at 0xffff963c2000, size 708608
[ 370.396989] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: buffer 1, plane 0 successfully mapped
[ 370.396994] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: call_memop(2, mmap)
[ 370.397018] vb2_common_vm_open: 000000000fb3f862, refcount: 1, vma: ffff96315000-ffff963c2000
[ 370.397020] vb2_dc_mmap: mapped dma addr 0xdf100000 at 0xffff96315000, size 708608
[ 370.397022] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: buffer 2, plane 0 successfully mapped
[ 370.397027] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: call_memop(3, mmap)
[ 370.397048] vb2_common_vm_open: 00000000112d3450, refcount: 1, vma: ffff96268000-ffff96315000
[ 370.397051] vb2_dc_mmap: mapped dma addr 0xdf000000 at 0xffff96268000, size 708608
[ 370.397053] videobuf2_common: [cap-00000000e59a888f] vb2_mmap: buffer 3, plane 0 successfully mapped
[ 370.397060] videobuf2_common: [cap-00000000e59a888f] __prepare_mmap: call_vb_qop(0, buf_prepare)
[ 370.397062] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_prepare: call_memop(0, prepare)
[ 370.397065] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.397067] videobuf2_common: [cap-00000000e59a888f] vb2_core_qbuf: qbuf of buffer 0 succeeded
[ 370.397069] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.397071] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.397072] v4l2_m2m_try_run: No job pending
[ 370.397075] videobuf2_common: [cap-00000000e59a888f] __prepare_mmap: call_vb_qop(1, buf_prepare)
[ 370.397077] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_prepare: call_memop(1, prepare)
[ 370.397079] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.397080] videobuf2_common: [cap-00000000e59a888f] vb2_core_qbuf: qbuf of buffer 1 succeeded
[ 370.397082] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.397084] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.397085] v4l2_m2m_try_run: No job pending
[ 370.397087] videobuf2_common: [cap-00000000e59a888f] __prepare_mmap: call_vb_qop(2, buf_prepare)
[ 370.397089] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_prepare: call_memop(2, prepare)
[ 370.397090] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.397092] videobuf2_common: [cap-00000000e59a888f] vb2_core_qbuf: qbuf of buffer 2 succeeded
[ 370.397094] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.397095] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.397096] v4l2_m2m_try_run: No job pending
[ 370.397099] videobuf2_common: [cap-00000000e59a888f] __prepare_mmap: call_vb_qop(3, buf_prepare)
[ 370.397100] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_prepare: call_memop(3, prepare)
[ 370.397102] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.397103] videobuf2_common: [cap-00000000e59a888f] vb2_core_qbuf: qbuf of buffer 3 succeeded
[ 370.397105] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.397106] __v4l2_m2m_try_queue: Streaming needs to be on for both queues
[ 370.397108] v4l2_m2m_try_run: No job pending
[ 370.397110] videobuf2_common: [cap-00000000e59a888f] vb2_core_streamon: call_qop(prepare_streaming) (nop)
[ 370.397113] videobuf2_common: [cap-00000000e59a888f] __enqueue_in_driver: call_vb_qop(0, buf_queue)
[ 370.397115] videobuf2_common: [cap-00000000e59a888f] __enqueue_in_driver: call_vb_qop(1, buf_queue)
[ 370.397117] videobuf2_common: [cap-00000000e59a888f] __enqueue_in_driver: call_vb_qop(2, buf_queue)
[ 370.397118] videobuf2_common: [cap-00000000e59a888f] __enqueue_in_driver: call_vb_qop(3, buf_queue)
[ 370.397120] videobuf2_common: [cap-00000000e59a888f] vb2_start_streaming: call_qop(start_streaming)
[ 370.397978] qcom-iris aa00000.video-codec: state changed from 4 to 4
[ 370.397998] videobuf2_common: [cap-00000000e59a888f] vb2_core_streamon: successful
[ 370.398001] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.398003] v4l2_m2m_try_run: Running job on m2m_ctx: 00000000da2be142
[ 370.398609] qcom-iris aa00000.video-codec: session error received 0x1000005: unknown
[ 370.398674] qcom-iris aa00000.video-codec: state changed from 5 to 5
[ 370.398687] videobuf2_common: [cap-00000000e59a888f] __vb2_wait_for_done_vb: Queue in error state, will not wait for buffers
[ 370.398695] qcom-iris aa00000.video-codec: session error received 0x1000005: unknown
[ 370.398716] qcom-iris aa00000.video-codec: session error received 0x1000005: unknown
[ 370.398732] videobuf2_common: [out-0000000057b84b86] __vb2_wait_for_done_vb: Queue in error state, will not wait for buffers
[ 370.398735] qcom-iris aa00000.video-codec: session error received 0x1000005: unknown
[ 370.398763] videobuf2_common: [out-0000000057b84b86] vb2_buffer_done: done processing on buffer 0, state: done
[ 370.398781] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_finish: call_memop(0, finish)
[ 370.398805] videobuf2_common: [out-0000000057b84b86] vb2_buffer_done: done processing on buffer 1, state: done
[ 370.398821] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_finish: call_memop(1, finish)
[ 370.398843] videobuf2_common: [out-0000000057b84b86] vb2_buffer_done: done processing on buffer 2, state: done
[ 370.398857] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_finish: call_memop(2, finish)
[ 370.398875] videobuf2_common: [out-0000000057b84b86] vb2_buffer_done: done processing on buffer 3, state: done
[ 370.398890] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_finish: call_memop(3, finish)
[ 370.398909] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_done: done processing on buffer 0, state: done
[ 370.398923] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_finish: call_memop(0, finish)
[ 370.398929] __v4l2_m2m_try_queue: Trying to schedule a job for m2m_ctx: 00000000da2be142
[ 370.398933] __v4l2_m2m_try_queue: Aborted context
[ 370.398942] v4l2_m2m_cancel_job: m2m_ctx 00000000da2be142 running, will wait to complete
[ 370.398940] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_done: done processing on buffer 1, state: done
[ 370.398946] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_cancel: call_qop(stop_streaming)
[ 370.398954] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_finish: call_memop(1, finish)
[ 370.398979] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_done: done processing on buffer 2, state: done
[ 370.398983] v4l2_m2m_try_run: No job pending
[ 370.398996] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_finish: call_memop(2, finish)
[ 370.399015] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_done: done processing on buffer 3, state: done
[ 370.399029] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_finish: call_memop(3, finish)
[ 370.401090] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_cancel: call_qop(unprepare_streaming) (nop)
[ 370.401094] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_cancel: call_vb_qop(0, buf_finish) (nop)
[ 370.401098] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_cancel: call_vb_qop(1, buf_finish) (nop)
[ 370.401100] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_cancel: call_vb_qop(2, buf_finish) (nop)
[ 370.401103] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_cancel: call_vb_qop(3, buf_finish) (nop)
[ 370.401105] videobuf2_common: [cap-00000000e59a888f] vb2_core_streamoff: successful
[ 370.401110] videobuf2_common: [out-0000000057b84b86] __vb2_queue_cancel: call_qop(stop_streaming)
[ 370.401357] videobuf2_common: [out-0000000057b84b86] __vb2_queue_cancel: call_qop(unprepare_streaming) (nop)
[ 370.401361] videobuf2_common: [out-0000000057b84b86] __vb2_queue_cancel: call_vb_qop(0, buf_finish) (nop)
[ 370.401363] videobuf2_common: [out-0000000057b84b86] __vb2_queue_cancel: call_vb_qop(1, buf_finish) (nop)
[ 370.401367] videobuf2_common: [out-0000000057b84b86] __vb2_queue_cancel: call_vb_qop(2, buf_finish) (nop)
[ 370.401369] videobuf2_common: [out-0000000057b84b86] __vb2_queue_cancel: call_vb_qop(3, buf_finish) (nop)
[ 370.401373] videobuf2_common: [out-0000000057b84b86] vb2_core_streamoff: successful
[ 370.401377] videobuf2_common: [cap-00000000e59a888f] vb2_core_streamoff: successful
[ 370.401418] vb2_common_vm_close: 0000000095b56358, refcount: 2, vma: ffff9646f000-ffff9651c000
[ 370.401455] vb2_common_vm_close: 000000005cf693ed, refcount: 2, vma: ffff963c2000-ffff9646f000
[ 370.401487] vb2_common_vm_close: 000000000fb3f862, refcount: 2, vma: ffff96315000-ffff963c2000
[ 370.401522] vb2_common_vm_close: 00000000112d3450, refcount: 2, vma: ffff96268000-ffff96315000
[ 370.401529] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.401531] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.401534] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.401536] videobuf2_common: [cap-00000000e59a888f] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.401539] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_free: call_vb_qop(0, buf_cleanup) (nop)
[ 370.401542] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_free: call_vb_qop(1, buf_cleanup) (nop)
[ 370.401545] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_free: call_vb_qop(2, buf_cleanup) (nop)
[ 370.401548] videobuf2_common: [cap-00000000e59a888f] __vb2_queue_free: call_vb_qop(3, buf_cleanup) (nop)
[ 370.401551] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: call_memop(0, put)
[ 370.401712] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: freed plane 0 of buffer 0
[ 370.401715] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: call_memop(1, put)
[ 370.401865] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: freed plane 0 of buffer 1
[ 370.401867] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: call_memop(2, put)
[ 370.402016] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: freed plane 0 of buffer 2
[ 370.402019] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: call_memop(3, put)
[ 370.402166] videobuf2_common: [cap-00000000e59a888f] __vb2_buf_mem_free: freed plane 0 of buffer 3
[ 370.402172] videobuf2_common: [out-0000000057b84b86] vb2_core_streamoff: successful
[ 370.402230] vb2_common_vm_close: 00000000210e3729, refcount: 2, vma: ffff96927000-ffff96a80000
[ 370.402299] vb2_common_vm_close: 0000000076540d0f, refcount: 2, vma: ffff967ce000-ffff96927000
[ 370.402361] vb2_common_vm_close: 00000000fe5c7906, refcount: 2, vma: ffff96675000-ffff967ce000
[ 370.402428] vb2_common_vm_close: 000000006a194006, refcount: 2, vma: ffff9651c000-ffff96675000
[ 370.402433] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(0, num_users)
[ 370.402436] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(1, num_users)
[ 370.402438] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(2, num_users)
[ 370.402440] videobuf2_common: [out-0000000057b84b86] vb2_buffer_in_use: call_memop(3, num_users)
[ 370.402443] videobuf2_common: [out-0000000057b84b86] __vb2_queue_free: call_vb_qop(0, buf_cleanup) (nop)
[ 370.402445] videobuf2_common: [out-0000000057b84b86] __vb2_queue_free: call_vb_qop(1, buf_cleanup) (nop)
[ 370.402448] videobuf2_common: [out-0000000057b84b86] __vb2_queue_free: call_vb_qop(2, buf_cleanup) (nop)
[ 370.402450] videobuf2_common: [out-0000000057b84b86] __vb2_queue_free: call_vb_qop(3, buf_cleanup) (nop)
[ 370.402452] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: call_memop(0, put)
[ 370.402745] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: freed plane 0 of buffer 0
[ 370.402748] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: call_memop(1, put)
[ 370.403037] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: freed plane 0 of buffer 1
[ 370.403039] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: call_memop(2, put)
[ 370.403328] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: freed plane 0 of buffer 2
[ 370.403330] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: call_memop(3, put)
[ 370.403618] videobuf2_common: [out-0000000057b84b86] __vb2_buf_mem_free: freed plane 0 of buffer 3
Do you need other debug output ?
I'm fine with firmware expecting specific aligments, but I would expect the driver to error
out instead of the firmware.
Neil
>
>> ===========================><=================================================
>> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
>> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
>> @@ -194,9 +194,8 @@ static int
>> iris_hfi_gen2_set_bitstream_resolution(struct iris_inst *inst, u32 pl
>> inst_hfi_gen2->src_subcr_params.bitstream_resolution =
>> resolution;
>> payload_type = HFI_PAYLOAD_U32;
>> } else {
>> - codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
>> - resolution = ALIGN(inst->fmt_dst->fmt.pix_mp.width,
>> codec_align) << 16 |
>> - ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align);
>> + resolution = inst->fmt_dst->fmt.pix_mp.width << 16 |
>> + inst->fmt_dst->fmt.pix_mp.height;
>> inst_hfi_gen2->dst_subcr_params.bitstream_resolution =
>> resolution;
>> payload_type = HFI_PAYLOAD_32_PACKED;
>> }
>> ===========================><=================================================
>> Did I pass some wrong parameters ? I don't expect the fw to crash.
>>
>> - On the 1280x720 output bug, I tried the same commands as v2:
>> v4l2-ctl --verbose
>> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12
>> --set-selection-output target=crop,top=0,left=0,width=1920,height=1080
>> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap
>> --stream-from=Big_Buck_Bunny_1080_10s.yuv
>> --stream-to=Big_Buck_Bunny_1080_10s.h264 -d /dev/video1
>>
>> And I still get a 1280x720 h264 video, did I miss something ?
>
> The above chnage which you reverted is needed to resolve this bug,
> basically if you don't set the resolution aligned with 16 (for H264) and 32
> (for HEVC) firmware will reject the property and encode to some default
> resolution which is 720p in this case.
>
>>
>> - Finally I tested the firmware you sent today
>> (https://gitlab.com/kernel-firmware/linux-firmware/-/merge_requests/654),
>> first thanks a lot for that !
>>
>> But then I was unable to encode with this firmware (v2 or v3 patchset), I
>> got around all the firmwares
>> I got and here's the results:
>> | QC_IMAGE_VERSION_STRING | BUILD_DATE
>> | Release | decoding | encoding v2 | encoding v3 |
>> |-------------------------------------------------------------|-------------|---------------------------------|----------|-------------|-------------|
>> | video-firmware.3.4-245082a0a3cc5e740f6340c295000ab4bcfc367d | Aug 24 2023
>> | VIDEO.LA.4.0.r2-02400-lanai.0-1 | OK | OK | KO HEVC |
>> | video-firmware.3.4-457429862ac40592d143de942b04d80fd9987e56 | Jan 29 2024
>> | VIDEO.LA.4.0.r2-03800-lanai.0-1 | OK | OK | KO HEVC |
>> | video-firmware.3.4-0d8a914b010672616a0d0613e22866c0b639a807 | Aug 14 2024
>> | VIDEO.LA.4.0.r2-05900-lanai.0-1 | OK | KO | KO |
>> | video-firmware.3.4-75ad4eb9657cf50ee663b05f78c01d6ceccd5632 | Jan 29 2025
>> | VIDEO.LA.4.0.r2-05900-lanai.0-1 | OK | KO | KO |
>> | video-firmware.3.4-e299f99ffcd086b43a2ccc7c3279ce5df404d693 | Aug 14 2025
>> | VIDEO.VPU.3.4-0054 | OK | KO | KO |
>> ------------------------------------------------------------------------------------------------------------------------------------------------------
>>
>> The change occurs around Aug 14 2024, So I checked the downstream driver
>> and I found that fixes the encoding:
>> ===========================><=================================================
>> --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
>> +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
>> @@ -863,9 +863,18 @@ static inline
>> u32 size_vpss_line_buf(u32 num_vpp_pipes_enc, u32 frame_height_coded,
>> u32 frame_width_coded)
>> {
>> - return ALIGN(((((((8192) >> 2) << 5) * (num_vpp_pipes_enc)) + 64) +
>> - (((((max_t(u32, (frame_width_coded),
>> - (frame_height_coded)) + 3) >> 2) << 5) +
>> 256) * 16)), 256);
>> + u32 vpss_4tap_top = 0, vpss_4tap_left = 0, vpss_div2_top = 0,
>> vpss_div2_left = 0, vpss_top_lb = 0, vpss_left_lb = 0, size_left = 0,
>> size_top = 0;
>> +
>> + vpss_4tap_top = ((((max_t(u32, frame_width_coded,
>> frame_height_coded) * 2) + 3) >> 2) << 4) + 256;
>> + vpss_4tap_left = (((8192 + 3) >> 2) << 5) + 64;
>> + vpss_div2_top = (((max_t(u32,frame_width_coded, frame_height_coded)
>> + 3) >> 2) << 4) + 256;
>> + vpss_div2_left = ((((max_t(u32, frame_width_coded,
>> frame_height_coded)* 2) + 3) >> 2) << 5) + 64;
>> + vpss_top_lb = (frame_width_coded + 1) << 3;
>> + vpss_left_lb = (frame_height_coded << 3) * num_vpp_pipes_enc;
>> + size_left = (vpss_4tap_left + vpss_div2_left) * 2 * num_vpp_pipes_enc;
>> + size_top = (vpss_4tap_top + vpss_div2_top) * 2;
>> +
>> + return ALIGN(size_left + size_top + vpss_top_lb + vpss_left_lb,
>> DMA_ALIGNMENT);
>> }
>
> Seems this calculation is different for iris3 and iris33, hence you see
> this issue on SM8650.
>
> Updating this calculation in common code will increase the buffer size with
> from ~400KB to ~2.2 MBs (for 640x480) and even more for higher resolution.
>
> @vikash, pls comment if we should update in common code or have this
> implemented specific for iris33 separately using some ops.
>
> Thanks,
> Dikshita
>
>>
>> static inline
>> ===========================><=================================================
>>
>> And I checked and encoding still works with the "old" firmwares.
>>
>> With both changes, I can get H264 & HEVC encoding working on any firmware.
>>
>> Neil
>>
>>
>>>
>>> Commands used for GST validation:
>>>
>>> gst-launch-1.0 -v filesrc location=/media/cyclists_1280x720_92frames.yuv !
>>> rawvideoparse format=nv12 width=1280 height=720 framerate=30/1 ! v4l2h264enc
>>> capture-io-mode=4 output-io-mode=4 ! filesink sync=true
>>> location=/tmp/gst_cyclists_1280x720_92frames.h264
>>>
>>> gst-launch-1.0 -v filesrc location=/media/cyclists_1280x720_92frames.yuv !
>>> rawvideoparse format=nv12 width=1280 height=720 framerate=30/1 ! v4l2h265enc
>>> capture-io-mode=4 output-io-mode=4 ! filesink sync=true
>>> location=/tmp/gst_cyclists_1280x720_92frames.hevc
>>>
>>> The result of v4l2-compliance on SM8550:
>>> v4l2-compliance 1.29.0-5270, 64 bits, 64-bit time_t
>>> v4l2-compliance SHA: dc947661089e 2024-11-11 10:25:38
>>>
>>> Compliance test for iris_driver device /dev/video1:
>>>
>>> Driver Info:
>>> Driver name : iris_driver
>>> Card type : Iris Encoder
>>> Bus info : platform:aa00000.video-codec
>>> Driver version : 6.16.0
>>> Capabilities : 0x84204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Detected Stateful Encoder
>>>
>>> Required ioctls:
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video1 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>> test VIDIOC_QUERYCTRL: OK
>>> test VIDIOC_G/S_CTRL: OK
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 37 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK (Not Supported)
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>> test blocking wait: OK
>>>
>>> Test input 0:
>>>
>>> Streaming ioctls:
>>> test read/write: OK (Not Supported)
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (select, REQBUFS): OK
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (epoll, REQBUFS): OK
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (select, CREATE_BUFS): OK
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (epoll, CREATE_BUFS): OK
>>> test USERPTR (select): OK (Not Supported)
>>> test DMABUF: Cannot test, specify --expbuf-device
>>>
>>> Total for iris_driver device /dev/video1: 54, Succeeded: 54, Failed: 0,
>>> Warnings: 0
>>>
>>> The result of v4l2-compliance on SM8250:
>>> v4l2-compliance 1.29.0-5270, 64 bits, 64-bit time_t
>>> v4l2-compliance SHA: dc947661089e 2024-11-11 10:25:38
>>>
>>> Compliance test for iris_driver device /dev/video1:
>>>
>>> Driver Info:
>>> Driver name : iris_driver
>>> Card type : Iris Encoder
>>> Bus info : platform:aa00000.video-codec
>>> Driver version : 6.16.0
>>> Capabilities : 0x84204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x04204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Detected Stateful Encoder
>>>
>>> Required ioctls:
>>> test VIDIOC_QUERYCAP: OK
>>> test invalid ioctls: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video1 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls:
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
>>> test VIDIOC_QUERYCTRL: OK
>>> test VIDIOC_G/S_CTRL: OK
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 19 Private Controls: 0
>>>
>>> Format ioctls:
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK (Not Supported)
>>>
>>> Codec ioctls:
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls:
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test CREATE_BUFS maximum buffers: OK
>>> test VIDIOC_REMOVE_BUFS: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>> test blocking wait: OK
>>>
>>> Test input 0:
>>>
>>> Streaming ioctls:
>>> test read/write: OK (Not Supported)
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (select, REQBUFS): OK
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (epoll, REQBUFS): OK
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (select, CREATE_BUFS): OK
>>> Video Capture Multiplanar: Captured 61 buffers
>>> test MMAP (epoll, CREATE_BUFS): OK
>>> test USERPTR (select): OK (Not Supported)
>>> test DMABUF: Cannot test, specify --expbuf-device
>>>
>>> Total for iris_driver device /dev/video1: 54, Succeeded: 54, Failed: 0,
>>> Warnings: 0
>>>
>>> Looking forward to your review and feedback.
>>>
>>> Thanks,
>>> Dikshita
>>>
>>> Signed-off-by: Dikshita Agarwal <quic_dikshita@...cinc.com>
>>> ---
>>> Dikshita Agarwal (26):
>>> media: iris: Fix buffer count reporting in internal buffer check
>>> media: iris: Report unreleased PERSIST buffers on session close
>>> media: iris: Fix memory leak by freeing untracked persist buffer
>>> media: iris: Fix port streaming handling
>>> media: iris: Allow substate transition to load resources during
>>> output streaming
>>> media: iris: Always destroy internal buffers on firmware release
>>> response
>>> media: iris: Update vbuf flags before v4l2_m2m_buf_done
>>> media: iris: Simplify session stop logic by relying on vb2 checks
>>> media: iris: Allow stop on firmware only if start was issued.
>>> media: iris: Send dummy buffer address for all codecs during drain
>>> media: iris: Fix missing LAST flag handling during drain
>>> media: iris: Fix format check for CAPTURE plane in try_fmt
>>> media: iris: Add support for video encoder device
>>> media: iris: Initialize and deinitialize encoder instance structure
>>> media: iris: Add support for ENUM_FMT, S/G/TRY_FMT encoder
>>> media: iris: Add support for ENUM_FRAMESIZES/FRAMEINTERVALS for
>>> encoder
>>> media: iris: Add support for VIDIOC_QUERYCAP for encoder video device
>>> media: iris: Add encoder support for V4L2 event subscription
>>> media: iris: Add support for G/S_SELECTION for encoder video device
>>> media: iris: Add support for G/S_PARM for encoder video device
>>> media: iris: Add platform-specific capabilities for encoder video
>>> device
>>> media: iris: Add V4L2 streaming support for encoder video device
>>> media: iris: Set platform capabilities to firmware for encoder
>>> video device
>>> media: iris: Allocate and queue internal buffers for encoder video
>>> device
>>> media: iris: Add support for buffer management ioctls for encoder
>>> device
>>> media: iris: Add support for drain sequence in encoder video device
>>>
>>> drivers/media/platform/qcom/iris/Makefile | 5 +-
>>> drivers/media/platform/qcom/iris/iris_buffer.c | 220 ++++--
>>> drivers/media/platform/qcom/iris/iris_buffer.h | 7 +-
>>> drivers/media/platform/qcom/iris/iris_common.c | 232 ++++++
>>> drivers/media/platform/qcom/iris/iris_common.h | 18 +
>>> drivers/media/platform/qcom/iris/iris_core.h | 20 +-
>>> drivers/media/platform/qcom/iris/iris_ctrls.c | 675 +++++++++++++++-
>>> drivers/media/platform/qcom/iris/iris_ctrls.h | 15 +
>>> drivers/media/platform/qcom/iris/iris_hfi_common.h | 2 +-
>>> .../platform/qcom/iris/iris_hfi_gen1_command.c | 480 +++++++++---
>>> .../platform/qcom/iris/iris_hfi_gen1_defines.h | 112 ++-
>>> .../platform/qcom/iris/iris_hfi_gen1_response.c | 60 +-
>>> .../platform/qcom/iris/iris_hfi_gen2_command.c | 359 ++++++---
>>> .../platform/qcom/iris/iris_hfi_gen2_defines.h | 44 +-
>>> .../platform/qcom/iris/iris_hfi_gen2_response.c | 46 +-
>>> drivers/media/platform/qcom/iris/iris_instance.h | 24 +
>>> .../platform/qcom/iris/iris_platform_common.h | 74 +-
>>> .../media/platform/qcom/iris/iris_platform_gen2.c | 522 ++++++++++++-
>>> .../platform/qcom/iris/iris_platform_qcs8300.h | 352 ++++++++-
>>> .../platform/qcom/iris/iris_platform_sm8250.c | 234 +++++-
>>> drivers/media/platform/qcom/iris/iris_probe.c | 33 +-
>>> drivers/media/platform/qcom/iris/iris_state.c | 9 +-
>>> drivers/media/platform/qcom/iris/iris_state.h | 1 +
>>> drivers/media/platform/qcom/iris/iris_utils.c | 36 +
>>> drivers/media/platform/qcom/iris/iris_utils.h | 2 +
>>> drivers/media/platform/qcom/iris/iris_vb2.c | 58 +-
>>> drivers/media/platform/qcom/iris/iris_vdec.c | 251 +-----
>>> drivers/media/platform/qcom/iris/iris_vdec.h | 13 +-
>>> drivers/media/platform/qcom/iris/iris_venc.c | 579 ++++++++++++++
>>> drivers/media/platform/qcom/iris/iris_venc.h | 27 +
>>> drivers/media/platform/qcom/iris/iris_vidc.c | 299 +++++++-
>>> drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 847
>>> ++++++++++++++++++++-
>>> drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 20 +
>>> 33 files changed, 4964 insertions(+), 712 deletions(-)
>>> ---
>>> base-commit: a75b8d198c55e9eb5feb6f6e155496305caba2dc
>>> change-id: 20250704-iris-video-encoder-b193350b487a
>>>
>>> Best regards,
>>
Powered by blists - more mailing lists