Skip to content

Commit

Permalink
[media] coda: round up internal frames to multiples of macroblock siz…
Browse files Browse the repository at this point in the history
…e for h.264

CODA7541 only supports encoding h.264 frames with width and height that are
multiples of the macroblock size.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
  • Loading branch information
Philipp Zabel authored and Mauro Carvalho Chehab committed Jul 22, 2014
1 parent 1b0ed7b commit 7c3df78
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions drivers/media/platform/coda.c
Original file line number Diff line number Diff line change
Expand Up @@ -1744,15 +1744,21 @@ static void coda_free_framebuffers(struct coda_ctx *ctx)
static int coda_alloc_framebuffers(struct coda_ctx *ctx, struct coda_q_data *q_data, u32 fourcc)
{
struct coda_dev *dev = ctx->dev;
int height = q_data->height;
int width, height;
dma_addr_t paddr;
int ysize;
int ret;
int i;

if (ctx->codec && ctx->codec->src_fourcc == V4L2_PIX_FMT_H264)
height = round_up(height, 16);
ysize = round_up(q_data->width, 8) * height;
if (ctx->codec && (ctx->codec->src_fourcc == V4L2_PIX_FMT_H264 ||
ctx->codec->dst_fourcc == V4L2_PIX_FMT_H264)) {
width = round_up(q_data->width, 16);
height = round_up(q_data->height, 16);
} else {
width = round_up(q_data->width, 8);
height = q_data->height;
}
ysize = width * height;

/* Allocate frame buffers */
for (i = 0; i < ctx->num_internal_frames; i++) {
Expand Down Expand Up @@ -2377,7 +2383,16 @@ static int coda_start_encoding(struct coda_ctx *ctx)
value = (q_data_src->width & CODADX6_PICWIDTH_MASK) << CODADX6_PICWIDTH_OFFSET;
value |= (q_data_src->height & CODADX6_PICHEIGHT_MASK) << CODA_PICHEIGHT_OFFSET;
break;
default:
case CODA_7541:
if (dst_fourcc == V4L2_PIX_FMT_H264) {
value = (round_up(q_data_src->width, 16) &
CODA7_PICWIDTH_MASK) << CODA7_PICWIDTH_OFFSET;
value |= (round_up(q_data_src->height, 16) &
CODA7_PICHEIGHT_MASK) << CODA_PICHEIGHT_OFFSET;
break;
}
/* fallthrough */
case CODA_960:
value = (q_data_src->width & CODA7_PICWIDTH_MASK) << CODA7_PICWIDTH_OFFSET;
value |= (q_data_src->height & CODA7_PICHEIGHT_MASK) << CODA_PICHEIGHT_OFFSET;
}
Expand Down

0 comments on commit 7c3df78

Please sign in to comment.