Skip to content
/ linux Public

Commit 0cd7ca8

Browse files
Vishnu ReddySasha Levin
authored andcommitted
media: iris: Fix ffmpeg corrupted frame error
[ Upstream commit 89f7cf3 ] When the ffmpeg decoder is running, the driver receives the V4L2_BUF_FLAG_KEYFRAME flag in the input buffer. The driver then forwards this flag information to the firmware. The firmware, in turn, copies the input buffer flags directly into the output buffer flags. Upon receiving the output buffer from the firmware, the driver observes that the buffer contains the HFI_BUFFERFLAG_DATACORRUPT flag. The root cause is that both V4L2_BUF_FLAG_KEYFRAME and HFI_BUFFERFLAG_DATACORRUPT are the same value. As a result, the driver incorrectly interprets the output frame as corrupted, even though the frame is actually valid. This misinterpretation causes the driver to report an error and skip good frames, leading to missing frames in the final video output and triggering ffmpeg's "corrupt decoded frame" error. To resolve this issue, the input buffer flags should not be sent to the firmware during decoding, since the firmware does not require this information. Fixes: 17f2a48 ("media: iris: implement vb2 ops for buf_queue and firmware response") Cc: stable@vger.kernel.org Signed-off-by: Vishnu Reddy <quic_bvisredd@quicinc.com> Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Reviewed-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com> Signed-off-by: Bryan O'Donoghue <bod@kernel.org> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent bd4f8fa commit 0cd7ca8

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ static int iris_hfi_gen1_queue_input_buffer(struct iris_inst *inst, struct iris_
282282
com_ip_pkt.shdr.session_id = inst->session_id;
283283
com_ip_pkt.time_stamp_hi = upper_32_bits(buf->timestamp);
284284
com_ip_pkt.time_stamp_lo = lower_32_bits(buf->timestamp);
285-
com_ip_pkt.flags = buf->flags;
285+
com_ip_pkt.flags = 0;
286286
com_ip_pkt.mark_target = 0;
287287
com_ip_pkt.mark_data = 0;
288288
com_ip_pkt.offset = buf->data_offset;

0 commit comments

Comments
 (0)