History

enable Scroll detection into workflow

lyao2 committed 12 years ago

Commit bd7c04f1 parent 3d599055 files · +123 −66Browse files

Showing the changes to codec/processing/src (2 of 5 files). Show all

Unified · Split

2 files
  1. codec/processing/src/scenechangedetection/SceneChangeDetection.h +94 −43
  2. codec/processing/src/scrolldetection/ScrollDetection.cpp +0 −4
codec/processing/src/scenechangedetection/SceneChangeDetection.h+94−43
@@ -55,6 +55,18 @@ · 54 unmodified lines
5555
5656 WELSVP_NAMESPACE_BEGIN
5757
58+typedef struct {
59+ int32_t iWidth;
60+ int32_t iHeight;
61+ int32_t iBlock8x8Width;
62+ int32_t iBlock8x8Height;
63+ uint8_t* pRefY;
64+ uint8_t* pCurY;
65+ int32_t iRefStride;
66+ int32_t iCurStride;
67+ uint8_t* pStaticBlockIdc;
68+} SLocalParam;
69+
5870 class CSceneChangeDetectorVideo {
5971 public:
6072 CSceneChangeDetectorVideo (SSceneChangeResult& sParam, int32_t iCpuFlag) : m_sParam (sParam) {
@@ -72,9 +84,27 @@ class CSceneChangeDetectorVideo { · 11 unmodified lines
7284 }
7385 virtual ~CSceneChangeDetectorVideo() {
7486 }
75− void operator() (uint8_t* pSrcY, int32_t iSrcStrideY, uint8_t* pRefY, int32_t iRefStrideY, uint8_t*& pStaticBlockIdc) {
76− int32_t iSad = m_pfSad (pSrcY, iSrcStrideY, pRefY, iSrcStrideY);
77− m_sParam.iMotionBlockNum += iSad > HIGH_MOTION_BLOCK_THRESHOLD;
87+ void operator() (SLocalParam& sLocalParam) {
88+ int32_t iRefRowStride = 0, iCurRowStride = 0;
89+ uint8_t* pRefY = sLocalParam.pRefY;
90+ uint8_t* pCurY = sLocalParam.pCurY;
91+ uint8_t* pRefTmp = NULL, *pCurTmp = NULL;
92+
93+ iRefRowStride = sLocalParam.iRefStride << 3;
94+ iCurRowStride = sLocalParam.iCurStride << 3;
95+
96+ for (int32_t j = 0; j < sLocalParam.iBlock8x8Height; j++) {
97+ pRefTmp = pRefY;
98+ pCurTmp = pCurY;
99+ for (int32_t i = 0; i < sLocalParam.iBlock8x8Width; i++) {
100+ int32_t iSad = m_pfSad (pCurTmp, sLocalParam.iCurStride, pRefTmp, sLocalParam.iRefStride);
101+ m_sParam.iMotionBlockNum += iSad > HIGH_MOTION_BLOCK_THRESHOLD;
102+ pRefTmp += 8;
103+ pCurTmp += 8;
104+ }
105+ pRefY += iRefRowStride;
106+ pCurY += iCurRowStride;
107+ }
78108 }
79109 protected:
80110 SadFuncPtr m_pfSad;
@@ -88,14 +118,53 @@ class CSceneChangeDetectorScreen : public CSceneChangeDetectorVideo { · 7 unmodified lines
88118 }
89119 virtual ~CSceneChangeDetectorScreen() {
90120 }
91− void operator() (uint8_t* pSrcY, int32_t iSrcStrideY, uint8_t* pRefY, int32_t iRefStrideY, uint8_t*& pStaticBlockIdc) {
92− int32_t iSad = m_pfSad (pSrcY, iSrcStrideY, pRefY, iSrcStrideY);
93− if (iSad == 0) {
94− *pStaticBlockIdc ++ = COLLOCATED_STATIC;
95− } else {
96− m_sParam.iFrameComplexity += iSad;
97− m_sParam.iMotionBlockNum += iSad > HIGH_MOTION_BLOCK_THRESHOLD;
98− *pStaticBlockIdc ++ = NO_STATIC;
121+ void operator() (SLocalParam& sLocalParam) {
122+ bool bScrollDetectFlag = m_sParam.sScrollResult.bScrollDetectFlag;
123+ int32_t iScrollMvX = m_sParam.sScrollResult.iScrollMvX;
124+ int32_t iScrollMvY = m_sParam.sScrollResult.iScrollMvY;
125+
126+ int32_t iRefRowStride = 0, iCurRowStride = 0;
127+ uint8_t* pRefY = sLocalParam.pRefY;
128+ uint8_t* pCurY = sLocalParam.pCurY;
129+ uint8_t* pRefTmp = NULL, *pCurTmp = NULL;
130+ int32_t iWidth = sLocalParam.iWidth;
131+ int32_t iHeight = sLocalParam.iHeight;
132+
133+ iRefRowStride = sLocalParam.iRefStride << 3;
134+ iCurRowStride = sLocalParam.iCurStride << 3;
135+
136+ for (int32_t j = 0; j < sLocalParam.iBlock8x8Height; j++) {
137+ pRefTmp = pRefY;
138+ pCurTmp = pCurY;
139+ for (int32_t i = 0; i < sLocalParam.iBlock8x8Width; i++) {
140+ int32_t iBlockPointX = i << 3;
141+ int32_t iBlockPointY = j << 3;
142+ uint8_t uiBlockIdcTmp = NO_STATIC;
143+ int32_t iSad = m_pfSad (pCurTmp, sLocalParam.iCurStride, pRefTmp, sLocalParam.iRefStride);
144+ if (iSad == 0) {
145+ uiBlockIdcTmp = COLLOCATED_STATIC;
146+ } else if (bScrollDetectFlag && (!iScrollMvX || !iScrollMvY) && (iBlockPointX + iScrollMvX >= 0)
147+ && (iBlockPointX + iScrollMvX <= iWidth - 8) &&
148+ (iBlockPointY + iScrollMvY >= 0) && (iBlockPointY + iScrollMvY <= iHeight - 8)) {
149+ uint8_t* pRefTmpScroll = pRefTmp + iScrollMvY * sLocalParam.iRefStride + iScrollMvX;
150+ int32_t iSadScroll = m_pfSad (pCurTmp, sLocalParam.iCurStride, pRefTmpScroll, sLocalParam.iRefStride);
151+
152+ if (iSadScroll == 0) {
153+ uiBlockIdcTmp = SCROLLED_STATIC;
154+ } else {
155+ m_sParam.iFrameComplexity += iSad;
156+ m_sParam.iMotionBlockNum += iSad > HIGH_MOTION_BLOCK_THRESHOLD;
157+ }
158+ } else {
159+ m_sParam.iFrameComplexity += iSad;
160+ m_sParam.iMotionBlockNum += iSad > HIGH_MOTION_BLOCK_THRESHOLD;
161+ }
162+ * (sLocalParam.pStaticBlockIdc) ++ = uiBlockIdcTmp;
163+ pRefTmp += 8;
164+ pCurTmp += 8;
165+ }
166+ pRefY += iRefRowStride;
167+ pCurY += iCurRowStride;
99168 }
100169 }
101170 };
@@ -113,47 +182,28 @@ class CSceneChangeDetection : public IStrategy { · 11 unmodified lines
113182
114183 EResult Process (int32_t iType, SPixMap* pSrcPixMap, SPixMap* pRefPixMap) {
115184 EResult eReturn = RET_INVALIDPARAM;
116− int32_t iWidth = pSrcPixMap->sRect.iRectWidth;
117− int32_t iHeight = pSrcPixMap->sRect.iRectHeight;
118− int32_t iBlock8x8Width = iWidth >> 3;
119− int32_t iBlock8x8Height = iHeight >> 3;
120− int32_t iBlock8x8Num = iBlock8x8Width * iBlock8x8Height;
185+
186+ m_sLocalParam.iWidth = pSrcPixMap->sRect.iRectWidth;
187+ m_sLocalParam.iHeight = pSrcPixMap->sRect.iRectHeight;
188+ m_sLocalParam.iBlock8x8Width = m_sLocalParam.iWidth >> 3;
189+ m_sLocalParam.iBlock8x8Height = m_sLocalParam.iHeight >> 3;
190+ m_sLocalParam.pRefY = (uint8_t*)pRefPixMap->pPixel[0];
191+ m_sLocalParam.pCurY = (uint8_t*)pSrcPixMap->pPixel[0];
192+ m_sLocalParam.iRefStride = pRefPixMap->iStride[0];
193+ m_sLocalParam.iCurStride = pSrcPixMap->iStride[0];
194+ m_sLocalParam.pStaticBlockIdc = m_sSceneChangeParam.pStaticBlockIdc;
195+
196+ int32_t iBlock8x8Num = m_sLocalParam.iBlock8x8Width * m_sLocalParam.iBlock8x8Height;
121197 int32_t iSceneChangeThresholdLarge = WelsStaticCast (int32_t,
122198 SCENE_CHANGE_MOTION_RATIO_LARGE * iBlock8x8Num + 0.5f + PESN);
123199 int32_t iSceneChangeThresholdMedium = WelsStaticCast (int32_t,
124200 SCENE_CHANGE_MOTION_RATIO_MEDIUM * iBlock8x8Num + 0.5f + PESN);
125− uint8_t* pRefY = NULL, *pCurY = NULL;
126− int32_t iRefStride = 0, iCurStride = 0;
127− int32_t iRefRowStride = 0, iCurRowStride = 0;
128− uint8_t* pRefTmp = NULL, *pCurTmp = NULL;
129− uint8_t* pStaticBlockIdc = m_sSceneChangeParam.pStaticBlockIdc;
130−
131− pRefY = (uint8_t*)pRefPixMap->pPixel[0];
132− pCurY = (uint8_t*)pSrcPixMap->pPixel[0];
133−
134− iRefStride = pRefPixMap->iStride[0];
135− iCurStride = pSrcPixMap->iStride[0];
136−
137− iRefRowStride = pRefPixMap->iStride[0] << 3;
138− iCurRowStride = pSrcPixMap->iStride[0] << 3;
139201
140202 m_sSceneChangeParam.iMotionBlockNum = 0;
141203 m_sSceneChangeParam.iFrameComplexity = 0;
142204 m_sSceneChangeParam.eSceneChangeIdc = SIMILAR_SCENE;
143205
144− for (int32_t j = 0; j < iBlock8x8Height; j ++) {
145− pRefTmp = pRefY;
146− pCurTmp = pCurY;
147−
148− for (int32_t i = 0; i < iBlock8x8Width; i++) {
149− m_cDetector (pRefTmp, iRefStride, pCurTmp, iCurStride, pStaticBlockIdc);
150− pRefTmp += 8;
151− pCurTmp += 8;
152− }
153−
154− pRefY += iRefRowStride;
155− pCurY += iCurRowStride;
156− }
206+ m_cDetector (m_sLocalParam);
157207
158208 if (m_sSceneChangeParam.iMotionBlockNum >= iSceneChangeThresholdLarge) {
159209 m_sSceneChangeParam.eSceneChangeIdc = LARGE_CHANGED_SCENE;
@@ -183,6 +233,7 @@ class CSceneChangeDetection : public IStrategy { · 23 unmodified lines
183233 }
184234 private:
185235 SSceneChangeResult m_sSceneChangeParam;
236+ SLocalParam m_sLocalParam;
186237 T m_cDetector;
187238 };
188239
codec/processing/src/scrolldetection/ScrollDetection.cpp+0−4
@@ -105,10 +105,6 @@ void CScrollDetection::ScrollDetectionWithoutMask (SPixMap* pSrcPixMap, SPixMap* · 104 unmodified lines
105105 iWidth /= 2;
106106 iStartX += iWidth / 2;
107107
108− m_sScrollDetectionParam.iScrollMvX = 0;
109− m_sScrollDetectionParam.iScrollMvY = 0;
110− m_sScrollDetectionParam.bScrollDetectFlag = false;
111−
112108 ScrollDetectionCore (pSrcPixMap, pRefPixMap, iWidth, iHeight, iStartX, iStartY, m_sScrollDetectionParam);
113109
114110 if (m_sScrollDetectionParam.bScrollDetectFlag && m_sScrollDetectionParam.iScrollMvY)

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