History

to support different chroma qp

fix travis ci error

zhuiling committed 11 years ago

Commit a45c6611 parent 01fd22011 files · +346 −101Browse files

Showing the changes to codec/decoder/core/src/deblocking.cpp (1 of 11 files). Show all

Unified · Split

codec/decoder/core/src/deblocking.cpp+169−40
@@ -332,13 +332,33 @@ void FilteringEdgeChromaH (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* · 331 unmodified lines
332332 int32_t iAlpha;
333333 int32_t iBeta;
334334 ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16);
335+ if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
335336
336− GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
337− iBeta);
337+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
338+ iBeta);
339+
340+ if (iAlpha | iBeta) {
341+ TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
342+ pFilter->pLoopf->pfChromaDeblockingLT4Ver (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc);
343+ }
344+ } else {
345+
346+ for (int i = 0; i < 2; i++) {
347+
348+
349+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
350+ iBeta);
351+
352+ if (iAlpha | iBeta) {
353+ uint8_t* pPixCbCr = (i == 0) ? pPixCb : pPixCr;
354+ TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
355+ pFilter->pLoopf->pfChromaDeblockingLT4Ver2 (pPixCbCr, iStride, iAlpha, iBeta, tc);
356+ }
357+
358+
359+
360+ }
338361
339− if (iAlpha | iBeta) {
340− TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
341− pFilter->pLoopf->pfChromaDeblockingLT4Ver (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc);
342362 }
343363 return;
344364 }
@@ -348,13 +368,33 @@ void FilteringEdgeChromaV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* · 3 unmodified lines
348368 int32_t iAlpha;
349369 int32_t iBeta;
350370 ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16);
371+ if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
351372
352− GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
353− iBeta);
354373
355− if (iAlpha | iBeta) {
356− TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
357− pFilter->pLoopf->pfChromaDeblockingLT4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc);
374+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
375+ iBeta);
376+
377+ if (iAlpha | iBeta) {
378+ TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
379+ pFilter->pLoopf->pfChromaDeblockingLT4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc);
380+ }
381+
382+
383+ } else {
384+
385+ for (int i = 0; i < 2; i++) {
386+
387+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
388+ iBeta);
389+
390+ if (iAlpha | iBeta) {
391+ uint8_t* pPixCbCr = (i == 0) ? pPixCb : pPixCr;
392+ TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
393+ pFilter->pLoopf->pfChromaDeblockingLT4Hor2 (pPixCbCr, iStride, iAlpha, iBeta, tc);
394+ }
395+
396+
397+ }
358398 }
359399 return;
360400 }
@@ -364,12 +404,27 @@ void FilteringEdgeChromaIntraH (SDeblockingFilter* pFilter, uint8_t* pPixCb, uin · 3 unmodified lines
364404 int32_t iIndexA;
365405 int32_t iAlpha;
366406 int32_t iBeta;
407+ if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
367408
368− GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
369− iBeta);
409+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
410+ iBeta);
370411
371− if (iAlpha | iBeta) {
372− pFilter->pLoopf->pfChromaDeblockingEQ4Ver (pPixCb, pPixCr, iStride, iAlpha, iBeta);
412+ if (iAlpha | iBeta) {
413+ pFilter->pLoopf->pfChromaDeblockingEQ4Ver (pPixCb, pPixCr, iStride, iAlpha, iBeta);
414+ }
415+ } else {
416+
417+ for (int i = 0; i < 2; i++) {
418+
419+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
420+ iBeta);
421+
422+ if (iAlpha | iBeta) {
423+ uint8_t* pPixCbCr = (i == 0) ? pPixCb : pPixCr;
424+ pFilter->pLoopf->pfChromaDeblockingEQ4Ver2 (pPixCbCr, iStride, iAlpha, iBeta);
425+ }
426+
427+ }
373428 }
374429 return;
375430 }
@@ -379,12 +434,29 @@ void FilteringEdgeChromaIntraV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uin · 3 unmodified lines
379434 int32_t iIndexA;
380435 int32_t iAlpha;
381436 int32_t iBeta;
437+ if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) { // QP of cb and cr are the same
382438
383− GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
384− iBeta);
385439
386− if (iAlpha | iBeta) {
387− pFilter->pLoopf->pfChromaDeblockingEQ4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta);
440+
441+
442+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
443+ iBeta);
444+ if (iAlpha | iBeta) {
445+ pFilter->pLoopf->pfChromaDeblockingEQ4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta);
446+ }
447+ } else {
448+
449+ for (int i = 0; i < 2; i++) {
450+
451+
452+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
453+ iBeta);
454+ if (iAlpha | iBeta) {
455+ uint8_t* pPixCbCr = (i == 0) ? pPixCb : pPixCr;
456+ pFilter->pLoopf->pfChromaDeblockingEQ4Hor2 (pPixCbCr, iStride, iAlpha, iBeta);
457+ }
458+ }
459+
388460 }
389461 return;
390462 }
@@ -397,7 +469,8 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 6 unmodified lines
397469 int32_t iMbY = pCurDqLayer->iMbY;
398470
399471 int32_t iCurLumaQp = pCurDqLayer->pLumaQp[iMbXyIndex];
400− int32_t iCurChromaQp = pCurDqLayer->pChromaQp[iMbXyIndex];
472+ //int32_t* iCurChromaQp = pCurDqLayer->pChromaQp[iMbXyIndex];
473+ int8_t* pCurChromaQp = pCurDqLayer->pChromaQp[iMbXyIndex];
401474 int32_t iLineSize = pFilter->iCsStride[0];
402475 int32_t iLineSizeUV = pFilter->iCsStride[1];
403476
@@ -406,11 +479,13 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 2 unmodified lines
406479 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSizeUV + iMbX) << 3);
407480 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSizeUV + iMbX) << 3);
408481
482+//Vertical margrin
409483 if (iBoundryFlag & LEFT_FLAG_MASK) {
410484 int32_t iLeftXyIndex = iMbXyIndex - 1;
411485 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iLeftXyIndex] + 1) >> 1;
412− pFilter->iChromaQP = (iCurChromaQp + pCurDqLayer->pChromaQp[iLeftXyIndex] + 1) >> 1;
413−
486+ for (int i = 0; i < 2; i++) {
487+ pFilter->iChromaQP[i] = (pCurChromaQp[i] + pCurDqLayer->pChromaQp[iLeftXyIndex][i] + 1) >> 1;
488+ }
414489 if (nBS[0][0][0] == 0x04) {
415490 FilteringEdgeLumaIntraV (pFilter, pDestY, iLineSize, NULL);
416491 FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSizeUV, NULL);
@@ -423,7 +498,8 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 6 unmodified lines
423498 }
424499
425500 pFilter->iLumaQP = iCurLumaQp;
426− pFilter->iChromaQP = iCurChromaQp;
501+ pFilter->iChromaQP[0] = pCurChromaQp[0];
502+ pFilter->iChromaQP[1] = pCurChromaQp[1];
427503
428504 if (* (uint32_t*)nBS[0][1] != 0) {
429505 FilteringEdgeLumaV (pFilter, &pDestY[1 << 2], iLineSize, nBS[0][1]);
@@ -441,7 +517,9 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 11 unmodified lines
441517 if (iBoundryFlag & TOP_FLAG_MASK) {
442518 int32_t iTopXyIndex = iMbXyIndex - pCurDqLayer->iMbWidth;
443519 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iTopXyIndex] + 1) >> 1;
444− pFilter->iChromaQP = (iCurChromaQp + pCurDqLayer->pChromaQp[iTopXyIndex] + 1) >> 1;
520+ for (int i = 0; i < 2; i++) {
521+ pFilter->iChromaQP[i] = (pCurChromaQp[i] + pCurDqLayer->pChromaQp[iTopXyIndex][i] + 1) >> 1;
522+ }
445523
446524 if (nBS[1][0][0] == 0x04) {
447525 FilteringEdgeLumaIntraH (pFilter, pDestY, iLineSize, NULL);
@@ -455,7 +533,8 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 7 unmodified lines
455533 }
456534
457535 pFilter->iLumaQP = iCurLumaQp;
458− pFilter->iChromaQP = iCurChromaQp;
536+ pFilter->iChromaQP[0] = pCurChromaQp[0];
537+ pFilter->iChromaQP[1] = pCurChromaQp[1];
459538
460539 if (* (uint32_t*)nBS[1][1] != 0) {
461540 FilteringEdgeLumaH (pFilter, &pDestY[ (1 << 2)*iLineSize], iLineSize, nBS[1][1]);
@@ -527,8 +606,10 @@ void FilteringEdgeChromaHV (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, in · 65 unmodified lines
527606 int32_t iMbWidth = pCurDqLayer->iMbWidth;
528607 int32_t iLineSize = pFilter->iCsStride[1];
529608
530− uint8_t* pDestCb, *pDestCr;
531− int32_t iCurQp;
609+ uint8_t* pDestCb;
610+ uint8_t* pDestCr;
611+ //int32_t iCurQp;
612+ int8_t* pCurQp;
532613 int32_t iIndexA, iAlpha, iBeta;
533614
534615 ENFORCE_STACK_ALIGN_1D (int8_t, iTc, 4, 16);
@@ -536,33 +617,76 @@ void FilteringEdgeChromaHV (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, in · 1 unmodified line
536617
537618 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSize + iMbX) << 3);
538619 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSize + iMbX) << 3);
539− iCurQp = pCurDqLayer->pChromaQp[iMbXyIndex];
620+ pCurQp = pCurDqLayer->pChromaQp[iMbXyIndex];
621+
540622 * (uint32_t*)uiBSx4 = 0x03030303;
541623
542− // chroma v
624+
625+// chroma v
543626 if (iBoundryFlag & LEFT_FLAG_MASK) {
544− pFilter->iChromaQP = (iCurQp + pCurDqLayer->pChromaQp[iMbXyIndex - 1] + 1) >> 1;
627+
628+ for (int i = 0; i < 2; i++) {
629+ pFilter->iChromaQP[i] = (pCurQp[i] + pCurDqLayer->pChromaQp[iMbXyIndex - 1][i] + 1) >> 1;
630+
631+ }
545632 FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSize, NULL);
546633 }
547634
548− pFilter->iChromaQP = iCurQp;
549− GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
550− iBeta);
551− if (iAlpha | iBeta) {
552− TC0_TBL_LOOKUP (iTc, iIndexA, uiBSx4, 1);
553− pFilter->pLoopf->pfChromaDeblockingLT4Hor (&pDestCb[2 << 1], &pDestCr[2 << 1], iLineSize, iAlpha, iBeta, iTc);
635+ pFilter->iChromaQP[0] = pCurQp[0];
636+ pFilter->iChromaQP[1] = pCurQp[1];;
637+ if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
638+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
639+ iBeta);
640+ if (iAlpha | iBeta) {
641+ TC0_TBL_LOOKUP (iTc, iIndexA, uiBSx4, 1);
642+ pFilter->pLoopf->pfChromaDeblockingLT4Hor (&pDestCb[2 << 1], &pDestCr[2 << 1], iLineSize, iAlpha, iBeta, iTc);
643+ }
644+ } else {
645+
646+ for (int i = 0; i < 2; i++) {
647+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
648+ iBeta);
649+ if (iAlpha | iBeta) {
650+ uint8_t* pDestCbCr = (i == 0) ? &pDestCb[2 << 1] : &pDestCr[2 << 1];
651+ TC0_TBL_LOOKUP (iTc, iIndexA, uiBSx4, 1);
652+ pFilter->pLoopf->pfChromaDeblockingLT4Hor2 (pDestCbCr, iLineSize, iAlpha, iBeta, iTc);
653+ }
654+
655+ }
554656 }
555657
556658 // chroma h
659+
557660 if (iBoundryFlag & TOP_FLAG_MASK) {
558− pFilter->iChromaQP = (iCurQp + pCurDqLayer->pChromaQp[iMbXyIndex - iMbWidth] + 1) >> 1;
661+ for (int i = 0; i < 2; i++) {
662+ pFilter->iChromaQP[i] = (pCurQp[i] + pCurDqLayer->pChromaQp[iMbXyIndex - iMbWidth][i] + 1) >> 1;
663+ }
559664 FilteringEdgeChromaIntraH (pFilter, pDestCb, pDestCr, iLineSize, NULL);
560665 }
561666
562− pFilter->iChromaQP = iCurQp;
563− if (iAlpha | iBeta) {
564− pFilter->pLoopf->pfChromaDeblockingLT4Ver (&pDestCb[ (2 << 1)*iLineSize], &pDestCr[ (2 << 1)*iLineSize], iLineSize,
565− iAlpha, iBeta, iTc);
667+ pFilter->iChromaQP[0] = pCurQp[0];
668+ pFilter->iChromaQP[1] = pCurQp[1];
669+
670+ if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
671+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
672+ iBeta);
673+ if (iAlpha | iBeta) {
674+ pFilter->pLoopf->pfChromaDeblockingLT4Ver (&pDestCb[ (2 << 1)*iLineSize], &pDestCr[ (2 << 1)*iLineSize], iLineSize,
675+ iAlpha, iBeta, iTc);
676+ }
677+ } else {
678+ for (int i = 0; i < 2; i++) {
679+
680+ GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[i], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
681+ iBeta);
682+ if (iAlpha | iBeta) {
683+ uint8_t* pDestCbCr = (i == 0) ? &pDestCb[ (2 << 1) * iLineSize] : &pDestCr[ (2 << 1) * iLineSize];
684+ pFilter->pLoopf->pfChromaDeblockingLT4Ver2 (pDestCbCr, iLineSize,
685+ iAlpha, iBeta, iTc);
686+ }
687+ }
688+
689+
566690 }
567691 }
568692
@@ -706,6 +830,11 @@ void DeblockingInit (SDeblockingFunc* pFunc, int32_t iCpu) { · 137 unmodified lines
706830 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_c;
707831 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_c;
708832
833+ pFunc->pfChromaDeblockingLT4Ver2 = DeblockChromaLt4V2_c;
834+ pFunc->pfChromaDeblockingEQ4Ver2 = DeblockChromaEq4V2_c;
835+ pFunc->pfChromaDeblockingLT4Hor2 = DeblockChromaLt4H2_c;
836+ pFunc->pfChromaDeblockingEQ4Hor2 = DeblockChromaEq4H2_c;
837+
709838 #ifdef X86_ASM
710839 if (iCpu & WELS_CPU_SSSE3) {
711840 pFunc->pfLumaDeblockingLT4Ver = DeblockLumaLt4V_ssse3;

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