Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: source/libvpx/vp9/common/vp9_loopfilter.c

Issue 592203002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/common/vp9_loopfilter.h ('k') | source/libvpx/vp9/common/vp9_mvref_common.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 left_64x64_txform_mask[tx_size_y]) << shift_y; 612 left_64x64_txform_mask[tx_size_y]) << shift_y;
613 613
614 if (tx_size_y == TX_4X4) 614 if (tx_size_y == TX_4X4)
615 *int_4x4_y |= (size_mask[block_size] & 0xffffffffffffffff) << shift_y; 615 *int_4x4_y |= (size_mask[block_size] & 0xffffffffffffffff) << shift_y;
616 } 616 }
617 617
618 // This function sets up the bit masks for the entire 64x64 region represented 618 // This function sets up the bit masks for the entire 64x64 region represented
619 // by mi_row, mi_col. 619 // by mi_row, mi_col.
620 // TODO(JBB): This function only works for yv12. 620 // TODO(JBB): This function only works for yv12.
621 void vp9_setup_mask(VP9_COMMON *const cm, const int mi_row, const int mi_col, 621 void vp9_setup_mask(VP9_COMMON *const cm, const int mi_row, const int mi_col,
622 MODE_INFO **mi, const int mode_info_stride, 622 MODE_INFO *mi, const int mode_info_stride,
623 LOOP_FILTER_MASK *lfm) { 623 LOOP_FILTER_MASK *lfm) {
624 int idx_32, idx_16, idx_8; 624 int idx_32, idx_16, idx_8;
625 const loop_filter_info_n *const lfi_n = &cm->lf_info; 625 const loop_filter_info_n *const lfi_n = &cm->lf_info;
626 MODE_INFO **mip = mi; 626 MODE_INFO *mip = mi;
627 MODE_INFO **mip2 = mi; 627 MODE_INFO *mip2 = mi;
628 628
629 // These are offsets to the next mi in the 64x64 block. It is what gets 629 // These are offsets to the next mi in the 64x64 block. It is what gets
630 // added to the mi ptr as we go through each loop. It helps us to avoid 630 // added to the mi ptr as we go through each loop. It helps us to avoid
631 // setting up special row and column counters for each index. The last step 631 // setting up special row and column counters for each index. The last step
632 // brings us out back to the starting position. 632 // brings us out back to the starting position.
633 const int offset_32[] = {4, (mode_info_stride << 2) - 4, 4, 633 const int offset_32[] = {4, (mode_info_stride << 2) - 4, 4,
634 -(mode_info_stride << 2) - 4}; 634 -(mode_info_stride << 2) - 4};
635 const int offset_16[] = {2, (mode_info_stride << 1) - 2, 2, 635 const int offset_16[] = {2, (mode_info_stride << 1) - 2, 2,
636 -(mode_info_stride << 1) - 2}; 636 -(mode_info_stride << 1) - 2};
637 const int offset[] = {1, mode_info_stride - 1, 1, -mode_info_stride - 1}; 637 const int offset[] = {1, mode_info_stride - 1, 1, -mode_info_stride - 1};
638 638
639 // Following variables represent shifts to position the current block 639 // Following variables represent shifts to position the current block
640 // mask over the appropriate block. A shift of 36 to the left will move 640 // mask over the appropriate block. A shift of 36 to the left will move
641 // the bits for the final 32 by 32 block in the 64x64 up 4 rows and left 641 // the bits for the final 32 by 32 block in the 64x64 up 4 rows and left
642 // 4 rows to the appropriate spot. 642 // 4 rows to the appropriate spot.
643 const int shift_32_y[] = {0, 4, 32, 36}; 643 const int shift_32_y[] = {0, 4, 32, 36};
644 const int shift_16_y[] = {0, 2, 16, 18}; 644 const int shift_16_y[] = {0, 2, 16, 18};
645 const int shift_8_y[] = {0, 1, 8, 9}; 645 const int shift_8_y[] = {0, 1, 8, 9};
646 const int shift_32_uv[] = {0, 2, 8, 10}; 646 const int shift_32_uv[] = {0, 2, 8, 10};
647 const int shift_16_uv[] = {0, 1, 4, 5}; 647 const int shift_16_uv[] = {0, 1, 4, 5};
648 int i; 648 int i;
649 const int max_rows = (mi_row + MI_BLOCK_SIZE > cm->mi_rows ? 649 const int max_rows = (mi_row + MI_BLOCK_SIZE > cm->mi_rows ?
650 cm->mi_rows - mi_row : MI_BLOCK_SIZE); 650 cm->mi_rows - mi_row : MI_BLOCK_SIZE);
651 const int max_cols = (mi_col + MI_BLOCK_SIZE > cm->mi_cols ? 651 const int max_cols = (mi_col + MI_BLOCK_SIZE > cm->mi_cols ?
652 cm->mi_cols - mi_col : MI_BLOCK_SIZE); 652 cm->mi_cols - mi_col : MI_BLOCK_SIZE);
653 653
654 vp9_zero(*lfm); 654 vp9_zero(*lfm);
655 assert(mip[0] != NULL); 655 assert(mip != NULL);
656 656
657 // TODO(jimbankoski): Try moving most of the following code into decode 657 // TODO(jimbankoski): Try moving most of the following code into decode
658 // loop and storing lfm in the mbmi structure so that we don't have to go 658 // loop and storing lfm in the mbmi structure so that we don't have to go
659 // through the recursive loop structure multiple times. 659 // through the recursive loop structure multiple times.
660 switch (mip[0]->mbmi.sb_type) { 660 switch (mip->mbmi.sb_type) {
661 case BLOCK_64X64: 661 case BLOCK_64X64:
662 build_masks(lfi_n, mip[0] , 0, 0, lfm); 662 build_masks(lfi_n, mip , 0, 0, lfm);
663 break; 663 break;
664 case BLOCK_64X32: 664 case BLOCK_64X32:
665 build_masks(lfi_n, mip[0], 0, 0, lfm); 665 build_masks(lfi_n, mip, 0, 0, lfm);
666 mip2 = mip + mode_info_stride * 4; 666 mip2 = mip + mode_info_stride * 4;
667 if (4 >= max_rows) 667 if (4 >= max_rows)
668 break; 668 break;
669 build_masks(lfi_n, mip2[0], 32, 8, lfm); 669 build_masks(lfi_n, mip2, 32, 8, lfm);
670 break; 670 break;
671 case BLOCK_32X64: 671 case BLOCK_32X64:
672 build_masks(lfi_n, mip[0], 0, 0, lfm); 672 build_masks(lfi_n, mip, 0, 0, lfm);
673 mip2 = mip + 4; 673 mip2 = mip + 4;
674 if (4 >= max_cols) 674 if (4 >= max_cols)
675 break; 675 break;
676 build_masks(lfi_n, mip2[0], 4, 2, lfm); 676 build_masks(lfi_n, mip2, 4, 2, lfm);
677 break; 677 break;
678 default: 678 default:
679 for (idx_32 = 0; idx_32 < 4; mip += offset_32[idx_32], ++idx_32) { 679 for (idx_32 = 0; idx_32 < 4; mip += offset_32[idx_32], ++idx_32) {
680 const int shift_y = shift_32_y[idx_32]; 680 const int shift_y = shift_32_y[idx_32];
681 const int shift_uv = shift_32_uv[idx_32]; 681 const int shift_uv = shift_32_uv[idx_32];
682 const int mi_32_col_offset = ((idx_32 & 1) << 2); 682 const int mi_32_col_offset = ((idx_32 & 1) << 2);
683 const int mi_32_row_offset = ((idx_32 >> 1) << 2); 683 const int mi_32_row_offset = ((idx_32 >> 1) << 2);
684 if (mi_32_col_offset >= max_cols || mi_32_row_offset >= max_rows) 684 if (mi_32_col_offset >= max_cols || mi_32_row_offset >= max_rows)
685 continue; 685 continue;
686 switch (mip[0]->mbmi.sb_type) { 686 switch (mip->mbmi.sb_type) {
687 case BLOCK_32X32: 687 case BLOCK_32X32:
688 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 688 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
689 break; 689 break;
690 case BLOCK_32X16: 690 case BLOCK_32X16:
691 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 691 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
692 if (mi_32_row_offset + 2 >= max_rows) 692 if (mi_32_row_offset + 2 >= max_rows)
693 continue; 693 continue;
694 mip2 = mip + mode_info_stride * 2; 694 mip2 = mip + mode_info_stride * 2;
695 build_masks(lfi_n, mip2[0], shift_y + 16, shift_uv + 4, lfm); 695 build_masks(lfi_n, mip2, shift_y + 16, shift_uv + 4, lfm);
696 break; 696 break;
697 case BLOCK_16X32: 697 case BLOCK_16X32:
698 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 698 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
699 if (mi_32_col_offset + 2 >= max_cols) 699 if (mi_32_col_offset + 2 >= max_cols)
700 continue; 700 continue;
701 mip2 = mip + 2; 701 mip2 = mip + 2;
702 build_masks(lfi_n, mip2[0], shift_y + 2, shift_uv + 1, lfm); 702 build_masks(lfi_n, mip2, shift_y + 2, shift_uv + 1, lfm);
703 break; 703 break;
704 default: 704 default:
705 for (idx_16 = 0; idx_16 < 4; mip += offset_16[idx_16], ++idx_16) { 705 for (idx_16 = 0; idx_16 < 4; mip += offset_16[idx_16], ++idx_16) {
706 const int shift_y = shift_32_y[idx_32] + shift_16_y[idx_16]; 706 const int shift_y = shift_32_y[idx_32] + shift_16_y[idx_16];
707 const int shift_uv = shift_32_uv[idx_32] + shift_16_uv[idx_16]; 707 const int shift_uv = shift_32_uv[idx_32] + shift_16_uv[idx_16];
708 const int mi_16_col_offset = mi_32_col_offset + 708 const int mi_16_col_offset = mi_32_col_offset +
709 ((idx_16 & 1) << 1); 709 ((idx_16 & 1) << 1);
710 const int mi_16_row_offset = mi_32_row_offset + 710 const int mi_16_row_offset = mi_32_row_offset +
711 ((idx_16 >> 1) << 1); 711 ((idx_16 >> 1) << 1);
712 712
713 if (mi_16_col_offset >= max_cols || mi_16_row_offset >= max_rows) 713 if (mi_16_col_offset >= max_cols || mi_16_row_offset >= max_rows)
714 continue; 714 continue;
715 715
716 switch (mip[0]->mbmi.sb_type) { 716 switch (mip->mbmi.sb_type) {
717 case BLOCK_16X16: 717 case BLOCK_16X16:
718 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 718 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
719 break; 719 break;
720 case BLOCK_16X8: 720 case BLOCK_16X8:
721 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 721 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
722 if (mi_16_row_offset + 1 >= max_rows) 722 if (mi_16_row_offset + 1 >= max_rows)
723 continue; 723 continue;
724 mip2 = mip + mode_info_stride; 724 mip2 = mip + mode_info_stride;
725 build_y_mask(lfi_n, mip2[0], shift_y+8, lfm); 725 build_y_mask(lfi_n, mip2, shift_y+8, lfm);
726 break; 726 break;
727 case BLOCK_8X16: 727 case BLOCK_8X16:
728 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 728 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
729 if (mi_16_col_offset +1 >= max_cols) 729 if (mi_16_col_offset +1 >= max_cols)
730 continue; 730 continue;
731 mip2 = mip + 1; 731 mip2 = mip + 1;
732 build_y_mask(lfi_n, mip2[0], shift_y+1, lfm); 732 build_y_mask(lfi_n, mip2, shift_y+1, lfm);
733 break; 733 break;
734 default: { 734 default: {
735 const int shift_y = shift_32_y[idx_32] + 735 const int shift_y = shift_32_y[idx_32] +
736 shift_16_y[idx_16] + 736 shift_16_y[idx_16] +
737 shift_8_y[0]; 737 shift_8_y[0];
738 build_masks(lfi_n, mip[0], shift_y, shift_uv, lfm); 738 build_masks(lfi_n, mip, shift_y, shift_uv, lfm);
739 mip += offset[0]; 739 mip += offset[0];
740 for (idx_8 = 1; idx_8 < 4; mip += offset[idx_8], ++idx_8) { 740 for (idx_8 = 1; idx_8 < 4; mip += offset[idx_8], ++idx_8) {
741 const int shift_y = shift_32_y[idx_32] + 741 const int shift_y = shift_32_y[idx_32] +
742 shift_16_y[idx_16] + 742 shift_16_y[idx_16] +
743 shift_8_y[idx_8]; 743 shift_8_y[idx_8];
744 const int mi_8_col_offset = mi_16_col_offset + 744 const int mi_8_col_offset = mi_16_col_offset +
745 ((idx_8 & 1)); 745 ((idx_8 & 1));
746 const int mi_8_row_offset = mi_16_row_offset + 746 const int mi_8_row_offset = mi_16_row_offset +
747 ((idx_8 >> 1)); 747 ((idx_8 >> 1));
748 748
749 if (mi_8_col_offset >= max_cols || 749 if (mi_8_col_offset >= max_cols ||
750 mi_8_row_offset >= max_rows) 750 mi_8_row_offset >= max_rows)
751 continue; 751 continue;
752 build_y_mask(lfi_n, mip[0], shift_y, lfm); 752 build_y_mask(lfi_n, mip, shift_y, lfm);
753 } 753 }
754 break; 754 break;
755 } 755 }
756 } 756 }
757 } 757 }
758 break; 758 break;
759 } 759 }
760 } 760 }
761 break; 761 break;
762 } 762 }
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 lfl += 1; 898 lfl += 1;
899 mask_16x16 >>= 1; 899 mask_16x16 >>= 1;
900 mask_8x8 >>= 1; 900 mask_8x8 >>= 1;
901 mask_4x4 >>= 1; 901 mask_4x4 >>= 1;
902 mask_4x4_int >>= 1; 902 mask_4x4_int >>= 1;
903 } 903 }
904 } 904 }
905 905
906 static void filter_block_plane_non420(VP9_COMMON *cm, 906 static void filter_block_plane_non420(VP9_COMMON *cm,
907 struct macroblockd_plane *plane, 907 struct macroblockd_plane *plane,
908 MODE_INFO **mi_8x8, 908 MODE_INFO *mi_8x8,
909 int mi_row, int mi_col) { 909 int mi_row, int mi_col) {
910 const int ss_x = plane->subsampling_x; 910 const int ss_x = plane->subsampling_x;
911 const int ss_y = plane->subsampling_y; 911 const int ss_y = plane->subsampling_y;
912 const int row_step = 1 << ss_x; 912 const int row_step = 1 << ss_x;
913 const int col_step = 1 << ss_y; 913 const int col_step = 1 << ss_y;
914 const int row_step_stride = cm->mi_stride * row_step; 914 const int row_step_stride = cm->mi_stride * row_step;
915 struct buf_2d *const dst = &plane->dst; 915 struct buf_2d *const dst = &plane->dst;
916 uint8_t* const dst0 = dst->buf; 916 uint8_t* const dst0 = dst->buf;
917 unsigned int mask_16x16[MI_BLOCK_SIZE] = {0}; 917 unsigned int mask_16x16[MI_BLOCK_SIZE] = {0};
918 unsigned int mask_8x8[MI_BLOCK_SIZE] = {0}; 918 unsigned int mask_8x8[MI_BLOCK_SIZE] = {0};
919 unsigned int mask_4x4[MI_BLOCK_SIZE] = {0}; 919 unsigned int mask_4x4[MI_BLOCK_SIZE] = {0};
920 unsigned int mask_4x4_int[MI_BLOCK_SIZE] = {0}; 920 unsigned int mask_4x4_int[MI_BLOCK_SIZE] = {0};
921 uint8_t lfl[MI_BLOCK_SIZE * MI_BLOCK_SIZE]; 921 uint8_t lfl[MI_BLOCK_SIZE * MI_BLOCK_SIZE];
922 int r, c; 922 int r, c;
923 923
924 for (r = 0; r < MI_BLOCK_SIZE && mi_row + r < cm->mi_rows; r += row_step) { 924 for (r = 0; r < MI_BLOCK_SIZE && mi_row + r < cm->mi_rows; r += row_step) {
925 unsigned int mask_16x16_c = 0; 925 unsigned int mask_16x16_c = 0;
926 unsigned int mask_8x8_c = 0; 926 unsigned int mask_8x8_c = 0;
927 unsigned int mask_4x4_c = 0; 927 unsigned int mask_4x4_c = 0;
928 unsigned int border_mask; 928 unsigned int border_mask;
929 929
930 // Determine the vertical edges that need filtering 930 // Determine the vertical edges that need filtering
931 for (c = 0; c < MI_BLOCK_SIZE && mi_col + c < cm->mi_cols; c += col_step) { 931 for (c = 0; c < MI_BLOCK_SIZE && mi_col + c < cm->mi_cols; c += col_step) {
932 const MODE_INFO *mi = mi_8x8[c]; 932 const MODE_INFO *mi = mi_8x8[c].src_mi;
933 const BLOCK_SIZE sb_type = mi[0].mbmi.sb_type; 933 const BLOCK_SIZE sb_type = mi[0].mbmi.sb_type;
934 const int skip_this = mi[0].mbmi.skip && is_inter_block(&mi[0].mbmi); 934 const int skip_this = mi[0].mbmi.skip && is_inter_block(&mi[0].mbmi);
935 // left edge of current unit is block/partition edge -> no skip 935 // left edge of current unit is block/partition edge -> no skip
936 const int block_edge_left = (num_4x4_blocks_wide_lookup[sb_type] > 1) ? 936 const int block_edge_left = (num_4x4_blocks_wide_lookup[sb_type] > 1) ?
937 !(c & (num_8x8_blocks_wide_lookup[sb_type] - 1)) : 1; 937 !(c & (num_8x8_blocks_wide_lookup[sb_type] - 1)) : 1;
938 const int skip_this_c = skip_this && !block_edge_left; 938 const int skip_this_c = skip_this && !block_edge_left;
939 // top edge of current unit is block/partition edge -> no skip 939 // top edge of current unit is block/partition edge -> no skip
940 const int block_edge_above = (num_4x4_blocks_high_lookup[sb_type] > 1) ? 940 const int block_edge_above = (num_4x4_blocks_high_lookup[sb_type] > 1) ?
941 !(r & (num_8x8_blocks_high_lookup[sb_type] - 1)) : 1; 941 !(r & (num_8x8_blocks_high_lookup[sb_type] - 1)) : 1;
942 const int skip_this_r = skip_this && !block_edge_above; 942 const int skip_this_r = skip_this && !block_edge_above;
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 1186
1187 dst->buf += 8 * dst->stride; 1187 dst->buf += 8 * dst->stride;
1188 mask_16x16 >>= 4; 1188 mask_16x16 >>= 4;
1189 mask_8x8 >>= 4; 1189 mask_8x8 >>= 4;
1190 mask_4x4 >>= 4; 1190 mask_4x4 >>= 4;
1191 mask_4x4_int >>= 4; 1191 mask_4x4_int >>= 4;
1192 } 1192 }
1193 } 1193 }
1194 } 1194 }
1195 1195
1196 void vp9_loop_filter_rows(const YV12_BUFFER_CONFIG *frame_buffer, 1196 void vp9_loop_filter_rows(YV12_BUFFER_CONFIG *frame_buffer,
1197 VP9_COMMON *cm, 1197 VP9_COMMON *cm,
1198 struct macroblockd_plane planes[MAX_MB_PLANE], 1198 struct macroblockd_plane planes[MAX_MB_PLANE],
1199 int start, int stop, int y_only) { 1199 int start, int stop, int y_only) {
1200 const int num_planes = y_only ? 1 : MAX_MB_PLANE; 1200 const int num_planes = y_only ? 1 : MAX_MB_PLANE;
1201 const int use_420 = y_only || (planes[1].subsampling_y == 1 && 1201 const int use_420 = y_only || (planes[1].subsampling_y == 1 &&
1202 planes[1].subsampling_x == 1); 1202 planes[1].subsampling_x == 1);
1203 LOOP_FILTER_MASK lfm; 1203 LOOP_FILTER_MASK lfm;
1204 int mi_row, mi_col; 1204 int mi_row, mi_col;
1205 1205
1206 for (mi_row = start; mi_row < stop; mi_row += MI_BLOCK_SIZE) { 1206 for (mi_row = start; mi_row < stop; mi_row += MI_BLOCK_SIZE) {
1207 MODE_INFO **mi = cm->mi_grid_visible + mi_row * cm->mi_stride; 1207 MODE_INFO *mi = cm->mi + mi_row * cm->mi_stride;
1208 1208
1209 for (mi_col = 0; mi_col < cm->mi_cols; mi_col += MI_BLOCK_SIZE) { 1209 for (mi_col = 0; mi_col < cm->mi_cols; mi_col += MI_BLOCK_SIZE) {
1210 int plane; 1210 int plane;
1211 1211
1212 vp9_setup_dst_planes(planes, frame_buffer, mi_row, mi_col); 1212 vp9_setup_dst_planes(planes, frame_buffer, mi_row, mi_col);
1213 1213
1214 // TODO(JBB): Make setup_mask work for non 420. 1214 // TODO(JBB): Make setup_mask work for non 420.
1215 if (use_420) 1215 if (use_420)
1216 vp9_setup_mask(cm, mi_row, mi_col, mi + mi_col, cm->mi_stride, 1216 vp9_setup_mask(cm, mi_row, mi_col, mi + mi_col, cm->mi_stride,
1217 &lfm); 1217 &lfm);
(...skipping 22 matching lines...) Expand all
1240 start_mi_row &= 0xfffffff8; 1240 start_mi_row &= 0xfffffff8;
1241 mi_rows_to_filter = MAX(cm->mi_rows / 8, 8); 1241 mi_rows_to_filter = MAX(cm->mi_rows / 8, 8);
1242 } 1242 }
1243 end_mi_row = start_mi_row + mi_rows_to_filter; 1243 end_mi_row = start_mi_row + mi_rows_to_filter;
1244 vp9_loop_filter_frame_init(cm, frame_filter_level); 1244 vp9_loop_filter_frame_init(cm, frame_filter_level);
1245 vp9_loop_filter_rows(frame, cm, xd->plane, 1245 vp9_loop_filter_rows(frame, cm, xd->plane,
1246 start_mi_row, end_mi_row, 1246 start_mi_row, end_mi_row,
1247 y_only); 1247 y_only);
1248 } 1248 }
1249 1249
1250 int vp9_loop_filter_worker(void *arg1, void *arg2) { 1250 int vp9_loop_filter_worker(LFWorkerData *const lf_data, void *unused) {
1251 LFWorkerData *const lf_data = (LFWorkerData*)arg1; 1251 (void)unused;
1252 (void)arg2;
1253 vp9_loop_filter_rows(lf_data->frame_buffer, lf_data->cm, lf_data->planes, 1252 vp9_loop_filter_rows(lf_data->frame_buffer, lf_data->cm, lf_data->planes,
1254 lf_data->start, lf_data->stop, lf_data->y_only); 1253 lf_data->start, lf_data->stop, lf_data->y_only);
1255 return 1; 1254 return 1;
1256 } 1255 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/common/vp9_loopfilter.h ('k') | source/libvpx/vp9/common/vp9_mvref_common.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698