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
332 int32_t iAlpha;332 int32_t iAlpha;
333 int32_t iBeta;333 int32_t iBeta;
334 ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16);334 ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16);
335 if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
335 336
336 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,337 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
337 iBeta);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 }
338 361
339 if (iAlpha | iBeta) {
340 TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);
341 pFilter->pLoopf->pfChromaDeblockingLT4Ver (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc);
342 }362 }
343 return;363 return;
344}364}
@@ -348,13 +368,33 @@ void FilteringEdgeChromaV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uint8_t* · 3 unmodified lines
348 int32_t iAlpha;368 int32_t iAlpha;
349 int32_t iBeta;369 int32_t iBeta;
350 ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16);370 ENFORCE_STACK_ALIGN_1D (int8_t, tc, 4, 16);
371 if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
351 372
352 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
353 iBeta);
354 373
355 if (iAlpha | iBeta) {374 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
356 TC0_TBL_LOOKUP (tc, iIndexA, pBS, 1);375 iBeta);
357 pFilter->pLoopf->pfChromaDeblockingLT4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta, tc);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 }
358 }398 }
359 return;399 return;
360}400}
@@ -364,12 +404,27 @@ void FilteringEdgeChromaIntraH (SDeblockingFilter* pFilter, uint8_t* pPixCb, uin · 3 unmodified lines
364 int32_t iIndexA;404 int32_t iIndexA;
365 int32_t iAlpha;405 int32_t iAlpha;
366 int32_t iBeta;406 int32_t iBeta;
407 if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
367 408
368 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,409 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
369 iBeta);410 iBeta);
370 411
371 if (iAlpha | iBeta) {412 if (iAlpha | iBeta) {
372 pFilter->pLoopf->pfChromaDeblockingEQ4Ver (pPixCb, pPixCr, iStride, 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 }
373 }428 }
374 return;429 return;
375}430}
@@ -379,12 +434,29 @@ void FilteringEdgeChromaIntraV (SDeblockingFilter* pFilter, uint8_t* pPixCb, uin · 3 unmodified lines
379 int32_t iIndexA;434 int32_t iIndexA;
380 int32_t iAlpha;435 int32_t iAlpha;
381 int32_t iBeta;436 int32_t iBeta;
437 if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) { // QP of cb and cr are the same
382 438
383 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
384 iBeta);
385 439
386 if (iAlpha | iBeta) {440
387 pFilter->pLoopf->pfChromaDeblockingEQ4Hor (pPixCb, pPixCr, iStride, iAlpha, iBeta);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
388 }460 }
389 return;461 return;
390}462}
@@ -397,7 +469,8 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 6 unmodified lines
397 int32_t iMbY = pCurDqLayer->iMbY;469 int32_t iMbY = pCurDqLayer->iMbY;
398 470
399 int32_t iCurLumaQp = pCurDqLayer->pLumaQp[iMbXyIndex];471 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];
401 int32_t iLineSize = pFilter->iCsStride[0];474 int32_t iLineSize = pFilter->iCsStride[0];
402 int32_t iLineSizeUV = pFilter->iCsStride[1];475 int32_t iLineSizeUV = pFilter->iCsStride[1];
403 476
@@ -406,11 +479,13 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 2 unmodified lines
406 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSizeUV + iMbX) << 3);479 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSizeUV + iMbX) << 3);
407 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSizeUV + iMbX) << 3);480 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSizeUV + iMbX) << 3);
408 481
482//Vertical margrin
409 if (iBoundryFlag & LEFT_FLAG_MASK) {483 if (iBoundryFlag & LEFT_FLAG_MASK) {
410 int32_t iLeftXyIndex = iMbXyIndex - 1;484 int32_t iLeftXyIndex = iMbXyIndex - 1;
411 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iLeftXyIndex] + 1) >> 1;485 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iLeftXyIndex] + 1) >> 1;
412 pFilter->iChromaQP = (iCurChromaQp + pCurDqLayer->pChromaQp[iLeftXyIndex] + 1) >> 1;486 for (int i = 0; i < 2; i++) {
413 487 pFilter->iChromaQP[i] = (pCurChromaQp[i] + pCurDqLayer->pChromaQp[iLeftXyIndex][i] + 1) >> 1;
488 }
414 if (nBS[0][0][0] == 0x04) {489 if (nBS[0][0][0] == 0x04) {
415 FilteringEdgeLumaIntraV (pFilter, pDestY, iLineSize, NULL);490 FilteringEdgeLumaIntraV (pFilter, pDestY, iLineSize, NULL);
416 FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSizeUV, NULL);491 FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSizeUV, NULL);
@@ -423,7 +498,8 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 6 unmodified lines
423 }498 }
424 499
425 pFilter->iLumaQP = iCurLumaQp;500 pFilter->iLumaQP = iCurLumaQp;
426 pFilter->iChromaQP = iCurChromaQp;501 pFilter->iChromaQP[0] = pCurChromaQp[0];
502 pFilter->iChromaQP[1] = pCurChromaQp[1];
427 503
428 if (* (uint32_t*)nBS[0][1] != 0) {504 if (* (uint32_t*)nBS[0][1] != 0) {
429 FilteringEdgeLumaV (pFilter, &pDestY[1 << 2], iLineSize, nBS[0][1]);505 FilteringEdgeLumaV (pFilter, &pDestY[1 << 2], iLineSize, nBS[0][1]);
@@ -441,7 +517,9 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 11 unmodified lines
441 if (iBoundryFlag & TOP_FLAG_MASK) {517 if (iBoundryFlag & TOP_FLAG_MASK) {
442 int32_t iTopXyIndex = iMbXyIndex - pCurDqLayer->iMbWidth;518 int32_t iTopXyIndex = iMbXyIndex - pCurDqLayer->iMbWidth;
443 pFilter->iLumaQP = (iCurLumaQp + pCurDqLayer->pLumaQp[iTopXyIndex] + 1) >> 1;519 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 }
445 523
446 if (nBS[1][0][0] == 0x04) {524 if (nBS[1][0][0] == 0x04) {
447 FilteringEdgeLumaIntraH (pFilter, pDestY, iLineSize, NULL);525 FilteringEdgeLumaIntraH (pFilter, pDestY, iLineSize, NULL);
@@ -455,7 +533,8 @@ void DeblockingInterMb (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, uint8_ · 7 unmodified lines
455 }533 }
456 534
457 pFilter->iLumaQP = iCurLumaQp;535 pFilter->iLumaQP = iCurLumaQp;
458 pFilter->iChromaQP = iCurChromaQp;536 pFilter->iChromaQP[0] = pCurChromaQp[0];
537 pFilter->iChromaQP[1] = pCurChromaQp[1];
459 538
460 if (* (uint32_t*)nBS[1][1] != 0) {539 if (* (uint32_t*)nBS[1][1] != 0) {
461 FilteringEdgeLumaH (pFilter, &pDestY[ (1 << 2)*iLineSize], iLineSize, nBS[1][1]);540 FilteringEdgeLumaH (pFilter, &pDestY[ (1 << 2)*iLineSize], iLineSize, nBS[1][1]);
@@ -527,8 +606,10 @@ void FilteringEdgeChromaHV (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, in · 65 unmodified lines
527 int32_t iMbWidth = pCurDqLayer->iMbWidth;606 int32_t iMbWidth = pCurDqLayer->iMbWidth;
528 int32_t iLineSize = pFilter->iCsStride[1];607 int32_t iLineSize = pFilter->iCsStride[1];
529 608
530 uint8_t* pDestCb, *pDestCr;609 uint8_t* pDestCb;
531 int32_t iCurQp;610 uint8_t* pDestCr;
611 //int32_t iCurQp;
612 int8_t* pCurQp;
532 int32_t iIndexA, iAlpha, iBeta;613 int32_t iIndexA, iAlpha, iBeta;
533 614
534 ENFORCE_STACK_ALIGN_1D (int8_t, iTc, 4, 16);615 ENFORCE_STACK_ALIGN_1D (int8_t, iTc, 4, 16);
@@ -536,33 +617,76 @@ void FilteringEdgeChromaHV (PDqLayer pCurDqLayer, PDeblockingFilter pFilter, in · 1 unmodified line
536 617
537 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSize + iMbX) << 3);618 pDestCb = pFilter->pCsData[1] + ((iMbY * iLineSize + iMbX) << 3);
538 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSize + iMbX) << 3);619 pDestCr = pFilter->pCsData[2] + ((iMbY * iLineSize + iMbX) << 3);
539 iCurQp = pCurDqLayer->pChromaQp[iMbXyIndex];620 pCurQp = pCurDqLayer->pChromaQp[iMbXyIndex];
621
540 * (uint32_t*)uiBSx4 = 0x03030303;622 * (uint32_t*)uiBSx4 = 0x03030303;
541 623
542 // chroma v624
625// chroma v
543 if (iBoundryFlag & LEFT_FLAG_MASK) {626 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 }
545 FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSize, NULL);632 FilteringEdgeChromaIntraV (pFilter, pDestCb, pDestCr, iLineSize, NULL);
546 }633 }
547 634
548 pFilter->iChromaQP = iCurQp;635 pFilter->iChromaQP[0] = pCurQp[0];
549 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP, pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,636 pFilter->iChromaQP[1] = pCurQp[1];;
550 iBeta);637 if (pFilter->iChromaQP[0] == pFilter->iChromaQP[1]) {
551 if (iAlpha | iBeta) {638 GET_ALPHA_BETA_FROM_QP (pFilter->iChromaQP[0], pFilter->iSliceAlphaC0Offset, pFilter->iSliceBetaOffset, iIndexA, iAlpha,
552 TC0_TBL_LOOKUP (iTc, iIndexA, uiBSx4, 1);639 iBeta);
553 pFilter->pLoopf->pfChromaDeblockingLT4Hor (&pDestCb[2 << 1], &pDestCr[2 << 1], iLineSize, iAlpha, iBeta, iTc);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 }
554 }656 }
555 657
556 // chroma h658 // chroma h
659
557 if (iBoundryFlag & TOP_FLAG_MASK) {660 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 }
559 FilteringEdgeChromaIntraH (pFilter, pDestCb, pDestCr, iLineSize, NULL);664 FilteringEdgeChromaIntraH (pFilter, pDestCb, pDestCr, iLineSize, NULL);
560 }665 }
561 666
562 pFilter->iChromaQP = iCurQp;667 pFilter->iChromaQP[0] = pCurQp[0];
563 if (iAlpha | iBeta) {668 pFilter->iChromaQP[1] = pCurQp[1];
564 pFilter->pLoopf->pfChromaDeblockingLT4Ver (&pDestCb[ (2 << 1)*iLineSize], &pDestCr[ (2 << 1)*iLineSize], iLineSize,669
565 iAlpha, iBeta, iTc);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
566 }690 }
567}691}
568 692
@@ -706,6 +830,11 @@ void DeblockingInit (SDeblockingFunc* pFunc, int32_t iCpu) { · 137 unmodified lines
706 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_c;830 pFunc->pfChromaDeblockingLT4Hor = DeblockChromaLt4H_c;
707 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_c;831 pFunc->pfChromaDeblockingEQ4Hor = DeblockChromaEq4H_c;
708 832
833 pFunc->pfChromaDeblockingLT4Ver2 = DeblockChromaLt4V2_c;
834 pFunc->pfChromaDeblockingEQ4Ver2 = DeblockChromaEq4V2_c;
835 pFunc->pfChromaDeblockingLT4Hor2 = DeblockChromaLt4H2_c;
836 pFunc->pfChromaDeblockingEQ4Hor2 = DeblockChromaEq4H2_c;
837
709#ifdef X86_ASM838#ifdef X86_ASM
710 if (iCpu & WELS_CPU_SSSE3) {839 if (iCpu & WELS_CPU_SSSE3) {
711 pFunc->pfLumaDeblockingLT4Ver = DeblockLumaLt4V_ssse3;840 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