Lines Matching refs:mpp

35     Mpp *mpp = (Mpp *)arg;  in mpp_notify_by_buffer_group()  local
36 mpp_notify_group(mpp, (MppBufferGroup)group); in mpp_notify_by_buffer_group()
79 MPP_RET mpp_ctx_create(Mpp **mpp, MppCtx ctx) in mpp_ctx_create() argument
81 if (!mpp) { in mpp_ctx_create()
146 *mpp = p; in mpp_ctx_create()
150 MPP_RET mpp_ctx_init(Mpp *mpp, MppCtxType type, MppCodingType coding) in mpp_ctx_init() argument
154 if (!mpp) { in mpp_ctx_init()
172 mpp_ops_init(mpp->mDump, type, coding); in mpp_ctx_init()
174 mpp->mType = type; in mpp_ctx_init()
175 mpp->mCoding = coding; in mpp_ctx_init()
178 if (mpp->mVencInitKcfg) { in mpp_ctx_init()
179 mpp->mKmpp = mpp_calloc(Kmpp, 1); in mpp_ctx_init()
180 if (!mpp->mKmpp) { in mpp_ctx_init()
184 mpp->mKmpp->mClientFd = -1; in mpp_ctx_init()
185 mpp_get_api(mpp->mKmpp); in mpp_ctx_init()
186 mpp->mKmpp->mVencInitKcfg = mpp->mVencInitKcfg; in mpp_ctx_init()
187 ret = mpp->mKmpp->mApi->init(mpp->mKmpp, type, coding); in mpp_ctx_init()
192 mpp->mInitDone = 1; in mpp_ctx_init()
196 mpp_task_queue_init(&mpp->mInputTaskQueue, mpp, "input"); in mpp_ctx_init()
197 mpp_task_queue_init(&mpp->mOutputTaskQueue, mpp, "output"); in mpp_ctx_init()
199 switch (mpp->mType) { in mpp_ctx_init()
201 mpp->mPktIn = mpp_list_create(list_wraper_packet); in mpp_ctx_init()
202 mpp->mFrmOut = mpp_list_create(list_wraper_frame); in mpp_ctx_init()
204 if (mpp->mInputTimeout == MPP_POLL_BUTT) in mpp_ctx_init()
205 mpp->mInputTimeout = MPP_POLL_NON_BLOCK; in mpp_ctx_init()
207 if (mpp->mOutputTimeout == MPP_POLL_BUTT) in mpp_ctx_init()
208 mpp->mOutputTimeout = MPP_POLL_NON_BLOCK; in mpp_ctx_init()
210 if (mpp->mCoding != MPP_VIDEO_CodingMJPEG) { in mpp_ctx_init()
211 …mpp_buffer_group_get_internal(&mpp->mPacketGroup, MPP_BUFFER_TYPE_ION | MPP_BUFFER_FLAGS_CACHABLE); in mpp_ctx_init()
212 mpp_buffer_group_limit_config(mpp->mPacketGroup, 0, 3); in mpp_ctx_init()
214 mpp->mInputTaskCount = 4; in mpp_ctx_init()
215 mpp->mOutputTaskCount = 4; in mpp_ctx_init()
218 mpp_task_queue_setup(mpp->mInputTaskQueue, mpp->mInputTaskCount); in mpp_ctx_init()
219 mpp_task_queue_setup(mpp->mOutputTaskQueue, mpp->mOutputTaskCount); in mpp_ctx_init()
221 mpp->mUsrInPort = mpp_task_queue_get_port(mpp->mInputTaskQueue, MPP_PORT_INPUT); in mpp_ctx_init()
222 mpp->mUsrOutPort = mpp_task_queue_get_port(mpp->mOutputTaskQueue, MPP_PORT_OUTPUT); in mpp_ctx_init()
223 mpp->mMppInPort = mpp_task_queue_get_port(mpp->mInputTaskQueue, MPP_PORT_OUTPUT); in mpp_ctx_init()
224 mpp->mMppOutPort = mpp_task_queue_get_port(mpp->mOutputTaskQueue, MPP_PORT_INPUT); in mpp_ctx_init()
226 mpp_dec_cfg_set_u32(mpp->mDecCfg, "base:disable_thread", mpp->mDisableThread); in mpp_ctx_init()
230 mpp, in mpp_ctx_init()
231 mpp->mDecCfg, in mpp_ctx_init()
234 ret = mpp_dec_init(&mpp->mDec, &cfg); in mpp_ctx_init()
237 ret = mpp_dec_start(mpp->mDec); in mpp_ctx_init()
240 mpp->mInitDone = 1; in mpp_ctx_init()
243 mpp->mPktOut = mpp_list_create(list_wraper_packet); in mpp_ctx_init()
244 mpp->mFrmIn = mpp_list_create(list_wraper_frame); in mpp_ctx_init()
246 if (mpp->mInputTimeout == MPP_POLL_BUTT) in mpp_ctx_init()
247 mpp->mInputTimeout = MPP_POLL_BLOCK; in mpp_ctx_init()
249 if (mpp->mOutputTimeout == MPP_POLL_BUTT) in mpp_ctx_init()
250 mpp->mOutputTimeout = MPP_POLL_NON_BLOCK; in mpp_ctx_init()
252 mpp_buffer_group_get_internal(&mpp->mPacketGroup, MPP_BUFFER_TYPE_ION); in mpp_ctx_init()
253 mpp_buffer_group_get_internal(&mpp->mFrameGroup, MPP_BUFFER_TYPE_ION); in mpp_ctx_init()
255 if (mpp->mInputTimeout == MPP_POLL_NON_BLOCK) { in mpp_ctx_init()
256 mpp->mEncAyncIo = 1; in mpp_ctx_init()
258 mpp->mInputTaskCount = check_frm_task_cnt_cap(coding); in mpp_ctx_init()
259 if (mpp->mInputTaskCount == 1) in mpp_ctx_init()
260 mpp->mInputTimeout = MPP_POLL_BLOCK; in mpp_ctx_init()
262 mpp->mOutputTaskCount = 8; in mpp_ctx_init()
264 mpp_task_queue_setup(mpp->mInputTaskQueue, mpp->mInputTaskCount); in mpp_ctx_init()
265 mpp_task_queue_setup(mpp->mOutputTaskQueue, mpp->mOutputTaskCount); in mpp_ctx_init()
267 mpp->mUsrInPort = mpp_task_queue_get_port(mpp->mInputTaskQueue, MPP_PORT_INPUT); in mpp_ctx_init()
268 mpp->mUsrOutPort = mpp_task_queue_get_port(mpp->mOutputTaskQueue, MPP_PORT_OUTPUT); in mpp_ctx_init()
269 mpp->mMppInPort = mpp_task_queue_get_port(mpp->mInputTaskQueue, MPP_PORT_OUTPUT); in mpp_ctx_init()
270 mpp->mMppOutPort = mpp_task_queue_get_port(mpp->mOutputTaskQueue, MPP_PORT_INPUT); in mpp_ctx_init()
274 mpp->mInputTaskCount, in mpp_ctx_init()
275 mpp, in mpp_ctx_init()
278 ret = mpp_enc_init_v2(&mpp->mEnc, &cfg); in mpp_ctx_init()
282 if (mpp->mInputTimeout == MPP_POLL_NON_BLOCK) { in mpp_ctx_init()
283 mpp->mEncAyncProc = 1; in mpp_ctx_init()
284 ret = mpp_enc_start_async(mpp->mEnc); in mpp_ctx_init()
286 ret = mpp_enc_start_v2(mpp->mEnc); in mpp_ctx_init()
291 mpp->mInitDone = 1; in mpp_ctx_init()
294 mpp_err("Mpp error type %d\n", mpp->mType); in mpp_ctx_init()
298 if (!mpp->mInitDone) { in mpp_ctx_init()
300 mpp_clear(mpp); in mpp_ctx_init()
306 void mpp_clear(Mpp *mpp) in mpp_clear() argument
308 if (!mpp) in mpp_clear()
312 if (mpp->mFrameGroup) in mpp_clear()
313 mpp_buffer_group_set_callback((MppBufferGroupImpl *)mpp->mFrameGroup, in mpp_clear()
316 if (mpp->mType == MPP_CTX_DEC) { in mpp_clear()
317 if (mpp->mDec) { in mpp_clear()
318 mpp_dec_stop(mpp->mDec); in mpp_clear()
319 mpp_dec_deinit(mpp->mDec); in mpp_clear()
320 mpp->mDec = NULL; in mpp_clear()
323 if (mpp->mEnc) { in mpp_clear()
324 mpp_enc_stop_v2(mpp->mEnc); in mpp_clear()
325 mpp_enc_deinit_v2(mpp->mEnc); in mpp_clear()
326 mpp->mEnc = NULL; in mpp_clear()
330 if (mpp->mInputTaskQueue) { in mpp_clear()
331 mpp_task_queue_deinit(mpp->mInputTaskQueue); in mpp_clear()
332 mpp->mInputTaskQueue = NULL; in mpp_clear()
334 if (mpp->mOutputTaskQueue) { in mpp_clear()
335 mpp_task_queue_deinit(mpp->mOutputTaskQueue); in mpp_clear()
336 mpp->mOutputTaskQueue = NULL; in mpp_clear()
339 mpp->mUsrInPort = NULL; in mpp_clear()
340 mpp->mUsrOutPort = NULL; in mpp_clear()
341 mpp->mMppInPort = NULL; in mpp_clear()
342 mpp->mMppOutPort = NULL; in mpp_clear()
344 if (mpp->mExtraPacket) { in mpp_clear()
345 mpp_packet_deinit(&mpp->mExtraPacket); in mpp_clear()
346 mpp->mExtraPacket = NULL; in mpp_clear()
349 if (mpp->mPktIn) { in mpp_clear()
350 mpp_list_destroy(mpp->mPktIn); in mpp_clear()
351 mpp->mPktIn = NULL; in mpp_clear()
353 if (mpp->mPktOut) { in mpp_clear()
354 mpp_list_destroy(mpp->mPktOut); in mpp_clear()
355 mpp->mPktOut = NULL; in mpp_clear()
357 if (mpp->mFrmIn) { in mpp_clear()
358 mpp_list_destroy(mpp->mFrmIn); in mpp_clear()
359 mpp->mFrmIn = NULL; in mpp_clear()
361 if (mpp->mFrmOut) { in mpp_clear()
362 mpp_list_destroy(mpp->mFrmOut); in mpp_clear()
363 mpp->mFrmOut = NULL; in mpp_clear()
366 if (mpp->mPacketGroup) { in mpp_clear()
367 mpp_buffer_group_put(mpp->mPacketGroup); in mpp_clear()
368 mpp->mPacketGroup = NULL; in mpp_clear()
371 if (mpp->mFrameGroup && !mpp->mExternalBufferMode) { in mpp_clear()
372 mpp_buffer_group_put(mpp->mFrameGroup); in mpp_clear()
373 mpp->mFrameGroup = NULL; in mpp_clear()
376 if (mpp->mKmpp) { in mpp_clear()
377 if (mpp->mKmpp->mApi && mpp->mKmpp->mApi->clear) in mpp_clear()
378 mpp->mKmpp->mApi->clear(mpp->mKmpp); in mpp_clear()
380 MPP_FREE(mpp->mKmpp); in mpp_clear()
383 if (mpp->mDecCfg) { in mpp_clear()
384 mpp_dec_cfg_deinit(mpp->mDecCfg); in mpp_clear()
385 mpp->mDecCfg = NULL; in mpp_clear()
388 mpp_dump_deinit(&mpp->mDump); in mpp_clear()
391 MPP_RET mpp_ctx_destroy(Mpp *mpp) in mpp_ctx_destroy() argument
393 if (!mpp) in mpp_ctx_destroy()
396 mpp_clear(mpp); in mpp_ctx_destroy()
397 mpp_free(mpp); in mpp_ctx_destroy()
402 MPP_RET mpp_start(Mpp *mpp) in mpp_start() argument
404 if (!mpp) { in mpp_start()
411 MPP_RET mpp_stop(Mpp *mpp) in mpp_stop() argument
413 if (!mpp) { in mpp_stop()
420 MPP_RET mpp_pause(Mpp *mpp) in mpp_pause() argument
422 if (!mpp) { in mpp_pause()
429 MPP_RET mpp_resume(Mpp *mpp) in mpp_resume() argument
431 if (!mpp) { in mpp_resume()
438 MPP_RET mpp_put_packet(Mpp *mpp, MppPacket packet) in mpp_put_packet() argument
440 if (!mpp) { in mpp_put_packet()
445 if (!mpp->mInitDone) in mpp_put_packet()
449 MppPollType timeout = mpp->mInputTimeout; in mpp_put_packet()
453 if (mpp->mDisableThread) { in mpp_put_packet()
458 if (mpp->mExtraPacket) { in mpp_put_packet()
459 MppPacket extra = mpp->mExtraPacket; in mpp_put_packet()
461 mpp->mExtraPacket = NULL; in mpp_put_packet()
462 mpp_put_packet(mpp, extra); in mpp_put_packet()
466 if (mpp->mInputTaskCount > 1) { in mpp_put_packet()
467 if (!mpp->mEosTask) { in mpp_put_packet()
469 ret = mpp_poll(mpp, MPP_PORT_INPUT, MPP_POLL_BLOCK); in mpp_put_packet()
473 mpp_dequeue(mpp, MPP_PORT_INPUT, &mpp->mEosTask); in mpp_put_packet()
474 if (NULL == mpp->mEosTask) { in mpp_put_packet()
482 mpp_assert(mpp->mEosTask); in mpp_put_packet()
483 task_dequeue = mpp->mEosTask; in mpp_put_packet()
484 mpp->mEosTask = NULL; in mpp_put_packet()
489 if (mpp->mInputTask && !task_dequeue) { in mpp_put_packet()
490 task_dequeue = mpp->mInputTask; in mpp_put_packet()
491 mpp->mInputTask = NULL; in mpp_put_packet()
495 ret = mpp_poll(mpp, MPP_PORT_INPUT, timeout); in mpp_put_packet()
502 mpp_dequeue(mpp, MPP_PORT_INPUT, &task_dequeue); in mpp_put_packet()
530 mpp->mInputTask = task_dequeue; in mpp_put_packet()
534 mpp_ops_dec_put_pkt(mpp->mDump, packet); in mpp_put_packet()
537 ret = mpp_enqueue(mpp, MPP_PORT_INPUT, task_dequeue); in mpp_put_packet()
543 mpp->mPacketPutCount++; in mpp_put_packet()
546 mpp_poll(mpp, MPP_PORT_INPUT, timeout); in mpp_put_packet()
550 if (NULL == mpp->mInputTask) { in mpp_put_packet()
551 MPP_RET cnt = mpp_poll(mpp, MPP_PORT_INPUT, MPP_POLL_NON_BLOCK); in mpp_put_packet()
554 mpp_dequeue(mpp, MPP_PORT_INPUT, &mpp->mInputTask); in mpp_put_packet()
555 mpp_assert(mpp->mInputTask); in mpp_put_packet()
562 MPP_RET mpp_get_frame(Mpp *mpp, MppFrame *frame) in mpp_get_frame() argument
566 if (!mpp) { in mpp_get_frame()
571 if (!mpp->mInitDone) in mpp_get_frame()
574 mpp_mutex_cond_lock(&mpp->mFrmOut->cond_lock); in mpp_get_frame()
576 if (0 == mpp_list_size(mpp->mFrmOut)) { in mpp_get_frame()
577 if (mpp->mOutputTimeout) { in mpp_get_frame()
578 if (mpp->mOutputTimeout < 0) { in mpp_get_frame()
580 mpp_list_wait(mpp->mFrmOut); in mpp_get_frame()
582 RK_S32 ret = mpp_list_wait_timed(mpp->mFrmOut, mpp->mOutputTimeout); in mpp_get_frame()
585 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_get_frame()
588 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_get_frame()
596 if (mpp_list_size(mpp->mFrmOut)) { in mpp_get_frame()
599 mpp_list_del_at_head(mpp->mFrmOut, &frm, sizeof(frm)); in mpp_get_frame()
600 mpp->mFrameGetCount++; in mpp_get_frame()
601 mpp_notify_flag(mpp, MPP_OUTPUT_DEQUEUE); in mpp_get_frame()
613 mpp_mutex_cond_lock(&mpp->mPktIn->cond_lock); in mpp_get_frame()
614 if (mpp_list_size(mpp->mPktIn)) in mpp_get_frame()
615 mpp_notify_flag(mpp, MPP_INPUT_ENQUEUE); in mpp_get_frame()
616 mpp_mutex_cond_unlock(&mpp->mPktIn->cond_lock); in mpp_get_frame()
622 mpp_ops_dec_get_frm(mpp->mDump, frm); in mpp_get_frame()
623 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_get_frame()
628 MPP_RET mpp_get_frame_noblock(Mpp *mpp, MppFrame *frame) in mpp_get_frame_noblock() argument
632 if (!mpp) { in mpp_get_frame_noblock()
637 if (!mpp->mInitDone) in mpp_get_frame_noblock()
640 mpp_mutex_cond_lock(&mpp->mFrmOut->cond_lock); in mpp_get_frame_noblock()
641 if (mpp_list_size(mpp->mFrmOut)) { in mpp_get_frame_noblock()
642 mpp_list_del_at_head(mpp->mFrmOut, &first, sizeof(first)); in mpp_get_frame_noblock()
644 mpp->mFrameGetCount++; in mpp_get_frame_noblock()
646 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_get_frame_noblock()
652 MPP_RET mpp_decode(Mpp *mpp, MppPacket packet, MppFrame *frame) in mpp_decode() argument
658 if (!mpp) { in mpp_decode()
663 if (!mpp->mDec) in mpp_decode()
666 if (!mpp->mInitDone) in mpp_decode()
673 if (!mpp->mOutputTimeout) { in mpp_decode()
674 mpp_mutex_cond_lock(&mpp->mFrmOut->cond_lock); in mpp_decode()
675 if (mpp_list_size(mpp->mFrmOut)) { in mpp_decode()
678 mpp_list_del_at_head(mpp->mFrmOut, frame, sizeof(*frame)); in mpp_decode()
682 mpp->mFrameGetCount++; in mpp_decode()
683 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_decode()
686 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_decode()
691 ret = mpp_dec_decode(mpp->mDec, packet); in mpp_decode()
698 mpp_mutex_cond_lock(&mpp->mFrmOut->cond_lock); in mpp_decode()
699 if (mpp_list_size(mpp->mFrmOut)) { in mpp_decode()
702 mpp_list_del_at_head(mpp->mFrmOut, frame, sizeof(*frame)); in mpp_decode()
706 mpp->mFrameGetCount++; in mpp_decode()
709 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_decode()
734 MPP_RET mpp_put_frame(Mpp *mpp, MppFrame frame) in mpp_put_frame() argument
736 if (!mpp) { in mpp_put_frame()
741 if (!mpp->mInitDone) in mpp_put_frame()
744 mpp_dbg_pts("%p input frame pts %lld\n", mpp, mpp_frame_get_pts(frame)); in mpp_put_frame()
746 if (mpp->mKmpp && mpp->mKmpp->mApi && mpp->mKmpp->mApi->put_frame) in mpp_put_frame()
747 return mpp->mKmpp->mApi->put_frame(mpp->mKmpp, frame); in mpp_put_frame()
749 if (mpp->mInputTimeout == MPP_POLL_NON_BLOCK) { in mpp_put_frame()
750 mpp_set_io_mode(mpp, MPP_IO_MODE_NORMAL); in mpp_put_frame()
751 return mpp_put_frame_async(mpp, frame); in mpp_put_frame()
765 if (mpp->mInputTask == NULL) { in mpp_put_frame()
768 ret = mpp_poll(mpp, MPP_PORT_INPUT, mpp->mInputTimeout); in mpp_put_frame()
770 if (mpp->mInputTimeout) in mpp_put_frame()
771 mpp_log_f("poll on set timeout %d ret %d\n", mpp->mInputTimeout, ret); in mpp_put_frame()
777 ret = mpp_dequeue(mpp, MPP_PORT_INPUT, &mpp->mInputTask); in mpp_put_frame()
778 if (ret || NULL == mpp->mInputTask) { in mpp_put_frame()
779 mpp_log_f("dequeue on set ret %d task %p\n", ret, mpp->mInputTask); in mpp_put_frame()
784 mpp_assert(mpp->mInputTask); in mpp_put_frame()
787 ret = mpp_task_meta_set_frame(mpp->mInputTask, KEY_INPUT_FRAME, frame); in mpp_put_frame()
800 ret = mpp_task_meta_set_packet(mpp->mInputTask, KEY_OUTPUT_PACKET, packet); in mpp_put_frame()
809 ret = mpp_task_meta_set_buffer(mpp->mInputTask, KEY_MOTION_INFO, md_info_buf); in mpp_put_frame()
818 mpp_ops_enc_put_frm(mpp->mDump, frame); in mpp_put_frame()
822 ret = mpp_enqueue(mpp, MPP_PORT_INPUT, mpp->mInputTask); in mpp_put_frame()
828 mpp->mInputTask = NULL; in mpp_put_frame()
831 ret = mpp_poll(mpp, MPP_PORT_INPUT, mpp->mInputTimeout); in mpp_put_frame()
833 if (mpp->mInputTimeout) in mpp_put_frame()
834 mpp_log_f("poll on get timeout %d ret %d\n", mpp->mInputTimeout, ret); in mpp_put_frame()
840 ret = mpp_dequeue(mpp, MPP_PORT_INPUT, &mpp->mInputTask); in mpp_put_frame()
846 mpp_assert(mpp->mInputTask); in mpp_put_frame()
847 if (mpp->mInputTask) { in mpp_put_frame()
850 mpp_task_meta_get_frame(mpp->mInputTask, KEY_INPUT_FRAME, &frm_out); in mpp_put_frame()
860 MPP_RET mpp_get_packet(Mpp *mpp, MppPacket *packet) in mpp_get_packet() argument
864 if (!mpp) { in mpp_get_packet()
869 if (!mpp->mInitDone) in mpp_get_packet()
872 if (mpp->mKmpp && mpp->mKmpp->mApi && mpp->mKmpp->mApi->get_packet) in mpp_get_packet()
873 return mpp->mKmpp->mApi->get_packet(mpp->mKmpp, packet); in mpp_get_packet()
875 if (mpp->mInputTimeout == MPP_POLL_NON_BLOCK) { in mpp_get_packet()
876 mpp_set_io_mode(mpp, MPP_IO_MODE_NORMAL); in mpp_get_packet()
877 return mpp_get_packet_async(mpp, packet); in mpp_get_packet()
883 ret = mpp_poll(mpp, MPP_PORT_OUTPUT, mpp->mOutputTimeout); in mpp_get_packet()
891 ret = mpp_dequeue(mpp, MPP_PORT_OUTPUT, &task); in mpp_get_packet()
918 mpp_dbg_pts("%p output packet pts %lld\n", mpp, impl->pts); in mpp_get_packet()
922 mpp_ops_enc_get_pkt(mpp->mDump, pkt); in mpp_get_packet()
924 ret = mpp_enqueue(mpp, MPP_PORT_OUTPUT, task); in mpp_get_packet()
932 MPP_RET mpp_put_frame_async(Mpp *mpp, MppFrame frame) in mpp_put_frame_async() argument
934 if (!mpp) { in mpp_put_frame_async()
939 if (NULL == mpp->mFrmIn) in mpp_put_frame_async()
942 if (mpp_mutex_cond_trylock(&mpp->mFrmIn->cond_lock)) in mpp_put_frame_async()
946 if (mpp_list_wait_le(mpp->mFrmIn, 10, 1)) { in mpp_put_frame_async()
947 mpp_mutex_cond_unlock(&mpp->mFrmIn->cond_lock); in mpp_put_frame_async()
951 mpp_list_add_at_tail(mpp->mFrmIn, &frame, sizeof(frame)); in mpp_put_frame_async()
952 mpp->mFramePutCount++; in mpp_put_frame_async()
954 mpp_notify_flag(mpp, MPP_INPUT_ENQUEUE); in mpp_put_frame_async()
955 mpp_mutex_cond_unlock(&mpp->mFrmIn->cond_lock); in mpp_put_frame_async()
960 MPP_RET mpp_get_packet_async(Mpp *mpp, MppPacket *packet) in mpp_get_packet_async() argument
962 if (!mpp) { in mpp_get_packet_async()
967 mpp_mutex_cond_lock(&mpp->mPktOut->cond_lock); in mpp_get_packet_async()
969 if (0 == mpp_list_size(mpp->mPktOut)) { in mpp_get_packet_async()
970 if (mpp->mOutputTimeout) { in mpp_get_packet_async()
971 if (mpp->mOutputTimeout < 0) { in mpp_get_packet_async()
973 mpp_list_wait(mpp->mPktOut); in mpp_get_packet_async()
975 RK_S32 ret = mpp_list_wait_timed(mpp->mPktOut, mpp->mOutputTimeout); in mpp_get_packet_async()
979 mpp_mutex_cond_unlock(&mpp->mPktOut->cond_lock); in mpp_get_packet_async()
982 mpp_mutex_cond_unlock(&mpp->mPktOut->cond_lock); in mpp_get_packet_async()
993 if (mpp_list_size(mpp->mPktOut)) { in mpp_get_packet_async()
998 mpp_list_del_at_head(mpp->mPktOut, &pkt, sizeof(pkt)); in mpp_get_packet_async()
999 mpp->mPacketGetCount++; in mpp_get_packet_async()
1000 mpp_notify_flag(mpp, MPP_OUTPUT_DEQUEUE); in mpp_get_packet_async()
1010 mpp_mutex_cond_lock(&mpp->mFrmIn->cond_lock); in mpp_get_packet_async()
1011 if (mpp_list_size(mpp->mFrmIn)) in mpp_get_packet_async()
1012 mpp_notify_flag(mpp, MPP_INPUT_ENQUEUE); in mpp_get_packet_async()
1013 mpp_mutex_cond_unlock(&mpp->mFrmIn->cond_lock); in mpp_get_packet_async()
1014 mpp_mutex_cond_unlock(&mpp->mPktOut->cond_lock); in mpp_get_packet_async()
1018 mpp_mutex_cond_unlock(&mpp->mPktOut->cond_lock); in mpp_get_packet_async()
1023 MPP_RET mpp_poll(Mpp *mpp, MppPortType type, MppPollType timeout) in mpp_poll() argument
1028 if (!mpp) { in mpp_poll()
1033 if (!mpp->mInitDone) in mpp_poll()
1036 mpp_set_io_mode(mpp, MPP_IO_MODE_TASK); in mpp_poll()
1040 port = mpp->mUsrInPort; in mpp_poll()
1043 port = mpp->mUsrOutPort; in mpp_poll()
1055 MPP_RET mpp_dequeue(Mpp *mpp, MppPortType type, MppTask *task) in mpp_dequeue() argument
1061 if (!mpp) { in mpp_dequeue()
1066 if (!mpp->mInitDone) in mpp_dequeue()
1069 mpp_set_io_mode(mpp, MPP_IO_MODE_TASK); in mpp_dequeue()
1073 port = mpp->mUsrInPort; in mpp_dequeue()
1077 port = mpp->mUsrOutPort; in mpp_dequeue()
1087 mpp_notify_flag(mpp, notify_flag); in mpp_dequeue()
1093 MPP_RET mpp_enqueue(Mpp *mpp, MppPortType type, MppTask task) in mpp_enqueue() argument
1099 if (!mpp) { in mpp_enqueue()
1104 if (!mpp->mInitDone) in mpp_enqueue()
1107 mpp_set_io_mode(mpp, MPP_IO_MODE_TASK); in mpp_enqueue()
1111 port = mpp->mUsrInPort; in mpp_enqueue()
1115 port = mpp->mUsrOutPort; in mpp_enqueue()
1126 mpp_notify_flag(mpp, notify_flag); in mpp_enqueue()
1132 void mpp_set_io_mode(Mpp *mpp, MppIoMode mode) in mpp_set_io_mode() argument
1134 if (!mpp) { in mpp_set_io_mode()
1141 if (mpp->mIoMode == MPP_IO_MODE_DEFAULT) in mpp_set_io_mode()
1142 mpp->mIoMode = mode; in mpp_set_io_mode()
1143 else if (mpp->mIoMode != mode) { in mpp_set_io_mode()
1149 mpp_assert(mpp->mIoMode < MPP_IO_MODE_BUTT); in mpp_set_io_mode()
1152 iomode_2str[!!mpp->mIoMode], iomode_2str[!!mode]); in mpp_set_io_mode()
1156 MPP_RET mpp_control(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control() argument
1160 if (!mpp) { in mpp_control()
1165 mpp_ops_ctrl(mpp->mDump, cmd); in mpp_control()
1167 if (mpp->mKmpp && mpp->mKmpp->mApi && mpp->mKmpp->mApi->control) in mpp_control()
1168 return mpp->mKmpp->mApi->control(mpp->mKmpp, cmd, param); in mpp_control()
1172 ret = mpp_control_osal(mpp, cmd, param); in mpp_control()
1178 ret = mpp_control_mpp(mpp, cmd, param); in mpp_control()
1183 mpp_assert(mpp->mType == MPP_CTX_DEC || mpp->mType == MPP_CTX_BUTT); in mpp_control()
1187 ret = mpp_control_dec(mpp, cmd, param); in mpp_control()
1190 mpp_assert(mpp->mType == MPP_CTX_ENC); in mpp_control()
1194 ret = mpp_control_enc(mpp, cmd, param); in mpp_control()
1197 mpp_assert(mpp->mType == MPP_CTX_ISP); in mpp_control()
1198 ret = mpp_control_isp(mpp, cmd, param); in mpp_control()
1204 ret = mpp_control_codec(mpp, cmd, param); in mpp_control()
1218 MPP_RET mpp_reset(Mpp *mpp) in mpp_reset() argument
1220 if (!mpp) { in mpp_reset()
1225 if (!mpp->mInitDone) in mpp_reset()
1228 if (mpp->mKmpp && mpp->mKmpp->mApi && mpp->mKmpp->mApi->reset) in mpp_reset()
1229 return mpp->mKmpp->mApi->reset(mpp->mKmpp); in mpp_reset()
1231 mpp_ops_reset(mpp->mDump); in mpp_reset()
1233 if (mpp->mType == MPP_CTX_DEC) { in mpp_reset()
1241 mpp_mutex_cond_lock(&mpp->mPktIn->cond_lock); in mpp_reset()
1242 while (mpp_list_size(mpp->mPktIn)) { in mpp_reset()
1245 mpp_list_del_at_head(mpp->mPktIn, &pkt, sizeof(pkt)); in mpp_reset()
1246 mpp->mPacketGetCount++; in mpp_reset()
1250 if (mpp->mExtraPacket) { in mpp_reset()
1251 mpp_packet_deinit(&mpp->mExtraPacket); in mpp_reset()
1253 mpp->mExtraPacket = pkt; in mpp_reset()
1258 mpp_list_flush(mpp->mPktIn); in mpp_reset()
1259 mpp_mutex_cond_unlock(&mpp->mPktIn->cond_lock); in mpp_reset()
1261 mpp_dec_reset(mpp->mDec); in mpp_reset()
1263 mpp_mutex_cond_lock(&mpp->mFrmOut->cond_lock); in mpp_reset()
1264 mpp_list_flush(mpp->mFrmOut); in mpp_reset()
1265 mpp_mutex_cond_unlock(&mpp->mFrmOut->cond_lock); in mpp_reset()
1267 mpp_port_awake(mpp->mUsrInPort); in mpp_reset()
1268 mpp_port_awake(mpp->mUsrOutPort); in mpp_reset()
1270 mpp_enc_reset_v2(mpp->mEnc); in mpp_reset()
1276 MPP_RET mpp_control_mpp(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control_mpp() argument
1280 if (!mpp) { in mpp_control_mpp()
1299 mpp->mInputTimeout = block; in mpp_control_mpp()
1301 mpp->mOutputTimeout = block; in mpp_control_mpp()
1307 mpp->mDisableThread = 1; in mpp_control_mpp()
1322 mpp->mInputTimeout = timeout; in mpp_control_mpp()
1324 mpp->mOutputTimeout = timeout; in mpp_control_mpp()
1333 mpp->mVencInitKcfg = obj; in mpp_control_mpp()
1336 mpp_start(mpp); in mpp_control_mpp()
1339 mpp_stop(mpp); in mpp_control_mpp()
1343 mpp_pause(mpp); in mpp_control_mpp()
1346 mpp_resume(mpp); in mpp_control_mpp()
1356 MPP_RET mpp_control_osal(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control_osal() argument
1360 if (!mpp) { in mpp_control_osal()
1373 MPP_RET mpp_control_codec(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control_codec() argument
1377 if (!mpp) { in mpp_control_codec()
1387 MPP_RET mpp_control_dec(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control_dec() argument
1391 if (!mpp) { in mpp_control_dec()
1399 ret = mpp_dec_control(mpp->mDec, cmd, param); in mpp_control_dec()
1409 if (!mpp->mInitDone) { in mpp_control_dec()
1417 if (mpp->mExternalBufferMode) { in mpp_control_dec()
1419 mpp_assert(mpp->mFrameGroup); in mpp_control_dec()
1420 mpp_buffer_group_set_callback((MppBufferGroupImpl *)mpp->mFrameGroup, in mpp_control_dec()
1422 mpp->mFrameGroup = NULL; in mpp_control_dec()
1425 if (mpp->mFrameGroup) in mpp_control_dec()
1426 mpp_buffer_group_clear(mpp->mFrameGroup); in mpp_control_dec()
1429 mpp_dbg_info("using internal buffer group %p\n", mpp->mFrameGroup); in mpp_control_dec()
1430 mpp->mExternalBufferMode = 0; in mpp_control_dec()
1433 if (mpp->mExternalBufferMode) { in mpp_control_dec()
1435 if (mpp->mFrameGroup != param) { in mpp_control_dec()
1437 mpp_assert(mpp->mFrameGroup); in mpp_control_dec()
1438 mpp_buffer_group_set_callback((MppBufferGroupImpl *)mpp->mFrameGroup, in mpp_control_dec()
1445 if (mpp->mFrameGroup) in mpp_control_dec()
1446 mpp_buffer_group_put(mpp->mFrameGroup); in mpp_control_dec()
1449 mpp_dbg_info("using external buffer group %p\n", mpp->mFrameGroup); in mpp_control_dec()
1451 mpp->mFrameGroup = (MppBufferGroup)param; in mpp_control_dec()
1452 mpp_buffer_group_set_callback((MppBufferGroupImpl *)mpp->mFrameGroup, in mpp_control_dec()
1453 mpp_notify_by_buffer_group, (void *)mpp); in mpp_control_dec()
1454 mpp->mExternalBufferMode = 1; in mpp_control_dec()
1455 mpp_notify_flag(mpp, MPP_DEC_NOTIFY_EXT_BUF_GRP_READY); in mpp_control_dec()
1461 ret = mpp_dec_control(mpp->mDec, cmd, param); in mpp_control_dec()
1462 mpp_notify_flag(mpp, MPP_DEC_NOTIFY_INFO_CHG_DONE | MPP_DEC_NOTIFY_BUFFER_MATCH); in mpp_control_dec()
1479 if (mpp->mDec) { in mpp_control_dec()
1480 ret = mpp_dec_control(mpp->mDec, cmd, param); in mpp_control_dec()
1484 ret = mpp_dec_set_cfg_by_cmd(mpp->mDecCfg, cmd, param); in mpp_control_dec()
1487 mpp_mutex_cond_lock(&mpp->mPktIn->cond_lock); in mpp_control_dec()
1488 *((RK_S32 *)param) = mpp_list_size(mpp->mPktIn); in mpp_control_dec()
1490 mpp_mutex_cond_unlock(&mpp->mPktIn->cond_lock); in mpp_control_dec()
1496 ret = mpp_dec_control(mpp->mDec, cmd, param); in mpp_control_dec()
1499 if (mpp->mDec) in mpp_control_dec()
1500 ret = mpp_dec_control(mpp->mDec, cmd, param); in mpp_control_dec()
1502 ret = (MPP_RET)kmpp_obj_update(mpp->mDecCfg, param); in mpp_control_dec()
1506 if (mpp->mDec) in mpp_control_dec()
1507 ret = mpp_dec_control(mpp->mDec, cmd, param); in mpp_control_dec()
1509 ret = (MPP_RET)kmpp_obj_copy_entry(param, mpp->mDecCfg); in mpp_control_dec()
1518 MPP_RET mpp_control_enc(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control_enc() argument
1520 if (!mpp) { in mpp_control_enc()
1525 mpp_assert(mpp->mEnc); in mpp_control_enc()
1526 return mpp_enc_control_v2(mpp->mEnc, cmd, param); in mpp_control_enc()
1529 MPP_RET mpp_control_isp(Mpp *mpp, MpiCmd cmd, MppParam param) in mpp_control_isp() argument
1533 if (!mpp) { in mpp_control_isp()
1546 MPP_RET mpp_notify_flag(Mpp *mpp, RK_U32 flag) in mpp_notify_flag() argument
1548 if (!mpp) { in mpp_notify_flag()
1553 switch (mpp->mType) { in mpp_notify_flag()
1555 return mpp_dec_notify(mpp->mDec, flag); in mpp_notify_flag()
1558 return mpp_enc_notify_v2(mpp->mEnc, flag); in mpp_notify_flag()
1561 mpp_err("unsupport context type %d\n", mpp->mType); in mpp_notify_flag()
1567 MPP_RET mpp_notify_group(Mpp *mpp, MppBufferGroup group) in mpp_notify_group() argument
1571 if (!mpp) { in mpp_notify_group()
1576 switch (mpp->mType) { in mpp_notify_group()
1578 if (group == mpp->mFrameGroup) in mpp_notify_group()
1579 ret = mpp_notify_flag(mpp, MPP_DEC_NOTIFY_BUFFER_VALID | MPP_DEC_NOTIFY_BUFFER_MATCH); in mpp_notify_group()