-
Notifications
You must be signed in to change notification settings - Fork 190
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MACBOOK码流多次断开与派送的流程,会导致MPP数据送不进去也取不出来的问题且一经出现不能恢复 #50
Comments
signal 为 1 表示一直有码流在尝试输入
估计是异常码流把 mpp 里的 slot 耗尽了,可以打开 butslot 的打印看下 |
butslot 的打印要怎么打开? |
setprop buf_slot_debug 0x10 |
这个是从正常到异常的最后几行日志输出 (logcat | grep mpp_buf_slot) |
index 已经到 33 了,的确是中间有 slot 一直在被占用没释放 |
有没有完整log发一下? |
https://pan.baidu.com/s/1sAI9okunpzCMRFfW_3_Uzw |
码流跟log邮件上也发了哈 |
收到,但是测试过了并不能复现问题…… |
修订的patch tips: when parse error, enable had_error; when dpb ref error, Change-Id: I639248dbf4499a8ed473b9f44f1e1332409c5c22
|
mpp_dec_parser_thread的线程堆栈:
#0 0x0000007b3ad3ccec in syscall () from target:/system/lib64/libc.so
#1 0x0000007b3ad88e7c in pthread_cond_wait () from target:/system/lib64/libc.so
#2 0x0000007b3af851e8 in Condition::wait(Mutex&) () from target:/system/lib64/libmpp.so
#3 0x0000007b3af85210 in MppMutexCond::wait() () from target:/system/lib64/libmpp.so
#4 0x0000007b3af852f4 in MppThread::wait(MppThreadSignal_e) () from target:/system/lib64/libmpp.so
#5 0x0000007b3af88a80 in mpp_dec_parser_thread () from target:/system/lib64/libmpp.so
#6 0x0000007b3ad8974c in __pthread_start(void*) () from target:/system/lib64/libc.so
#7 0x0000007b3ad3ea80 in __start_thread () from target:/system/lib64/libc.so
#8 0x0000000000000000 in ?? ()
mpp_dec_hal_thread的堆栈:
#0 0x0000007b3ad3ccec in syscall () from target:/system/lib64/libc.so
#1 0x0000007b3ad88e7c in pthread_cond_wait () from target:/system/lib64/libc.so
#2 0x0000007b3af851e8 in Condition::wait(Mutex&) () from target:/system/lib64/libmpp.so
#3 0x0000007b3af85210 in MppMutexCond::wait() () from target:/system/lib64/libmpp.so
#4 0x0000007b3af852f4 in MppThread::wait(MppThreadSignal_e) () from target:/system/lib64/libmpp.so
#5 0x0000007b3af88d78 in mpp_dec_hal_thread () from target:/system/lib64/libmpp.so
#6 0x0000007b3ad8974c in __pthread_start(void*) () from target:/system/lib64/libc.so
#7 0x0000007b3ad3ea80 in __start_thread () from target:/system/lib64/libc.so
#8 0x0000000000000000 in ?? ()
送码流的线程日志信息:
01-01 16:02:08.261 7257 7258 D Player.Binder.Server.WFD: PlayerBinderServerWFD::onTransact(2) 16
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: m_nATimestamp:3068719077885, m_nVTimestamp:3068719078185, , m_nLastFrameTimestamp:57728224, nCurTimestamp:57728261, m_nTimestampBase:3068719078185
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: emMediaCodecID:2, emMediaSource:1, emMediaType:0, emStreamID:12,uPresentTimestamp:87210045, uReserve:0
01-01 16:02:08.261 7257 7258 D Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:1506, uFrameLen:A8E-2702
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: 00
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: 00
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: 01
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: 21
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: E4
01-01 16:02:08.261 7257 7258 E Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:1698, it failed to get video time statistics node
01-01 16:02:08.261 7257 7258 I Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:1713, nIsSPSorPPS:0, uPresentTimestamp:(before conversion:87210045-after conversion:3068719078236)
01-01 16:02:08.276 7257 7258 E VIDEO CODEC: device/ruijie/player/./Player_Video_Codec.cpp:937 it fail to put packet to mpp decoder(error code = -1012)
01-01 16:02:08.276 7257 7258 E Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:1737, video decoder put Packet(seq:13782) fail
获取码流线程的日志提示信息:
01-01 15:49:35.442 7257 7271 D Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:303, stLastMppFrame(0x0)
01-01 15:49:35.509 7257 7271 D VIDEO CODEC: decode_get_frame failed too much time
01-01 15:49:35.509 7257 7271 E VIDEO CODEC: decode_get_frame failed ret -8
01-01 15:49:35.509 7257 7271 D Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:303, stLastMppFrame(0x0)
01-01 15:49:35.575 7257 7271 D VIDEO CODEC: decode_get_frame failed too much time
01-01 15:49:35.575 7257 7271 E VIDEO CODEC: decode_get_frame failed ret -8
01-01 15:49:35.575 7257 7271 D Player.Binder.Server.WFD: device/ruijie/player/./Player_Binder_Server.cpp:303, stLastMppFrame(0x0)
1、设置输出超时时
pParam = &nBlockTimeout;
stRet = m_pMppApi->control(m_stMppCtx, MPP_SET_OUTPUT_BLOCK_TIMEOUT, pParam);
if (MPP_OK != stRet) {
ALOGE("%s:%d it failed to set blocking mode on MPI (code = %d)\n",
FILE, LINE, stRet);
goto ERROR_EXIT;
}
发现:mpp_dec_parser_thread在等待一个消息:
if (check_task_wait(dec, &task)) {
mpp_timer_start(dec->timers[DEC_PRS_WAIT]);
parser->wait();
mpp_timer_pause(dec->timers[DEC_PRS_WAIT]);
}
mpp_dec_parser_thread不工作时,check_task_wait,里面的相关参数(十进制):
notify:2279178328;last_wait:135, curr_wait:1, wait_chg:0
2、不设置输出超时时
check_task_wait的最后一条打印消息:
Line 15096: 0x7d24ae6100 last_wait:00000000 -> curr_wait:00004000 [wait_chg:00000000] notify 00000080 -> wait
mpp_dec_notify的状态打印:
Line 15101: 0x7d24ae6100 status 00004000 notify 00000000 signal, old_flag:00000000
Line 15106: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
Line 15117: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
Line 15128: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
Line 15139: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
Line 15150: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
Line 15164: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
Line 15175: 0x7d24ae6100 status 00004000 notify 00000001 signal, old_flag:00000001
The text was updated successfully, but these errors were encountered: