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;
291 ctx->params.jpeg_restart_interval = header.restart_interval;
294 if (header.frame.height > ctx->codec->max_h ||
295 header.frame.width > ctx->codec->max_w) {
301 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
331 if (!ctx->params.jpeg_qmat_tab[i]) {
332 ctx->params.jpeg_qmat_tab[i] = kmalloc(64, GFP_KERNEL);
333 if (!ctx->params.jpeg_qmat_tab[i])
336 memcpy(ctx->params.jpeg_qmat_tab[i],
356 huff_tab = ctx->params.jpeg_huff_tab;
361 ctx->params.jpeg_huff_tab = huff_tab;
383 ctx->params.jpeg_huff_dc_index[j] =
385 ctx->params.jpeg_huff_ac_index[j] =
391 coda9_jpeg_gen_dec_huff_tab(ctx, i);
394 ctx->jpeg_ecs_offset = header.ecs_offset;
399 ctx->params.jpeg_chroma_subsampling = header.frame.subsampling;
424 static void coda9_jpeg_dec_huff_setup(struct coda_ctx *ctx)
426 struct coda_huff_tab *huff_tab = ctx->params.jpeg_huff_tab;
427 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;
1339 src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
1340 dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
1341 q_data_src = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT);
1342 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
1356 ret = coda_jpeg_decode_header(ctx, &src_buf->vb2_buf);
1358 src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
1359 dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
1374 coda_set_gdi_regs(ctx);
1376 val = ctx->params.jpeg_huff_ac_index[0] << 12 |
1377 ctx->params.jpeg_huff_ac_index[1] << 11 |
1378 ctx->params.jpeg_huff_ac_index[2] << 10 |
1379 ctx->params.jpeg_huff_dc_index[0] << 9 |
1380 ctx->params.jpeg_huff_dc_index[1] << 8 |
1381 ctx->params.jpeg_huff_dc_index[2] << 7;
1382 if (ctx->params.jpeg_huff_tab)
1399 coda_write(dev, ctx->params.jpeg_restart_interval,
1402 if (ctx->params.jpeg_huff_tab)
1403 coda9_jpeg_dec_huff_setup(ctx);
1405 coda9_jpeg_qmat_setup(ctx);
1407 coda9_jpeg_dec_bbc_gbu_setup(ctx, &src_buf->vb2_buf,
1408 ctx->jpeg_ecs_offset);
1426 if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP)
1433 coda_write_base(ctx, q_data_dst, dst_buf, CODA9_GDI_INFO_BASE_Y);
1439 trace_coda_jpeg_run(ctx, src_buf);
1446 static void coda9_jpeg_finish_decode(struct coda_ctx *ctx)
1448 struct coda_dev *dev = ctx->dev;
1464 mutex_lock(&ctx->wakeup_mutex);
1465 src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
1466 dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
1467 dst_buf->sequence = ctx->osequence++;
1469 trace_coda_jpeg_done(ctx, dst_buf);
1477 q_data_dst = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
1481 coda_m2m_buf_done(ctx, dst_buf, err_mb ? VB2_BUF_STATE_ERROR :
1484 mutex_unlock(&ctx->wakeup_mutex);
1486 coda_dbg(1, ctx, "job finished: decoded frame (%u)%s\n",
1495 coda_hw_reset(ctx);
1509 struct coda_ctx *ctx;
1536 ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
1537 if (!ctx) {
1544 complete(&ctx->completion);