Lines Matching refs:ctx
215 int coda_jpeg_write_tables(struct coda_ctx *ctx)
225 { 512, ctx->params.jpeg_qmat_tab[0], 64 },
226 { 576, ctx->params.jpeg_qmat_tab[1], 64 },
227 { 640, ctx->params.jpeg_qmat_tab[1], 64 },
232 coda_memcpy_parabuf(ctx->parabuf.vaddr, huff + i);
236 coda_memcpy_parabuf(ctx->parabuf.vaddr, qmat + i);
241 bool coda_jpeg_check_buffer(struct coda_ctx *ctx, struct vb2_buffer *vb)
265 static int coda9_jpeg_gen_dec_huff_tab(struct coda_ctx *ctx, int tab_num);
267 int coda_jpeg_decode_header(struct coda_ctx *ctx, struct vb2_buffer *vb)
269 struct coda_dev *dev = ctx->dev;
290 ctx->params.jpeg_restart_interval = header.restart_interval;
293 if (header.frame.height > ctx->codec->max_h ||
294 header.frame.width > ctx->codec->max_w) {
300 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
330 if (!ctx->params.jpeg_qmat_tab[i]) {
331 ctx->params.jpeg_qmat_tab[i] = kmalloc(64, GFP_KERNEL);
332 if (!ctx->params.jpeg_qmat_tab[i])
335 memcpy(ctx->params.jpeg_qmat_tab[i],
355 huff_tab = ctx->params.jpeg_huff_tab;
360 ctx->params.jpeg_huff_tab = huff_tab;
382 ctx->params.jpeg_huff_dc_index[j] =
384 ctx->params.jpeg_huff_ac_index[j] =
390 coda9_jpeg_gen_dec_huff_tab(ctx, i);
393 ctx->jpeg_ecs_offset = header.ecs_offset;
398 ctx->params.jpeg_chroma_subsampling = header.frame.subsampling;
423 static int coda9_jpeg_dec_huff_setup(struct coda_ctx *ctx)
425 struct coda_huff_tab *huff_tab = ctx->params.jpeg_huff_tab;
426 struct coda_dev *dev = ctx->dev;
471 static void coda9_jpeg_qmat_setup(struct coda_ctx *ctx)
473 struct coda_dev *dev = ctx->dev;
474 int *qmat_index = ctx->params.jpeg_qmat_index;
475 u8 **qmat_tab = ctx->params.jpeg_qmat_tab;
482 static void coda9_jpeg_dec_bbc_gbu_setup(struct coda_ctx *ctx,
485 struct coda_dev *dev = ctx->dev;
582 static int coda9_jpeg_gen_enc_huff_tab(struct coda_ctx *ctx, int tab_num,
651 static u8 *coda9_jpeg_get_huff_bits(struct coda_ctx *ctx, int tab_num)
653 struct coda_huff_tab *huff_tab = ctx->params.jpeg_huff_tab;
668 static int coda9_jpeg_gen_dec_huff_tab(struct coda_ctx *ctx, int tab_num)
678 huff_bits = coda9_jpeg_get_huff_bits(ctx, tab_num);
686 huff_ptr = ctx->params.jpeg_huff_tab->ptr + ofs;
687 huff_max = ctx->params.jpeg_huff_tab->max + ofs;
688 huff_min = ctx->params.jpeg_huff_tab->min + ofs;
716 static int coda9_jpeg_load_huff_tab(struct coda_ctx *ctx)
732 ret = coda9_jpeg_gen_enc_huff_tab(ctx, i, huff->size[i],
738 if (!ctx->params.jpeg_huff_data) {
739 ctx->params.jpeg_huff_data =
742 if (!ctx->params.jpeg_huff_data) {
747 huff_data = ctx->params.jpeg_huff_data;
774 static void coda9_jpeg_write_huff_tab(struct coda_ctx *ctx)
776 struct coda_dev *dev = ctx->dev;
777 u32 *huff_data = ctx->params.jpeg_huff_data;
798 static void coda9_jpeg_load_qmat_tab(struct coda_ctx *ctx)
800 struct coda_dev *dev = ctx->dev;
804 luma_tab = ctx->params.jpeg_qmat_tab[0];
808 chroma_tab = ctx->params.jpeg_qmat_tab[1];
861 static int coda_jpeg_define_quantization_table(struct coda_ctx *ctx, u8 index,
865 ctx->params.jpeg_qmat_tab[index], 64,
875 static int coda9_jpeg_encode_header(struct coda_ctx *ctx, int len, u8 *buf)
882 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
893 if (ctx->params.jpeg_restart_interval) {
900 ret = coda_jpeg_put_word(ctx->params.jpeg_restart_interval,
907 ret = coda_jpeg_define_quantization_table(ctx, 0x00, &stream);
911 ret = coda_jpeg_define_quantization_table(ctx, 0x01, &stream);
1010 void coda_set_jpeg_compression_quality(struct coda_ctx *ctx, int quality)
1014 ctx->params.jpeg_quality = quality;
1031 if (ctx->params.jpeg_qmat_tab[0]) {
1032 memcpy(ctx->params.jpeg_qmat_tab[0], luma_q, 64);
1033 coda_scale_quant_table(ctx->params.jpeg_qmat_tab[0], scale);
1035 if (ctx->params.jpeg_qmat_tab[1]) {
1036 memcpy(ctx->params.jpeg_qmat_tab[1], chroma_q, 64);
1037 coda_scale_quant_table(ctx->params.jpeg_qmat_tab[1], scale);
1045 static int coda9_jpeg_start_encoding(struct coda_ctx *ctx)
1047 struct coda_dev *dev = ctx->dev;
1050 ret = coda9_jpeg_load_huff_tab(ctx);
1055 if (!ctx->params.jpeg_qmat_tab[0]) {
1056 ctx->params.jpeg_qmat_tab[0] = kmalloc(64, GFP_KERNEL);
1057 if (!ctx->params.jpeg_qmat_tab[0])
1060 if (!ctx->params.jpeg_qmat_tab[1]) {
1061 ctx->params.jpeg_qmat_tab[1] = kmalloc(64, GFP_KERNEL);
1062 if (!ctx->params.jpeg_qmat_tab[1])
1065 coda_set_jpeg_compression_quality(ctx, ctx->params.jpeg_quality);
1070 static int coda9_jpeg_prepare_encode(struct coda_ctx *ctx)
1074 struct coda_dev *dev = ctx->dev;
1083 src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
1084 dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
1085 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
1091 src_buf->sequence = ctx->osequence;
1092 dst_buf->sequence = ctx->osequence;
1093 ctx->osequence++;
1098 coda_set_gdi_regs(ctx);
1117 coda9_jpeg_encode_header(ctx,
1149 coda_write(dev, ctx->params.jpeg_restart_interval,
1155 coda9_jpeg_write_huff_tab(ctx);
1156 coda9_jpeg_load_qmat_tab(ctx);
1158 if (ctx->params.rot_mode & CODA_ROT_90) {
1169 coda_write(dev, ctx->params.rot_mode ?
1170 (CODA_ROT_MIR_ENABLE | ctx->params.rot_mode) : 0,
1191 coda_write_base(ctx, q_data_src, src_buf, CODA9_GDI_INFO_BASE_Y);
1200 trace_coda_jpeg_run(ctx, src_buf);
1207 static void coda9_jpeg_finish_encode(struct coda_ctx *ctx)
1210 struct coda_dev *dev = ctx->dev;
1214 if (ctx->aborting) {
1215 coda_write(ctx->dev, 0, CODA9_REG_JPEG_BBC_FLUSH_CMD);
1224 mutex_lock(&ctx->wakeup_mutex);
1225 src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
1226 dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
1228 trace_coda_jpeg_done(ctx, dst_buf);
1240 coda_dbg(1, ctx, "ERRMB: 0x%x\n", err_mb);
1251 coda_m2m_buf_done(ctx, dst_buf, err_mb ? VB2_BUF_STATE_ERROR :
1253 mutex_unlock(&ctx->wakeup_mutex);
1255 coda_dbg(1, ctx, "job finished: encoded frame (%u)%s\n",
1264 coda_hw_reset(ctx);
1267 static void coda9_jpeg_encode_timeout(struct coda_ctx *ctx)
1269 struct coda_dev *dev = ctx->dev;
1277 coda9_jpeg_finish_encode(ctx);
1281 coda_hw_reset(ctx);
1284 static void coda9_jpeg_release(struct coda_ctx *ctx)
1288 if (ctx->params.jpeg_qmat_tab[0] == luma_q)
1289 ctx->params.jpeg_qmat_tab[0] = NULL;
1290 if (ctx->params.jpeg_qmat_tab[1] == chroma_q)
1291 ctx->params.jpeg_qmat_tab[1] = NULL;
1293 kfree(ctx->params.jpeg_qmat_tab[i]);
1294 kfree(ctx->params.jpeg_huff_data);
1295 kfree(ctx->params.jpeg_huff_tab);
1311 static int coda9_jpeg_start_decoding(struct coda_ctx *ctx)
1313 ctx->params.jpeg_qmat_index[0] = 0;
1314 ctx->params.jpeg_qmat_index[1] = 1;
1315 ctx->params.jpeg_qmat_index[2] = 1;
1316 ctx->params.jpeg_qmat_tab[0] = luma_q;
1317 ctx->params.jpeg_qmat_tab[1] = chroma_q;
1327 static int coda9_jpeg_prepare_decode(struct coda_ctx *ctx)
1329 struct coda_dev *dev = ctx->dev;
1338 src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
1339 dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
1340 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
1341 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
1350 v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
1354 ret = coda_jpeg_decode_header(ctx, &src_buf->vb2_buf);
1359 src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
1360 dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
1364 v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
1376 coda_set_gdi_regs(ctx);
1378 val = ctx->params.jpeg_huff_ac_index[0] << 12 |
1379 ctx->params.jpeg_huff_ac_index[1] << 11 |
1380 ctx->params.jpeg_huff_ac_index[2] << 10 |
1381 ctx->params.jpeg_huff_dc_index[0] << 9 |
1382 ctx->params.jpeg_huff_dc_index[1] << 8 |
1383 ctx->params.jpeg_huff_dc_index[2] << 7;
1384 if (ctx->params.jpeg_huff_tab)
1397 coda_write(dev, ctx->params.jpeg_restart_interval,
1400 if (ctx->params.jpeg_huff_tab) {
1401 ret = coda9_jpeg_dec_huff_setup(ctx);
1405 v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
1410 coda9_jpeg_qmat_setup(ctx);
1412 coda9_jpeg_dec_bbc_gbu_setup(ctx, &src_buf->vb2_buf,
1413 ctx->jpeg_ecs_offset);
1431 if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP)
1438 coda_write_base(ctx, q_data_dst, dst_buf, CODA9_GDI_INFO_BASE_Y);
1444 trace_coda_jpeg_run(ctx, src_buf);
1451 static void coda9_jpeg_finish_decode(struct coda_ctx *ctx)
1453 struct coda_dev *dev = ctx->dev;
1469 mutex_lock(&ctx->wakeup_mutex);
1470 src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
1471 dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
1472 dst_buf->sequence = ctx->osequence++;
1474 trace_coda_jpeg_done(ctx, dst_buf);
1482 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
1486 coda_m2m_buf_done(ctx, dst_buf, err_mb ? VB2_BUF_STATE_ERROR :
1489 mutex_unlock(&ctx->wakeup_mutex);
1491 coda_dbg(1, ctx, "job finished: decoded frame (%u)%s\n",
1500 coda_hw_reset(ctx);
1514 struct coda_ctx *ctx;
1541 ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
1542 if (!ctx) {
1549 complete(&ctx->completion);