|
@@ -254,24 +254,24 @@ static void s5p_mfc_handle_frame_all_extracted(struct s5p_mfc_ctx *ctx)
|
|
|
static void s5p_mfc_handle_frame_copy_time(struct s5p_mfc_ctx *ctx)
|
|
|
{
|
|
|
struct s5p_mfc_dev *dev = ctx->dev;
|
|
|
- struct s5p_mfc_buf *dst_buf, *src_buf;
|
|
|
- size_t dec_y_addr;
|
|
|
+ struct s5p_mfc_buf *dst_buf, *src_buf;
|
|
|
+ u32 dec_y_addr;
|
|
|
unsigned int frame_type;
|
|
|
|
|
|
/* Make sure we actually have a new frame before continuing. */
|
|
|
frame_type = s5p_mfc_hw_call(dev->mfc_ops, get_dec_frame_type, dev);
|
|
|
if (frame_type == S5P_FIMV_DECODE_FRAME_SKIPPED)
|
|
|
return;
|
|
|
- dec_y_addr = s5p_mfc_hw_call(dev->mfc_ops, get_dec_y_adr, dev);
|
|
|
+ dec_y_addr = (u32)s5p_mfc_hw_call(dev->mfc_ops, get_dec_y_adr, dev);
|
|
|
|
|
|
/* Copy timestamp / timecode from decoded src to dst and set
|
|
|
appropriate flags. */
|
|
|
src_buf = list_entry(ctx->src_queue.next, struct s5p_mfc_buf, list);
|
|
|
list_for_each_entry(dst_buf, &ctx->dst_queue, list) {
|
|
|
- if (vb2_dma_contig_plane_dma_addr(&dst_buf->b->vb2_buf, 0)
|
|
|
- == dec_y_addr) {
|
|
|
- dst_buf->b->timecode =
|
|
|
- src_buf->b->timecode;
|
|
|
+ u32 addr = (u32)vb2_dma_contig_plane_dma_addr(&dst_buf->b->vb2_buf, 0);
|
|
|
+
|
|
|
+ if (addr == dec_y_addr) {
|
|
|
+ dst_buf->b->timecode = src_buf->b->timecode;
|
|
|
dst_buf->b->vb2_buf.timestamp =
|
|
|
src_buf->b->vb2_buf.timestamp;
|
|
|
dst_buf->b->flags &=
|
|
@@ -307,10 +307,10 @@ static void s5p_mfc_handle_frame_new(struct s5p_mfc_ctx *ctx, unsigned int err)
|
|
|
{
|
|
|
struct s5p_mfc_dev *dev = ctx->dev;
|
|
|
struct s5p_mfc_buf *dst_buf;
|
|
|
- size_t dspl_y_addr;
|
|
|
+ u32 dspl_y_addr;
|
|
|
unsigned int frame_type;
|
|
|
|
|
|
- dspl_y_addr = s5p_mfc_hw_call(dev->mfc_ops, get_dspl_y_adr, dev);
|
|
|
+ dspl_y_addr = (u32)s5p_mfc_hw_call(dev->mfc_ops, get_dspl_y_adr, dev);
|
|
|
if (IS_MFCV6_PLUS(dev))
|
|
|
frame_type = s5p_mfc_hw_call(dev->mfc_ops,
|
|
|
get_disp_frame_type, ctx);
|
|
@@ -329,9 +329,10 @@ static void s5p_mfc_handle_frame_new(struct s5p_mfc_ctx *ctx, unsigned int err)
|
|
|
/* The MFC returns address of the buffer, now we have to
|
|
|
* check which videobuf does it correspond to */
|
|
|
list_for_each_entry(dst_buf, &ctx->dst_queue, list) {
|
|
|
+ u32 addr = (u32)vb2_dma_contig_plane_dma_addr(&dst_buf->b->vb2_buf, 0);
|
|
|
+
|
|
|
/* Check if this is the buffer we're looking for */
|
|
|
- if (vb2_dma_contig_plane_dma_addr(&dst_buf->b->vb2_buf, 0)
|
|
|
- == dspl_y_addr) {
|
|
|
+ if (addr == dspl_y_addr) {
|
|
|
list_del(&dst_buf->list);
|
|
|
ctx->dst_queue_cnt--;
|
|
|
dst_buf->b->sequence = ctx->sequence;
|