History

adjust encoder tasks, add ut and enable new thread pool under some slice modes

Sijia Chen committed 11 years ago

Commit 054a2971 parent 1a7a3e215 files · +330 −44Browse files

Showing the changes to codec/encoder/core/src/wels_task_encoder.cpp (1 of 15 files). Show all

Unified · Split

codec/encoder/core/src/wels_task_encoder.cpp+27−14
@@ -63,6 +63,18 @@ CWelsSliceEncodingTask::CWelsSliceEncodingTask (sWelsEncCtx* pCtx, const int32_t · 62 unmodified lines
6363 CWelsSliceEncodingTask::~CWelsSliceEncodingTask() {
6464 }
6565
66+WelsErrorType CWelsSliceEncodingTask::Execute() {
67+ WelsThreadSetName ("OpenH264Enc_CWelsSliceEncodingTask_Execute");
68+
69+ int32_t iReturn = InitTask();
70+ WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS)
71+
72+ iReturn = ExecuteTask();
73+
74+ FinishTask();
75+ return ENC_RETURN_SUCCESS;
76+}
77+
6678 WelsErrorType CWelsSliceEncodingTask::SetBoundary (int32_t iStartIdx, int32_t iEndIdx) {
6779 m_iStartMbIdx = iStartIdx;
6880 m_iEndMbIdx = iEndIdx;
@@ -88,10 +100,11 @@ WelsErrorType CWelsSliceEncodingTask::InitTask() { · 19 unmodified lines
88100 m_iThreadIdx = QueryEmptyThread (m_pCtx->pSliceThreading->bThreadBsBufferUsage);
89101 WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage);
90102 if (m_iThreadIdx < 0) {
91− printf ("cannot find avaialble thread %d\n", m_iThreadIdx);
103+ WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING,
104+ "[MT] CWelsSliceEncodingTask InitTask(), Cannot find available thread for m_iSliceIdx = %d", m_iSliceIdx);
92105 return ENC_RETURN_UNEXPECTED;
93106 }
94− SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iSliceIdx, m_iThreadIdx);
107+ SetOneSliceBsBufferUnderMultithread (m_pCtx, m_iThreadIdx, m_iSliceIdx);
95108
96109 m_pSlice = &m_pCtx->pCurDqLayer->sLayerInfo.pSliceInLayer[m_iSliceIdx];
97110 m_pSliceBs = &m_pCtx->pSliceBs[m_iSliceIdx];
@@ -101,18 +114,18 @@ WelsErrorType CWelsSliceEncodingTask::InitTask() { · 3 unmodified lines
101114
102115 assert ((void*) (&m_pSliceBs->sBsWrite) == (void*)m_pSlice->pSliceBsa);
103116 InitBits (&m_pSliceBs->sBsWrite, m_pSliceBs->pBsBuffer, m_pSliceBs->uiSize);
117+ //printf ("CWelsSliceEncodingTask_InitTask slice %d\n", m_iSliceIdx);
104118
105119 return ENC_RETURN_SUCCESS;
106120 }
121+
107122 void CWelsSliceEncodingTask::FinishTask() {
108123 WelsMutexLock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage);
109124 m_pCtx->pSliceThreading->bThreadBsBufferUsage[m_iThreadIdx] = false;
110125 WelsMutexUnlock (&m_pCtx->pSliceThreading->mutexThreadBsBufferUsage);
111126 }
112127
113−WelsErrorType CWelsSliceEncodingTask::Execute() {
114− WelsThreadSetName ("OpenH264Enc_CWelsSliceEncodingTask_Execute");
115−
128+WelsErrorType CWelsSliceEncodingTask::ExecuteTask() {
116129 #if MT_DEBUG_BS_WR
117130 m_pSliceBs->bSliceCodedFlag = false;
118131 #endif//MT_DEBUG_BS_WR
@@ -144,6 +157,10 @@ WelsErrorType CWelsSliceEncodingTask::Execute() { · 25 unmodified lines
144157 iLeftBufferSize,
145158 m_iSliceIdx, m_iSliceSize);
146159 if (ENC_RETURN_SUCCESS != iReturn) {
160+ WelsLog (&m_pCtx->sLogCtx, WELS_LOG_WARNING,
161+ "[MT] CWelsSliceEncodingTask ExecuteTask(), WriteSliceBs not successful: coding_idx %d, um_iSliceIdx %d",
162+ m_pCtx->iCodingIndex,
163+ m_iSliceIdx);
147164 return iReturn;
148165 }
149166 if (0 == m_iSliceIdx) {
@@ -152,15 +169,11 @@ WelsErrorType CWelsSliceEncodingTask::Execute() { · 2 unmodified lines
152169
153170 m_pCtx->pFuncList->pfDeblocking.pfDeblockingFilterSlice (m_pCtx->pCurDqLayer, m_pCtx->pFuncList, m_iSliceIdx);
154171
155−#if defined(SLICE_INFO_OUTPUT)
156− fprintf (stderr,
157− "@pSlice=%-6d sliceType:%c idc:%d size:%-6d\n",
158− m_iSliceIdx,
159− (pEncPEncCtx->eSliceType == P_SLICE ? 'P' : 'I'),
160− eNalRefIdc,
161− iSliceSize
162− );
163−#endif//SLICE_INFO_OUTPUT
172+ WelsLog (&m_pCtx->sLogCtx, WELS_LOG_DETAIL,
173+ "@pSlice=%-6d sliceType:%c idc:%d size:%-6d", m_iSliceIdx,
174+ (m_pCtx->eSliceType == P_SLICE ? 'P' : 'I'),
175+ m_eNalRefIdc,
176+ m_iSliceSize);
164177
165178 #if MT_DEBUG_BS_WR
166179 m_pSliceBs->bSliceCodedFlag = true;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t