1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka *
4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka * You may obtain a copy of the License at
7*437bfbebSnyanmisaka *
8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka *
10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka * limitations under the License.
15*437bfbebSnyanmisaka */
16*437bfbebSnyanmisaka
17*437bfbebSnyanmisaka #define MODULE_TAG "hal_m2vd_vdpu1"
18*437bfbebSnyanmisaka
19*437bfbebSnyanmisaka #include <string.h>
20*437bfbebSnyanmisaka
21*437bfbebSnyanmisaka #include "mpp_mem.h"
22*437bfbebSnyanmisaka #include "mpp_common.h"
23*437bfbebSnyanmisaka
24*437bfbebSnyanmisaka #include "hal_m2vd_base.h"
25*437bfbebSnyanmisaka #include "hal_m2vd_vdpu1_reg.h"
26*437bfbebSnyanmisaka #include "hal_m2vd_vpu1.h"
27*437bfbebSnyanmisaka
hal_m2vd_vdpu1_init(void * hal,MppHalCfg * cfg)28*437bfbebSnyanmisaka MPP_RET hal_m2vd_vdpu1_init(void *hal, MppHalCfg *cfg)
29*437bfbebSnyanmisaka {
30*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
31*437bfbebSnyanmisaka M2vdHalCtx *ctx = (M2vdHalCtx *)hal;
32*437bfbebSnyanmisaka M2vdVdpu1Reg_t *regs = NULL;
33*437bfbebSnyanmisaka
34*437bfbebSnyanmisaka regs = mpp_calloc(M2vdVdpu1Reg_t, 1);
35*437bfbebSnyanmisaka if (NULL == regs) {
36*437bfbebSnyanmisaka mpp_err_f("failed to malloc register ret\n");
37*437bfbebSnyanmisaka ret = MPP_ERR_MALLOC;
38*437bfbebSnyanmisaka goto __ERR_RET;
39*437bfbebSnyanmisaka }
40*437bfbebSnyanmisaka
41*437bfbebSnyanmisaka ctx->reg_len = M2VD_VDPU1_REG_NUM;
42*437bfbebSnyanmisaka
43*437bfbebSnyanmisaka ret = mpp_dev_init(&ctx->dev, VPU_CLIENT_VDPU1);
44*437bfbebSnyanmisaka if (ret) {
45*437bfbebSnyanmisaka mpp_err_f("mpp_dev_init failed. ret: %d\n", ret);
46*437bfbebSnyanmisaka ret = MPP_ERR_UNKNOW;
47*437bfbebSnyanmisaka goto __ERR_RET;
48*437bfbebSnyanmisaka }
49*437bfbebSnyanmisaka if (ctx->group == NULL) {
50*437bfbebSnyanmisaka ret = mpp_buffer_group_get_internal(&ctx->group, MPP_BUFFER_TYPE_ION);
51*437bfbebSnyanmisaka if (ret) {
52*437bfbebSnyanmisaka mpp_err("m2v_hal mpp_buffer_group_get failed\n");
53*437bfbebSnyanmisaka goto __ERR_RET;
54*437bfbebSnyanmisaka }
55*437bfbebSnyanmisaka }
56*437bfbebSnyanmisaka ret = mpp_buffer_get(ctx->group, &ctx->qp_table, M2VD_BUF_SIZE_QPTAB);
57*437bfbebSnyanmisaka if (ret) {
58*437bfbebSnyanmisaka mpp_err("m2v_hal_qtable_base get buffer failed\n");
59*437bfbebSnyanmisaka goto __ERR_RET;
60*437bfbebSnyanmisaka }
61*437bfbebSnyanmisaka
62*437bfbebSnyanmisaka ctx->packet_slots = cfg->packet_slots;
63*437bfbebSnyanmisaka ctx->frame_slots = cfg->frame_slots;
64*437bfbebSnyanmisaka ctx->dec_cb = cfg->dec_cb;
65*437bfbebSnyanmisaka ctx->regs = (void*)regs;
66*437bfbebSnyanmisaka cfg->dev = ctx->dev;
67*437bfbebSnyanmisaka
68*437bfbebSnyanmisaka return ret;
69*437bfbebSnyanmisaka
70*437bfbebSnyanmisaka __ERR_RET:
71*437bfbebSnyanmisaka if (regs) {
72*437bfbebSnyanmisaka mpp_free(regs);
73*437bfbebSnyanmisaka regs = NULL;
74*437bfbebSnyanmisaka }
75*437bfbebSnyanmisaka
76*437bfbebSnyanmisaka if (ctx) {
77*437bfbebSnyanmisaka hal_m2vd_vdpu1_deinit(ctx);
78*437bfbebSnyanmisaka }
79*437bfbebSnyanmisaka
80*437bfbebSnyanmisaka return ret;
81*437bfbebSnyanmisaka }
82*437bfbebSnyanmisaka
hal_m2vd_vdpu1_deinit(void * hal)83*437bfbebSnyanmisaka MPP_RET hal_m2vd_vdpu1_deinit(void *hal)
84*437bfbebSnyanmisaka {
85*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
86*437bfbebSnyanmisaka M2vdHalCtx *p = (M2vdHalCtx *)hal;
87*437bfbebSnyanmisaka
88*437bfbebSnyanmisaka if (p->dev) {
89*437bfbebSnyanmisaka mpp_dev_deinit(p->dev);
90*437bfbebSnyanmisaka p->dev = NULL;
91*437bfbebSnyanmisaka }
92*437bfbebSnyanmisaka
93*437bfbebSnyanmisaka if (p->qp_table) {
94*437bfbebSnyanmisaka ret = mpp_buffer_put(p->qp_table);
95*437bfbebSnyanmisaka p->qp_table = NULL;
96*437bfbebSnyanmisaka if (MPP_OK != ret) {
97*437bfbebSnyanmisaka mpp_err("m2v_hal qp_table put buffer failed\n");
98*437bfbebSnyanmisaka return ret;
99*437bfbebSnyanmisaka }
100*437bfbebSnyanmisaka }
101*437bfbebSnyanmisaka
102*437bfbebSnyanmisaka if (p->group) {
103*437bfbebSnyanmisaka ret = mpp_buffer_group_put(p->group);
104*437bfbebSnyanmisaka p->group = NULL;
105*437bfbebSnyanmisaka if (ret) {
106*437bfbebSnyanmisaka mpp_err("m2v_hal group free buffer failed\n");
107*437bfbebSnyanmisaka return ret;
108*437bfbebSnyanmisaka }
109*437bfbebSnyanmisaka }
110*437bfbebSnyanmisaka
111*437bfbebSnyanmisaka return ret;
112*437bfbebSnyanmisaka }
113*437bfbebSnyanmisaka
hal_m2vd_vdpu1_init_hwcfg(M2vdHalCtx * ctx)114*437bfbebSnyanmisaka static MPP_RET hal_m2vd_vdpu1_init_hwcfg(M2vdHalCtx *ctx)
115*437bfbebSnyanmisaka {
116*437bfbebSnyanmisaka M2vdVdpu1Reg_t *p_regs = (M2vdVdpu1Reg_t *)ctx->regs;
117*437bfbebSnyanmisaka
118*437bfbebSnyanmisaka memset(p_regs, 0, sizeof(M2vdVdpu1Reg_t));
119*437bfbebSnyanmisaka p_regs->sw02.dec_axi_rn_id = 0;
120*437bfbebSnyanmisaka p_regs->sw02.dec_timeout_e = 1;
121*437bfbebSnyanmisaka p_regs->sw02.dec_strswap32_e = 1;
122*437bfbebSnyanmisaka p_regs->sw02.dec_strendian_e = 1;
123*437bfbebSnyanmisaka p_regs->sw02.dec_inswap32_e = 1;
124*437bfbebSnyanmisaka p_regs->sw02.dec_outswap32_e = 1;
125*437bfbebSnyanmisaka
126*437bfbebSnyanmisaka p_regs->sw02.dec_clk_gate_e = 1;
127*437bfbebSnyanmisaka p_regs->sw02.dec_in_endian = 1;
128*437bfbebSnyanmisaka p_regs->sw02.dec_out_endian = 1;
129*437bfbebSnyanmisaka
130*437bfbebSnyanmisaka p_regs->sw02.dec_out_tiled_e = 0;
131*437bfbebSnyanmisaka p_regs->sw02.dec_max_burst = DEC_BUS_BURST_LENGTH_16;
132*437bfbebSnyanmisaka p_regs->sw02.dec_scmd_dis = 0;
133*437bfbebSnyanmisaka p_regs->sw02.dec_adv_pre_dis = 0;
134*437bfbebSnyanmisaka p_regs->sw55.apf_threshold = 8;
135*437bfbebSnyanmisaka p_regs->sw02.dec_latency = 0;
136*437bfbebSnyanmisaka p_regs->sw02.dec_data_disc_e = 0;
137*437bfbebSnyanmisaka p_regs->sw01.dec_irq = 0;
138*437bfbebSnyanmisaka p_regs->sw02.dec_axi_rn_id = 0;
139*437bfbebSnyanmisaka p_regs->sw03.dec_axi_wr_id = 0;
140*437bfbebSnyanmisaka p_regs->sw03.dec_mode = 8;
141*437bfbebSnyanmisaka
142*437bfbebSnyanmisaka return MPP_OK;
143*437bfbebSnyanmisaka }
144*437bfbebSnyanmisaka
hal_m2vd_vdpu1_gen_regs(void * hal,HalTaskInfo * task)145*437bfbebSnyanmisaka MPP_RET hal_m2vd_vdpu1_gen_regs(void *hal, HalTaskInfo *task)
146*437bfbebSnyanmisaka {
147*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
148*437bfbebSnyanmisaka
149*437bfbebSnyanmisaka if (task->dec.valid) {
150*437bfbebSnyanmisaka void *q_table = NULL;
151*437bfbebSnyanmisaka MppBuffer streambuf = NULL;
152*437bfbebSnyanmisaka MppBuffer framebuf = NULL;
153*437bfbebSnyanmisaka M2vdHalCtx *ctx = (M2vdHalCtx *)hal;
154*437bfbebSnyanmisaka M2VDDxvaParam *dx = (M2VDDxvaParam *)task->dec.syntax.data;
155*437bfbebSnyanmisaka M2vdVdpu1Reg_t *p_regs = (M2vdVdpu1Reg_t*) ctx->regs;
156*437bfbebSnyanmisaka
157*437bfbebSnyanmisaka task->dec.valid = 0;
158*437bfbebSnyanmisaka q_table = mpp_buffer_get_ptr(ctx->qp_table);
159*437bfbebSnyanmisaka memcpy(q_table, dx->qp_tab, M2VD_BUF_SIZE_QPTAB);
160*437bfbebSnyanmisaka mpp_buffer_sync_end(ctx->qp_table);
161*437bfbebSnyanmisaka
162*437bfbebSnyanmisaka hal_m2vd_vdpu1_init_hwcfg(ctx);
163*437bfbebSnyanmisaka
164*437bfbebSnyanmisaka p_regs->sw18.mv_accuracy_fwd = 1;
165*437bfbebSnyanmisaka p_regs->sw18.mv_accuracy_bwd = 1;
166*437bfbebSnyanmisaka if (dx->seq_ext_head_dec_flag) {
167*437bfbebSnyanmisaka p_regs->sw03.dec_mode = 5;
168*437bfbebSnyanmisaka p_regs->sw18.fcode_fwd_hor = dx->pic.full_pel_forward_vector;
169*437bfbebSnyanmisaka p_regs->sw18.fcode_fwd_ver = dx->pic.forward_f_code;
170*437bfbebSnyanmisaka p_regs->sw18.fcode_bwd_hor = dx->pic.full_pel_backward_vector;
171*437bfbebSnyanmisaka p_regs->sw18.fcode_bwd_ver = dx->pic.backward_f_code;
172*437bfbebSnyanmisaka } else {
173*437bfbebSnyanmisaka p_regs->sw03.dec_mode = 6;
174*437bfbebSnyanmisaka p_regs->sw18.fcode_fwd_hor = dx->pic.forward_f_code;
175*437bfbebSnyanmisaka p_regs->sw18.fcode_fwd_ver = dx->pic.forward_f_code;
176*437bfbebSnyanmisaka p_regs->sw18.fcode_bwd_hor = dx->pic.backward_f_code;
177*437bfbebSnyanmisaka p_regs->sw18.fcode_bwd_ver = dx->pic.backward_f_code;
178*437bfbebSnyanmisaka if (dx->pic.full_pel_forward_vector)
179*437bfbebSnyanmisaka p_regs->sw18.mv_accuracy_fwd = 0;
180*437bfbebSnyanmisaka if (dx->pic.full_pel_backward_vector)
181*437bfbebSnyanmisaka p_regs->sw18.mv_accuracy_bwd = 0;
182*437bfbebSnyanmisaka }
183*437bfbebSnyanmisaka
184*437bfbebSnyanmisaka p_regs->sw04.pic_mb_width = (dx->seq.decode_width + 15) >> 4;
185*437bfbebSnyanmisaka p_regs->sw04.pic_mb_height_p = (dx->seq.decode_height + 15) >> 4;
186*437bfbebSnyanmisaka p_regs->sw03.pic_interlace_e = 1 - dx->seq_ext.progressive_sequence;
187*437bfbebSnyanmisaka if (dx->pic_code_ext.picture_structure == M2VD_PIC_STRUCT_FRAME)
188*437bfbebSnyanmisaka p_regs->sw03.pic_fieldmode_e = 0;
189*437bfbebSnyanmisaka else {
190*437bfbebSnyanmisaka p_regs->sw03.pic_fieldmode_e = 1;
191*437bfbebSnyanmisaka p_regs->sw03.pic_topfield_e = dx->pic_code_ext.picture_structure == 1;
192*437bfbebSnyanmisaka }
193*437bfbebSnyanmisaka if (dx->pic.picture_coding_type == M2VD_CODING_TYPE_B)
194*437bfbebSnyanmisaka p_regs->sw03.pic_b_e = 1;
195*437bfbebSnyanmisaka else
196*437bfbebSnyanmisaka p_regs->sw03.pic_b_e = 0;
197*437bfbebSnyanmisaka if (dx->pic.picture_coding_type == M2VD_CODING_TYPE_I)
198*437bfbebSnyanmisaka p_regs->sw03.pic_inter_e = 0;
199*437bfbebSnyanmisaka else
200*437bfbebSnyanmisaka p_regs->sw03.pic_inter_e = 1;
201*437bfbebSnyanmisaka
202*437bfbebSnyanmisaka p_regs->sw04.topfieldfirst_e = dx->pic_code_ext.top_field_first;
203*437bfbebSnyanmisaka p_regs->sw03.fwd_interlace_e = 0;
204*437bfbebSnyanmisaka p_regs->sw03.write_mvs_e = 0;
205*437bfbebSnyanmisaka p_regs->sw04.alt_scan_e = dx->pic_code_ext.alternate_scan;
206*437bfbebSnyanmisaka p_regs->sw18.alt_scan_flag_e = dx->pic_code_ext.alternate_scan;
207*437bfbebSnyanmisaka
208*437bfbebSnyanmisaka p_regs->sw05.qscale_type = dx->pic_code_ext.q_scale_type;
209*437bfbebSnyanmisaka p_regs->sw05.intra_dc_prec = dx->pic_code_ext.intra_dc_precision;
210*437bfbebSnyanmisaka p_regs->sw05.con_mv_e = dx->pic_code_ext.concealment_motion_vectors;
211*437bfbebSnyanmisaka p_regs->sw05.intra_vlc_tab = dx->pic_code_ext.intra_vlc_format;
212*437bfbebSnyanmisaka p_regs->sw05.frame_pred_dct = dx->pic_code_ext.frame_pred_frame_dct;
213*437bfbebSnyanmisaka p_regs->sw06.init_qp = 1;
214*437bfbebSnyanmisaka
215*437bfbebSnyanmisaka mpp_buf_slot_get_prop(ctx->packet_slots, task->dec.input, SLOT_BUFFER, &streambuf);
216*437bfbebSnyanmisaka p_regs->sw12.rlc_vlc_base = mpp_buffer_get_fd(streambuf);
217*437bfbebSnyanmisaka if (dx->bitstream_offset) {
218*437bfbebSnyanmisaka mpp_dev_set_reg_offset(ctx->dev, 12, dx->bitstream_offset);
219*437bfbebSnyanmisaka }
220*437bfbebSnyanmisaka
221*437bfbebSnyanmisaka mpp_buf_slot_get_prop(ctx->frame_slots, dx->CurrPic.Index7Bits, SLOT_BUFFER, &framebuf);
222*437bfbebSnyanmisaka
223*437bfbebSnyanmisaka if ((dx->pic_code_ext.picture_structure == M2VD_PIC_STRUCT_TOP_FIELD) ||
224*437bfbebSnyanmisaka (dx->pic_code_ext.picture_structure == M2VD_PIC_STRUCT_FRAME)) {
225*437bfbebSnyanmisaka p_regs->sw13.dec_out_base = mpp_buffer_get_fd(framebuf);
226*437bfbebSnyanmisaka } else {
227*437bfbebSnyanmisaka p_regs->sw13.dec_out_base = mpp_buffer_get_fd(framebuf);
228*437bfbebSnyanmisaka mpp_dev_set_reg_offset(ctx->dev, 13, MPP_ALIGN(dx->seq.decode_width, 16));
229*437bfbebSnyanmisaka }
230*437bfbebSnyanmisaka
231*437bfbebSnyanmisaka mpp_buf_slot_get_prop(ctx->frame_slots, dx->frame_refs[0].Index7Bits, SLOT_BUFFER, &framebuf);
232*437bfbebSnyanmisaka p_regs->sw14.refer0_base = mpp_buffer_get_fd(framebuf);
233*437bfbebSnyanmisaka
234*437bfbebSnyanmisaka mpp_buf_slot_get_prop(ctx->frame_slots, dx->frame_refs[1].Index7Bits, SLOT_BUFFER, &framebuf);
235*437bfbebSnyanmisaka p_regs->sw15.refer1_base = mpp_buffer_get_fd(framebuf);
236*437bfbebSnyanmisaka
237*437bfbebSnyanmisaka mpp_buf_slot_get_prop(ctx->frame_slots, dx->frame_refs[2].Index7Bits, SLOT_BUFFER, &framebuf);
238*437bfbebSnyanmisaka p_regs->sw16.refer2_base = mpp_buffer_get_fd(framebuf);
239*437bfbebSnyanmisaka
240*437bfbebSnyanmisaka mpp_buf_slot_get_prop(ctx->frame_slots, dx->frame_refs[3].Index7Bits, SLOT_BUFFER, &framebuf);
241*437bfbebSnyanmisaka p_regs->sw17.refer3_base = mpp_buffer_get_fd(framebuf);
242*437bfbebSnyanmisaka
243*437bfbebSnyanmisaka p_regs->sw40.qtable_base = mpp_buffer_get_fd(ctx->qp_table);
244*437bfbebSnyanmisaka
245*437bfbebSnyanmisaka p_regs->sw48.startmb_x = 0;
246*437bfbebSnyanmisaka p_regs->sw48.startmb_y = 0;
247*437bfbebSnyanmisaka p_regs->sw03.dec_out_dis = 0;
248*437bfbebSnyanmisaka p_regs->sw03.filtering_dis = 1;
249*437bfbebSnyanmisaka p_regs->sw06.stream_len = dx->bitstream_length;
250*437bfbebSnyanmisaka p_regs->sw05.stream_start_bit = dx->bitstream_start_bit;
251*437bfbebSnyanmisaka p_regs->sw01.dec_e = 1;
252*437bfbebSnyanmisaka
253*437bfbebSnyanmisaka task->dec.valid = 1;
254*437bfbebSnyanmisaka ctx->dec_frame_cnt++;
255*437bfbebSnyanmisaka }
256*437bfbebSnyanmisaka
257*437bfbebSnyanmisaka return ret;
258*437bfbebSnyanmisaka }
259*437bfbebSnyanmisaka
hal_m2vd_vdpu1_start(void * hal,HalTaskInfo * task)260*437bfbebSnyanmisaka MPP_RET hal_m2vd_vdpu1_start(void *hal, HalTaskInfo *task)
261*437bfbebSnyanmisaka {
262*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
263*437bfbebSnyanmisaka M2vdHalCtx *ctx = (M2vdHalCtx *)hal;
264*437bfbebSnyanmisaka
265*437bfbebSnyanmisaka do {
266*437bfbebSnyanmisaka MppDevRegWrCfg wr_cfg;
267*437bfbebSnyanmisaka MppDevRegRdCfg rd_cfg;
268*437bfbebSnyanmisaka RK_U32 *regs = (RK_U32 *)ctx->regs;
269*437bfbebSnyanmisaka RK_U32 reg_size = sizeof(M2vdVdpu1Reg_t);
270*437bfbebSnyanmisaka
271*437bfbebSnyanmisaka wr_cfg.reg = regs;
272*437bfbebSnyanmisaka wr_cfg.size = reg_size;
273*437bfbebSnyanmisaka wr_cfg.offset = 0;
274*437bfbebSnyanmisaka
275*437bfbebSnyanmisaka ret = mpp_dev_ioctl(ctx->dev, MPP_DEV_REG_WR, &wr_cfg);
276*437bfbebSnyanmisaka if (ret) {
277*437bfbebSnyanmisaka mpp_err_f("set register write failed %d\n", ret);
278*437bfbebSnyanmisaka break;
279*437bfbebSnyanmisaka }
280*437bfbebSnyanmisaka
281*437bfbebSnyanmisaka rd_cfg.reg = regs;
282*437bfbebSnyanmisaka rd_cfg.size = reg_size;
283*437bfbebSnyanmisaka rd_cfg.offset = 0;
284*437bfbebSnyanmisaka
285*437bfbebSnyanmisaka ret = mpp_dev_ioctl(ctx->dev, MPP_DEV_REG_RD, &rd_cfg);
286*437bfbebSnyanmisaka if (ret) {
287*437bfbebSnyanmisaka mpp_err_f("set register read failed %d\n", ret);
288*437bfbebSnyanmisaka break;
289*437bfbebSnyanmisaka }
290*437bfbebSnyanmisaka
291*437bfbebSnyanmisaka ret = mpp_dev_ioctl(ctx->dev, MPP_DEV_CMD_SEND, NULL);
292*437bfbebSnyanmisaka if (ret) {
293*437bfbebSnyanmisaka mpp_err_f("send cmd failed %d\n", ret);
294*437bfbebSnyanmisaka break;
295*437bfbebSnyanmisaka }
296*437bfbebSnyanmisaka } while (0);
297*437bfbebSnyanmisaka
298*437bfbebSnyanmisaka (void)task;
299*437bfbebSnyanmisaka return ret;
300*437bfbebSnyanmisaka }
301*437bfbebSnyanmisaka
hal_m2vd_vdpu1_wait(void * hal,HalTaskInfo * task)302*437bfbebSnyanmisaka MPP_RET hal_m2vd_vdpu1_wait(void *hal, HalTaskInfo *task)
303*437bfbebSnyanmisaka {
304*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
305*437bfbebSnyanmisaka M2vdHalCtx *ctx = (M2vdHalCtx *)hal;
306*437bfbebSnyanmisaka M2vdVdpu1Reg_t* reg_out = (M2vdVdpu1Reg_t * )ctx->regs;
307*437bfbebSnyanmisaka
308*437bfbebSnyanmisaka ret = mpp_dev_ioctl(ctx->dev, MPP_DEV_CMD_POLL, NULL);
309*437bfbebSnyanmisaka if (ret)
310*437bfbebSnyanmisaka mpp_err_f("poll cmd failed %d\n", ret);
311*437bfbebSnyanmisaka
312*437bfbebSnyanmisaka if (reg_out->sw01.dec_error_int | reg_out->sw01.dec_buffer_int) {
313*437bfbebSnyanmisaka if (ctx->dec_cb)
314*437bfbebSnyanmisaka mpp_callback(ctx->dec_cb, NULL);
315*437bfbebSnyanmisaka }
316*437bfbebSnyanmisaka
317*437bfbebSnyanmisaka (void)task;
318*437bfbebSnyanmisaka
319*437bfbebSnyanmisaka return ret;
320*437bfbebSnyanmisaka }
321