diff options
Diffstat (limited to 'drivers/media/platform/coda/coda-bit.c')
-rw-r--r-- | drivers/media/platform/coda/coda-bit.c | 133 |
1 files changed, 68 insertions, 65 deletions
diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c index cd41d49b206d..654e964f84a2 100644 --- a/drivers/media/platform/coda/coda-bit.c +++ b/drivers/media/platform/coda/coda-bit.c | |||
@@ -179,31 +179,32 @@ static void coda_kfifo_sync_to_device_write(struct coda_ctx *ctx) | |||
179 | } | 179 | } |
180 | 180 | ||
181 | static int coda_bitstream_queue(struct coda_ctx *ctx, | 181 | static int coda_bitstream_queue(struct coda_ctx *ctx, |
182 | struct vb2_buffer *src_buf) | 182 | struct vb2_v4l2_buffer *src_buf) |
183 | { | 183 | { |
184 | u32 src_size = vb2_get_plane_payload(src_buf, 0); | 184 | u32 src_size = vb2_get_plane_payload(&src_buf->vb2_buf, 0); |
185 | u32 n; | 185 | u32 n; |
186 | 186 | ||
187 | n = kfifo_in(&ctx->bitstream_fifo, vb2_plane_vaddr(src_buf, 0), | 187 | n = kfifo_in(&ctx->bitstream_fifo, |
188 | src_size); | 188 | vb2_plane_vaddr(&src_buf->vb2_buf, 0), src_size); |
189 | if (n < src_size) | 189 | if (n < src_size) |
190 | return -ENOSPC; | 190 | return -ENOSPC; |
191 | 191 | ||
192 | src_buf->v4l2_buf.sequence = ctx->qsequence++; | 192 | src_buf->sequence = ctx->qsequence++; |
193 | 193 | ||
194 | return 0; | 194 | return 0; |
195 | } | 195 | } |
196 | 196 | ||
197 | static bool coda_bitstream_try_queue(struct coda_ctx *ctx, | 197 | static bool coda_bitstream_try_queue(struct coda_ctx *ctx, |
198 | struct vb2_buffer *src_buf) | 198 | struct vb2_v4l2_buffer *src_buf) |
199 | { | 199 | { |
200 | int ret; | 200 | int ret; |
201 | 201 | ||
202 | if (coda_get_bitstream_payload(ctx) + | 202 | if (coda_get_bitstream_payload(ctx) + |
203 | vb2_get_plane_payload(src_buf, 0) + 512 >= ctx->bitstream.size) | 203 | vb2_get_plane_payload(&src_buf->vb2_buf, 0) + 512 >= |
204 | ctx->bitstream.size) | ||
204 | return false; | 205 | return false; |
205 | 206 | ||
206 | if (vb2_plane_vaddr(src_buf, 0) == NULL) { | 207 | if (vb2_plane_vaddr(&src_buf->vb2_buf, 0) == NULL) { |
207 | v4l2_err(&ctx->dev->v4l2_dev, "trying to queue empty buffer\n"); | 208 | v4l2_err(&ctx->dev->v4l2_dev, "trying to queue empty buffer\n"); |
208 | return true; | 209 | return true; |
209 | } | 210 | } |
@@ -224,7 +225,7 @@ static bool coda_bitstream_try_queue(struct coda_ctx *ctx, | |||
224 | 225 | ||
225 | void coda_fill_bitstream(struct coda_ctx *ctx, bool streaming) | 226 | void coda_fill_bitstream(struct coda_ctx *ctx, bool streaming) |
226 | { | 227 | { |
227 | struct vb2_buffer *src_buf; | 228 | struct vb2_v4l2_buffer *src_buf; |
228 | struct coda_buffer_meta *meta; | 229 | struct coda_buffer_meta *meta; |
229 | unsigned long flags; | 230 | unsigned long flags; |
230 | u32 start; | 231 | u32 start; |
@@ -257,7 +258,7 @@ void coda_fill_bitstream(struct coda_ctx *ctx, bool streaming) | |||
257 | } | 258 | } |
258 | 259 | ||
259 | /* Dump empty buffers */ | 260 | /* Dump empty buffers */ |
260 | if (!vb2_get_plane_payload(src_buf, 0)) { | 261 | if (!vb2_get_plane_payload(&src_buf->vb2_buf, 0)) { |
261 | src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx); | 262 | src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx); |
262 | v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE); | 263 | v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE); |
263 | continue; | 264 | continue; |
@@ -276,9 +277,9 @@ void coda_fill_bitstream(struct coda_ctx *ctx, bool streaming) | |||
276 | 277 | ||
277 | meta = kmalloc(sizeof(*meta), GFP_KERNEL); | 278 | meta = kmalloc(sizeof(*meta), GFP_KERNEL); |
278 | if (meta) { | 279 | if (meta) { |
279 | meta->sequence = src_buf->v4l2_buf.sequence; | 280 | meta->sequence = src_buf->sequence; |
280 | meta->timecode = src_buf->v4l2_buf.timecode; | 281 | meta->timecode = src_buf->timecode; |
281 | meta->timestamp = src_buf->v4l2_buf.timestamp; | 282 | meta->timestamp = src_buf->timestamp; |
282 | meta->start = start; | 283 | meta->start = start; |
283 | meta->end = ctx->bitstream_fifo.kfifo.in & | 284 | meta->end = ctx->bitstream_fifo.kfifo.in & |
284 | ctx->bitstream_fifo.kfifo.mask; | 285 | ctx->bitstream_fifo.kfifo.mask; |
@@ -483,20 +484,21 @@ err: | |||
483 | return ret; | 484 | return ret; |
484 | } | 485 | } |
485 | 486 | ||
486 | static int coda_encode_header(struct coda_ctx *ctx, struct vb2_buffer *buf, | 487 | static int coda_encode_header(struct coda_ctx *ctx, struct vb2_v4l2_buffer *buf, |
487 | int header_code, u8 *header, int *size) | 488 | int header_code, u8 *header, int *size) |
488 | { | 489 | { |
490 | struct vb2_buffer *vb = &buf->vb2_buf; | ||
489 | struct coda_dev *dev = ctx->dev; | 491 | struct coda_dev *dev = ctx->dev; |
490 | size_t bufsize; | 492 | size_t bufsize; |
491 | int ret; | 493 | int ret; |
492 | int i; | 494 | int i; |
493 | 495 | ||
494 | if (dev->devtype->product == CODA_960) | 496 | if (dev->devtype->product == CODA_960) |
495 | memset(vb2_plane_vaddr(buf, 0), 0, 64); | 497 | memset(vb2_plane_vaddr(vb, 0), 0, 64); |
496 | 498 | ||
497 | coda_write(dev, vb2_dma_contig_plane_dma_addr(buf, 0), | 499 | coda_write(dev, vb2_dma_contig_plane_dma_addr(vb, 0), |
498 | CODA_CMD_ENC_HEADER_BB_START); | 500 | CODA_CMD_ENC_HEADER_BB_START); |
499 | bufsize = vb2_plane_size(buf, 0); | 501 | bufsize = vb2_plane_size(vb, 0); |
500 | if (dev->devtype->product == CODA_960) | 502 | if (dev->devtype->product == CODA_960) |
501 | bufsize /= 1024; | 503 | bufsize /= 1024; |
502 | coda_write(dev, bufsize, CODA_CMD_ENC_HEADER_BB_SIZE); | 504 | coda_write(dev, bufsize, CODA_CMD_ENC_HEADER_BB_SIZE); |
@@ -509,14 +511,14 @@ static int coda_encode_header(struct coda_ctx *ctx, struct vb2_buffer *buf, | |||
509 | 511 | ||
510 | if (dev->devtype->product == CODA_960) { | 512 | if (dev->devtype->product == CODA_960) { |
511 | for (i = 63; i > 0; i--) | 513 | for (i = 63; i > 0; i--) |
512 | if (((char *)vb2_plane_vaddr(buf, 0))[i] != 0) | 514 | if (((char *)vb2_plane_vaddr(vb, 0))[i] != 0) |
513 | break; | 515 | break; |
514 | *size = i + 1; | 516 | *size = i + 1; |
515 | } else { | 517 | } else { |
516 | *size = coda_read(dev, CODA_REG_BIT_WR_PTR(ctx->reg_idx)) - | 518 | *size = coda_read(dev, CODA_REG_BIT_WR_PTR(ctx->reg_idx)) - |
517 | coda_read(dev, CODA_CMD_ENC_HEADER_BB_START); | 519 | coda_read(dev, CODA_CMD_ENC_HEADER_BB_START); |
518 | } | 520 | } |
519 | memcpy(header, vb2_plane_vaddr(buf, 0), *size); | 521 | memcpy(header, vb2_plane_vaddr(vb, 0), *size); |
520 | 522 | ||
521 | return 0; | 523 | return 0; |
522 | } | 524 | } |
@@ -799,7 +801,7 @@ static int coda_start_encoding(struct coda_ctx *ctx) | |||
799 | struct v4l2_device *v4l2_dev = &dev->v4l2_dev; | 801 | struct v4l2_device *v4l2_dev = &dev->v4l2_dev; |
800 | struct coda_q_data *q_data_src, *q_data_dst; | 802 | struct coda_q_data *q_data_src, *q_data_dst; |
801 | u32 bitstream_buf, bitstream_size; | 803 | u32 bitstream_buf, bitstream_size; |
802 | struct vb2_buffer *buf; | 804 | struct vb2_v4l2_buffer *buf; |
803 | int gamma, ret, value; | 805 | int gamma, ret, value; |
804 | u32 dst_fourcc; | 806 | u32 dst_fourcc; |
805 | int num_fb; | 807 | int num_fb; |
@@ -810,7 +812,7 @@ static int coda_start_encoding(struct coda_ctx *ctx) | |||
810 | dst_fourcc = q_data_dst->fourcc; | 812 | dst_fourcc = q_data_dst->fourcc; |
811 | 813 | ||
812 | buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); | 814 | buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); |
813 | bitstream_buf = vb2_dma_contig_plane_dma_addr(buf, 0); | 815 | bitstream_buf = vb2_dma_contig_plane_dma_addr(&buf->vb2_buf, 0); |
814 | bitstream_size = q_data_dst->sizeimage; | 816 | bitstream_size = q_data_dst->sizeimage; |
815 | 817 | ||
816 | if (!coda_is_initialized(dev)) { | 818 | if (!coda_is_initialized(dev)) { |
@@ -1185,7 +1187,7 @@ out: | |||
1185 | static int coda_prepare_encode(struct coda_ctx *ctx) | 1187 | static int coda_prepare_encode(struct coda_ctx *ctx) |
1186 | { | 1188 | { |
1187 | struct coda_q_data *q_data_src, *q_data_dst; | 1189 | struct coda_q_data *q_data_src, *q_data_dst; |
1188 | struct vb2_buffer *src_buf, *dst_buf; | 1190 | struct vb2_v4l2_buffer *src_buf, *dst_buf; |
1189 | struct coda_dev *dev = ctx->dev; | 1191 | struct coda_dev *dev = ctx->dev; |
1190 | int force_ipicture; | 1192 | int force_ipicture; |
1191 | int quant_param = 0; | 1193 | int quant_param = 0; |
@@ -1200,8 +1202,8 @@ static int coda_prepare_encode(struct coda_ctx *ctx) | |||
1200 | q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); | 1202 | q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE); |
1201 | dst_fourcc = q_data_dst->fourcc; | 1203 | dst_fourcc = q_data_dst->fourcc; |
1202 | 1204 | ||
1203 | src_buf->v4l2_buf.sequence = ctx->osequence; | 1205 | src_buf->sequence = ctx->osequence; |
1204 | dst_buf->v4l2_buf.sequence = ctx->osequence; | 1206 | dst_buf->sequence = ctx->osequence; |
1205 | ctx->osequence++; | 1207 | ctx->osequence++; |
1206 | 1208 | ||
1207 | /* | 1209 | /* |
@@ -1209,12 +1211,12 @@ static int coda_prepare_encode(struct coda_ctx *ctx) | |||
1209 | * frame as IDR. This is a problem for some decoders that can't | 1211 | * frame as IDR. This is a problem for some decoders that can't |
1210 | * recover when a frame is lost. | 1212 | * recover when a frame is lost. |
1211 | */ | 1213 | */ |
1212 | if (src_buf->v4l2_buf.sequence % ctx->params.gop_size) { | 1214 | if (src_buf->sequence % ctx->params.gop_size) { |
1213 | src_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_PFRAME; | 1215 | src_buf->flags |= V4L2_BUF_FLAG_PFRAME; |
1214 | src_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_KEYFRAME; | 1216 | src_buf->flags &= ~V4L2_BUF_FLAG_KEYFRAME; |
1215 | } else { | 1217 | } else { |
1216 | src_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME; | 1218 | src_buf->flags |= V4L2_BUF_FLAG_KEYFRAME; |
1217 | src_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_PFRAME; | 1219 | src_buf->flags &= ~V4L2_BUF_FLAG_PFRAME; |
1218 | } | 1220 | } |
1219 | 1221 | ||
1220 | if (dev->devtype->product == CODA_960) | 1222 | if (dev->devtype->product == CODA_960) |
@@ -1224,9 +1226,9 @@ static int coda_prepare_encode(struct coda_ctx *ctx) | |||
1224 | * Copy headers at the beginning of the first frame for H.264 only. | 1226 | * Copy headers at the beginning of the first frame for H.264 only. |
1225 | * In MPEG4 they are already copied by the coda. | 1227 | * In MPEG4 they are already copied by the coda. |
1226 | */ | 1228 | */ |
1227 | if (src_buf->v4l2_buf.sequence == 0) { | 1229 | if (src_buf->sequence == 0) { |
1228 | pic_stream_buffer_addr = | 1230 | pic_stream_buffer_addr = |
1229 | vb2_dma_contig_plane_dma_addr(dst_buf, 0) + | 1231 | vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0) + |
1230 | ctx->vpu_header_size[0] + | 1232 | ctx->vpu_header_size[0] + |
1231 | ctx->vpu_header_size[1] + | 1233 | ctx->vpu_header_size[1] + |
1232 | ctx->vpu_header_size[2]; | 1234 | ctx->vpu_header_size[2]; |
@@ -1234,20 +1236,21 @@ static int coda_prepare_encode(struct coda_ctx *ctx) | |||
1234 | ctx->vpu_header_size[0] - | 1236 | ctx->vpu_header_size[0] - |
1235 | ctx->vpu_header_size[1] - | 1237 | ctx->vpu_header_size[1] - |
1236 | ctx->vpu_header_size[2]; | 1238 | ctx->vpu_header_size[2]; |
1237 | memcpy(vb2_plane_vaddr(dst_buf, 0), | 1239 | memcpy(vb2_plane_vaddr(&dst_buf->vb2_buf, 0), |
1238 | &ctx->vpu_header[0][0], ctx->vpu_header_size[0]); | 1240 | &ctx->vpu_header[0][0], ctx->vpu_header_size[0]); |
1239 | memcpy(vb2_plane_vaddr(dst_buf, 0) + ctx->vpu_header_size[0], | 1241 | memcpy(vb2_plane_vaddr(&dst_buf->vb2_buf, 0) |
1240 | &ctx->vpu_header[1][0], ctx->vpu_header_size[1]); | 1242 | + ctx->vpu_header_size[0], &ctx->vpu_header[1][0], |
1241 | memcpy(vb2_plane_vaddr(dst_buf, 0) + ctx->vpu_header_size[0] + | 1243 | ctx->vpu_header_size[1]); |
1242 | ctx->vpu_header_size[1], &ctx->vpu_header[2][0], | 1244 | memcpy(vb2_plane_vaddr(&dst_buf->vb2_buf, 0) |
1243 | ctx->vpu_header_size[2]); | 1245 | + ctx->vpu_header_size[0] + ctx->vpu_header_size[1], |
1246 | &ctx->vpu_header[2][0], ctx->vpu_header_size[2]); | ||
1244 | } else { | 1247 | } else { |
1245 | pic_stream_buffer_addr = | 1248 | pic_stream_buffer_addr = |
1246 | vb2_dma_contig_plane_dma_addr(dst_buf, 0); | 1249 | vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0); |
1247 | pic_stream_buffer_size = q_data_dst->sizeimage; | 1250 | pic_stream_buffer_size = q_data_dst->sizeimage; |
1248 | } | 1251 | } |
1249 | 1252 | ||
1250 | if (src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_KEYFRAME) { | 1253 | if (src_buf->flags & V4L2_BUF_FLAG_KEYFRAME) { |
1251 | force_ipicture = 1; | 1254 | force_ipicture = 1; |
1252 | switch (dst_fourcc) { | 1255 | switch (dst_fourcc) { |
1253 | case V4L2_PIX_FMT_H264: | 1256 | case V4L2_PIX_FMT_H264: |
@@ -1324,7 +1327,7 @@ static int coda_prepare_encode(struct coda_ctx *ctx) | |||
1324 | 1327 | ||
1325 | static void coda_finish_encode(struct coda_ctx *ctx) | 1328 | static void coda_finish_encode(struct coda_ctx *ctx) |
1326 | { | 1329 | { |
1327 | struct vb2_buffer *src_buf, *dst_buf; | 1330 | struct vb2_v4l2_buffer *src_buf, *dst_buf; |
1328 | struct coda_dev *dev = ctx->dev; | 1331 | struct coda_dev *dev = ctx->dev; |
1329 | u32 wr_ptr, start_ptr; | 1332 | u32 wr_ptr, start_ptr; |
1330 | 1333 | ||
@@ -1338,13 +1341,13 @@ static void coda_finish_encode(struct coda_ctx *ctx) | |||
1338 | wr_ptr = coda_read(dev, CODA_REG_BIT_WR_PTR(ctx->reg_idx)); | 1341 | wr_ptr = coda_read(dev, CODA_REG_BIT_WR_PTR(ctx->reg_idx)); |
1339 | 1342 | ||
1340 | /* Calculate bytesused field */ | 1343 | /* Calculate bytesused field */ |
1341 | if (dst_buf->v4l2_buf.sequence == 0) { | 1344 | if (dst_buf->sequence == 0) { |
1342 | vb2_set_plane_payload(dst_buf, 0, wr_ptr - start_ptr + | 1345 | vb2_set_plane_payload(&dst_buf->vb2_buf, 0, |
1343 | ctx->vpu_header_size[0] + | 1346 | ctx->vpu_header_size[0] + |
1344 | ctx->vpu_header_size[1] + | 1347 | ctx->vpu_header_size[1] + |
1345 | ctx->vpu_header_size[2]); | 1348 | ctx->vpu_header_size[2]); |
1346 | } else { | 1349 | } else { |
1347 | vb2_set_plane_payload(dst_buf, 0, wr_ptr - start_ptr); | 1350 | vb2_set_plane_payload(&dst_buf->vb2_buf, 0, wr_ptr - start_ptr); |
1348 | } | 1351 | } |
1349 | 1352 | ||
1350 | v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, "frame size = %u\n", | 1353 | v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev, "frame size = %u\n", |
@@ -1354,18 +1357,18 @@ static void coda_finish_encode(struct coda_ctx *ctx) | |||
1354 | coda_read(dev, CODA_RET_ENC_PIC_FLAG); | 1357 | coda_read(dev, CODA_RET_ENC_PIC_FLAG); |
1355 | 1358 | ||
1356 | if (coda_read(dev, CODA_RET_ENC_PIC_TYPE) == 0) { | 1359 | if (coda_read(dev, CODA_RET_ENC_PIC_TYPE) == 0) { |
1357 | dst_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME; | 1360 | dst_buf->flags |= V4L2_BUF_FLAG_KEYFRAME; |
1358 | dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_PFRAME; | 1361 | dst_buf->flags &= ~V4L2_BUF_FLAG_PFRAME; |
1359 | } else { | 1362 | } else { |
1360 | dst_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_PFRAME; | 1363 | dst_buf->flags |= V4L2_BUF_FLAG_PFRAME; |
1361 | dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_KEYFRAME; | 1364 | dst_buf->flags &= ~V4L2_BUF_FLAG_KEYFRAME; |
1362 | } | 1365 | } |
1363 | 1366 | ||
1364 | dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp; | 1367 | dst_buf->timestamp = src_buf->timestamp; |
1365 | dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; | 1368 | dst_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; |
1366 | dst_buf->v4l2_buf.flags |= | 1369 | dst_buf->flags |= |
1367 | src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; | 1370 | src_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK; |
1368 | dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode; | 1371 | dst_buf->timecode = src_buf->timecode; |
1369 | 1372 | ||
1370 | v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE); | 1373 | v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE); |
1371 | 1374 | ||
@@ -1378,8 +1381,8 @@ static void coda_finish_encode(struct coda_ctx *ctx) | |||
1378 | 1381 | ||
1379 | v4l2_dbg(1, coda_debug, &dev->v4l2_dev, | 1382 | v4l2_dbg(1, coda_debug, &dev->v4l2_dev, |
1380 | "job finished: encoding frame (%d) (%s)\n", | 1383 | "job finished: encoding frame (%d) (%s)\n", |
1381 | dst_buf->v4l2_buf.sequence, | 1384 | dst_buf->sequence, |
1382 | (dst_buf->v4l2_buf.flags & V4L2_BUF_FLAG_KEYFRAME) ? | 1385 | (dst_buf->flags & V4L2_BUF_FLAG_KEYFRAME) ? |
1383 | "KEYFRAME" : "PFRAME"); | 1386 | "KEYFRAME" : "PFRAME"); |
1384 | } | 1387 | } |
1385 | 1388 | ||
@@ -1716,7 +1719,7 @@ static int coda_start_decoding(struct coda_ctx *ctx) | |||
1716 | 1719 | ||
1717 | static int coda_prepare_decode(struct coda_ctx *ctx) | 1720 | static int coda_prepare_decode(struct coda_ctx *ctx) |
1718 | { | 1721 | { |
1719 | struct vb2_buffer *dst_buf; | 1722 | struct vb2_v4l2_buffer *dst_buf; |
1720 | struct coda_dev *dev = ctx->dev; | 1723 | struct coda_dev *dev = ctx->dev; |
1721 | struct coda_q_data *q_data_dst; | 1724 | struct coda_q_data *q_data_dst; |
1722 | struct coda_buffer_meta *meta; | 1725 | struct coda_buffer_meta *meta; |
@@ -1763,7 +1766,7 @@ static int coda_prepare_decode(struct coda_ctx *ctx) | |||
1763 | * well as the rotator buffer output. | 1766 | * well as the rotator buffer output. |
1764 | * ROT_INDEX needs to be < 0x40, but > ctx->num_internal_frames. | 1767 | * ROT_INDEX needs to be < 0x40, but > ctx->num_internal_frames. |
1765 | */ | 1768 | */ |
1766 | coda_write(dev, CODA_MAX_FRAMEBUFFERS + dst_buf->v4l2_buf.index, | 1769 | coda_write(dev, CODA_MAX_FRAMEBUFFERS + dst_buf->vb2_buf.index, |
1767 | CODA9_CMD_DEC_PIC_ROT_INDEX); | 1770 | CODA9_CMD_DEC_PIC_ROT_INDEX); |
1768 | 1771 | ||
1769 | reg_addr = CODA9_CMD_DEC_PIC_ROT_ADDR_Y; | 1772 | reg_addr = CODA9_CMD_DEC_PIC_ROT_ADDR_Y; |
@@ -1838,7 +1841,7 @@ static void coda_finish_decode(struct coda_ctx *ctx) | |||
1838 | struct coda_dev *dev = ctx->dev; | 1841 | struct coda_dev *dev = ctx->dev; |
1839 | struct coda_q_data *q_data_src; | 1842 | struct coda_q_data *q_data_src; |
1840 | struct coda_q_data *q_data_dst; | 1843 | struct coda_q_data *q_data_dst; |
1841 | struct vb2_buffer *dst_buf; | 1844 | struct vb2_v4l2_buffer *dst_buf; |
1842 | struct coda_buffer_meta *meta; | 1845 | struct coda_buffer_meta *meta; |
1843 | unsigned long payload; | 1846 | unsigned long payload; |
1844 | unsigned long flags; | 1847 | unsigned long flags; |
@@ -2029,15 +2032,15 @@ static void coda_finish_decode(struct coda_ctx *ctx) | |||
2029 | if (ctx->display_idx >= 0 && | 2032 | if (ctx->display_idx >= 0 && |
2030 | ctx->display_idx < ctx->num_internal_frames) { | 2033 | ctx->display_idx < ctx->num_internal_frames) { |
2031 | dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx); | 2034 | dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx); |
2032 | dst_buf->v4l2_buf.sequence = ctx->osequence++; | 2035 | dst_buf->sequence = ctx->osequence++; |
2033 | 2036 | ||
2034 | dst_buf->v4l2_buf.flags &= ~(V4L2_BUF_FLAG_KEYFRAME | | 2037 | dst_buf->flags &= ~(V4L2_BUF_FLAG_KEYFRAME | |
2035 | V4L2_BUF_FLAG_PFRAME | | 2038 | V4L2_BUF_FLAG_PFRAME | |
2036 | V4L2_BUF_FLAG_BFRAME); | 2039 | V4L2_BUF_FLAG_BFRAME); |
2037 | dst_buf->v4l2_buf.flags |= ctx->frame_types[ctx->display_idx]; | 2040 | dst_buf->flags |= ctx->frame_types[ctx->display_idx]; |
2038 | meta = &ctx->frame_metas[ctx->display_idx]; | 2041 | meta = &ctx->frame_metas[ctx->display_idx]; |
2039 | dst_buf->v4l2_buf.timecode = meta->timecode; | 2042 | dst_buf->timecode = meta->timecode; |
2040 | dst_buf->v4l2_buf.timestamp = meta->timestamp; | 2043 | dst_buf->timestamp = meta->timestamp; |
2041 | 2044 | ||
2042 | trace_coda_dec_rot_done(ctx, dst_buf, meta); | 2045 | trace_coda_dec_rot_done(ctx, dst_buf, meta); |
2043 | 2046 | ||
@@ -2052,15 +2055,15 @@ static void coda_finish_decode(struct coda_ctx *ctx) | |||
2052 | payload = width * height * 2; | 2055 | payload = width * height * 2; |
2053 | break; | 2056 | break; |
2054 | } | 2057 | } |
2055 | vb2_set_plane_payload(dst_buf, 0, payload); | 2058 | vb2_set_plane_payload(&dst_buf->vb2_buf, 0, payload); |
2056 | 2059 | ||
2057 | coda_m2m_buf_done(ctx, dst_buf, ctx->frame_errors[display_idx] ? | 2060 | coda_m2m_buf_done(ctx, dst_buf, ctx->frame_errors[display_idx] ? |
2058 | VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); | 2061 | VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); |
2059 | 2062 | ||
2060 | v4l2_dbg(1, coda_debug, &dev->v4l2_dev, | 2063 | v4l2_dbg(1, coda_debug, &dev->v4l2_dev, |
2061 | "job finished: decoding frame (%d) (%s)\n", | 2064 | "job finished: decoding frame (%d) (%s)\n", |
2062 | dst_buf->v4l2_buf.sequence, | 2065 | dst_buf->sequence, |
2063 | (dst_buf->v4l2_buf.flags & V4L2_BUF_FLAG_KEYFRAME) ? | 2066 | (dst_buf->flags & V4L2_BUF_FLAG_KEYFRAME) ? |
2064 | "KEYFRAME" : "PFRAME"); | 2067 | "KEYFRAME" : "PFRAME"); |
2065 | } else { | 2068 | } else { |
2066 | v4l2_dbg(1, coda_debug, &dev->v4l2_dev, | 2069 | v4l2_dbg(1, coda_debug, &dev->v4l2_dev, |