OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |