732
733
#define IDCT_MESSAGE "iDCT with multiply"
734
#define TIMES_16382(u) ((u)? 16382 * (u):0)
735
#define TIMES_23168(u) ((u)? 23168 * (u):0)
736
#define TIMES_30270(u) ((u)? 30270 * (u):0)
737
#define TIMES_41986(u) ((u)? 41986 * (u):0)
738
#define TIMES_35594(u) ((u)? 35594 * (u):0)
739
#define TIMES_23783(u) ((u)? 23783 * (u):0)
740
#define TIMES_8351(u) ((u)? 8351 * (u):0)
741
#define TIMES_17391(u) ((u)? 17391 * (u):0)
742
#define TIMES_14743(u) ((u)? 14743 * (u):0)
743
#define TIMES_9851(u) ((u)? 9851 * (u):0)
744
#define TIMES_3459(u) ((u)? 3459 * (u):0)
745
#define TIMES_32134(u) ((u)? 32134 * (u):0)
746
#define TIMES_27242(u) ((u)? 27242 * (u):0)
747
#define TIMES_18202(u) ((u)? 18202 * (u):0)
748
#define TIMES_6392(u) ((u)? 6392 * (u):0)
749
#define TIMES_39550(u) ((u)? 39550 * (u):0)
750
#define TIMES_6785(u) ((u)? 6785 * (u):0)
751
#define TIMES_12538(u) ((u)? 12538 * (u):0)
735
#define TIMES_16382(u) ((u) ? 16382 * (u) : 0)
736
#define TIMES_23168(u) ((u) ? 23168 * (u) : 0)
737
#define TIMES_30270(u) ((u) ? 30270 * (u) : 0)
738
#define TIMES_41986(u) ((u) ? 41986 * (u) : 0)
739
#define TIMES_35594(u) ((u) ? 35594 * (u) : 0)
740
#define TIMES_23783(u) ((u) ? 23783 * (u) : 0)
741
#define TIMES_8351(u) ((u) ? 8351 * (u) : 0)
742
#define TIMES_17391(u) ((u) ? 17391 * (u) : 0)
743
#define TIMES_14743(u) ((u) ? 14743 * (u) : 0)
744
#define TIMES_9851(u) ((u) ? 9851 * (u) : 0)
745
#define TIMES_3459(u) ((u) ? 3459 * (u) : 0)
746
#define TIMES_32134(u) ((u) ? 32134 * (u) : 0)
747
#define TIMES_27242(u) ((u) ? 27242 * (u) : 0)
748
#define TIMES_18202(u) ((u) ? 18202 * (u) : 0)
749
#define TIMES_6392(u) ((u) ? 6392 * (u) : 0)
750
#define TIMES_39550(u) ((u) ? 39550 * (u) : 0)
751
#define TIMES_6785(u) ((u) ? 6785 * (u) : 0)
752
#define TIMES_12538(u) ((u) ? 12538 * (u) : 0)
755
756
#define IDCT_MESSAGE "iDCT with shift"
757
#define TIMES_16382(u) ( (u)? x=(u) , (x<<14) - (x<<1) :0 )
758
#define TIMES_23168(u) ( (u)? x=(u) , (x<<14) + (x<<12) + (x<<11) + (x<<9) :0 )
759
#define TIMES_30270(u) ( (u)? x=(u) , (x<<15) - (x<<11) :0 )
760
#define TIMES_41986(u) ( (u)? x=(u) , (x<<15) + (x<<13) + (x<<10) :0 )
761
#define TIMES_35594(u) ( (u)? x=(u) , (x<<15) + (x<<11) + (x<<9) + (x<<8) :0 )
762
#define TIMES_23783(u) ( (u)? x=(u) , (x<<14) + (x<<13) - (x<<9) - (x<<8) :0 )
763
#define TIMES_8351(u) ( (u)? x=(u) , (x<<13) :0 )
764
#define TIMES_17391(u) ( (u)? x=(u) , (x<<14) + (x<<10) :0 )
765
#define TIMES_14743(u) ( (u)? x=(u) , (x<<14) - (x<<10) - (x<<9) :0 )
766
#define TIMES_9851(u) ( (u)? x=(u) , (x<<13) + (x<<10) + (x<<9) :0 )
767
#define TIMES_3459(u) ( (u)? x=(u) , (x<<12) - (x<<9) :0 )
768
#define TIMES_32134(u) ( (u)? x=(u) , (x<<15) - (x<<9) :0 )
769
#define TIMES_27242(u) ( (u)? x=(u) , (x<<14) + (x<<13) + (x<<11) + (x<<9) :0 )
770
#define TIMES_18202(u) ( (u)? x=(u) , (x<<14) + (x<<11) - (x<<8) :0 )
771
#define TIMES_6392(u) ( (u)? x=(u) , (x<<13) - (x<<11) + (x<<8) :0 )
772
#define TIMES_39550(u) ( (u)? x=(u) , (x<<15) + (x<<12) + (x<<11) + (x<<9) :0 )
773
#define TIMES_6785(u) ( (u)? x=(u) , (x<<12) + (x<<11) + (x<<9) :0 )
774
#define TIMES_12538(u) ( (u)? x=(u) , (x<<13) + (x<<12) + (x<<8) :0 )
758
#define TIMES_16382(u) ((u) ? x = (u), (x << 14) - (x << 1) : 0)
759
#define TIMES_23168(u) ((u) ? x = (u), (x << 14) + (x << 12) + (x << 11) + (x << 9) : 0)
760
#define TIMES_30270(u) ((u) ? x = (u), (x << 15) - (x << 11) : 0)
761
#define TIMES_41986(u) ((u) ? x = (u), (x << 15) + (x << 13) + (x << 10) : 0)
762
#define TIMES_35594(u) ((u) ? x = (u), (x << 15) + (x << 11) + (x << 9) + (x << 8) : 0)
763
#define TIMES_23783(u) ((u) ? x = (u), (x << 14) + (x << 13) - (x << 9) - (x << 8) : 0)
764
#define TIMES_8351(u) ((u) ? x = (u), (x << 13) : 0)
765
#define TIMES_17391(u) ((u) ? x = (u), (x << 14) + (x << 10) : 0)
766
#define TIMES_14743(u) ((u) ? x = (u), (x << 14) - (x << 10) - (x << 9) : 0)
767
#define TIMES_9851(u) ((u) ? x = (u), (x << 13) + (x << 10) + (x << 9) : 0)
768
#define TIMES_3459(u) ((u) ? x = (u), (x << 12) - (x << 9) : 0)
769
#define TIMES_32134(u) ((u) ? x = (u), (x << 15) - (x << 9) : 0)
770
#define TIMES_27242(u) ((u) ? x = (u), (x << 14) + (x << 13) + (x << 11) + (x << 9) : 0)
771
#define TIMES_18202(u) ((u) ? x = (u), (x << 14) + (x << 11) - (x << 8) : 0)
772
#define TIMES_6392(u) ((u) ? x = (u), (x << 13) - (x << 11) + (x << 8) : 0)
773
#define TIMES_39550(u) ((u) ? x = (u), (x << 15) + (x << 12) + (x << 11) + (x << 9) : 0)
774
#define TIMES_6785(u) ((u) ? x = (u), (x << 12) + (x << 11) + (x << 9) : 0)
775
#define TIMES_12538(u) ((u) ? x = (u), (x << 13) + (x << 12) + (x << 8) : 0)
777
778
* The variables C0, C4, C16 and C20 can also be removed from the algorithm
785
786
DCT_8x4(int *coeff, unsigned char *out)
786
/* pre: coeff == coefficients
787
post: coeff != coefficients
788
** DO NOT ASSUME coeff TO BE THE SAME BEFORE AND AFTER CALLING THIS FUNCTION!
787
/* pre: coeff == coefficients
788
post: coeff != coefficients
789
** DO NOT ASSUME coeff TO BE THE SAME BEFORE AND AFTER CALLING THIS FUNCTION!
791
register int base,val1,val2,val3;
794
int C2_18,C6_22,C1_17,C3_19,C5_21,C7_23;
792
register int base, val1, val2, val3;
794
int C0, C4, C16, C20;
795
int C2_18, C6_22, C1_17, C3_19, C5_21, C7_23;
796
797
#ifdef APPROXIMATE_MUL_BY_SHIFT
805
coeff[0]=TIMES_23168(coeff[0]);
806
coeff[4]=TIMES_23168(coeff[4]);
807
coeff[16]=TIMES_23168(coeff[16]);
808
coeff[20]=TIMES_23168(coeff[20]);
810
C2_18 = coeff[2]+coeff[18];
811
C6_22 = coeff[6]+coeff[22];
812
C1_17 = coeff[1]+coeff[17];
813
C3_19 = coeff[3]+coeff[19];
814
C5_21 = coeff[5]+coeff[21];
815
C7_23 = coeff[7]+coeff[23];
806
coeff[0] = TIMES_23168(coeff[0]);
807
coeff[4] = TIMES_23168(coeff[4]);
808
coeff[16] = TIMES_23168(coeff[16]);
809
coeff[20] = TIMES_23168(coeff[20]);
811
C2_18 = coeff[2] + coeff[18];
812
C6_22 = coeff[6] + coeff[22];
813
C1_17 = coeff[1] + coeff[17];
814
C3_19 = coeff[3] + coeff[19];
815
C5_21 = coeff[5] + coeff[21];
816
C7_23 = coeff[7] + coeff[23];
819
820
base = 0x1000000;
820
base += coeff[0]+coeff[4]+coeff[16]+coeff[20];
821
base += coeff[0] + coeff[4] + coeff[16] + coeff[20];
821
822
base += TIMES_30270(C2_18);
822
823
base += TIMES_12538(C6_22);
836
837
val2 += TIMES_6392(C7_23);
838
839
val3 = TIMES_39550(coeff[10]);
839
val3 += TIMES_16382(coeff[14]+coeff[26]);
840
val3 += TIMES_16382(coeff[14] + coeff[26]);
840
841
val3 += TIMES_6785(coeff[30]);
841
val3 += TIMES_30270(coeff[8]+coeff[12]);
842
val3 += TIMES_12538(coeff[24]+coeff[28]);
844
t=(base + val1 + val2 + val3) >> 17;
845
out[0]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
846
t=(base - val1 - val2 + val3 - C4 - C20) >> 17;
847
out[7]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
848
t=(base - val1 + val2 - val3 - C16- C20) >> 17;
849
out[24]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
850
t=(base + val1 - val2 - val3 - C4 - C16 - C20) >> 17;
851
out[31]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
842
val3 += TIMES_30270(coeff[8] + coeff[12]);
843
val3 += TIMES_12538(coeff[24] + coeff[28]);
845
t = (base + val1 + val2 + val3) >> 17;
846
out[0] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
847
t = (base - val1 - val2 + val3 - C4 - C20) >> 17;
848
out[7] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
849
t = (base - val1 + val2 - val3 - C16 - C20) >> 17;
850
out[24] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
851
t = (base + val1 - val2 - val3 - C4 - C16 - C20) >> 17;
852
out[31] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
855
856
base = 0x1000000;
856
base += coeff[0]-coeff[4]+coeff[16]-coeff[20];
857
base += coeff[0] - coeff[4] + coeff[16] - coeff[20];
857
858
base += TIMES_12538(C2_18);
858
859
base -= TIMES_30270(C6_22);
871
872
val2 -= TIMES_32134(C5_21);
872
873
val2 -= TIMES_18202(C7_23);
874
val3 = TIMES_16382(coeff[10]-coeff[30]);
875
val3 = TIMES_16382(coeff[10] - coeff[30]);
875
876
val3 -= TIMES_39550(coeff[14]);
876
877
val3 += TIMES_6785(coeff[26]);
877
val3 += TIMES_12538(coeff[24]-coeff[28]);
878
val3 += TIMES_30270(coeff[8]-coeff[12]);
880
t=(base + val1 + val2 + val3 + C4 + C20) >> 17;
881
out[1]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
882
t=(base - val1 - val2 + val3) >> 17;
883
out[6]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
884
t=(base - val1 + val2 - val3 + C4 - C16 + C20) >> 17;
885
out[25]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
886
t=(base + val1 - val2 - val3 + C20) >> 17;
887
out[30]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
878
val3 += TIMES_12538(coeff[24] - coeff[28]);
879
val3 += TIMES_30270(coeff[8] - coeff[12]);
881
t = (base + val1 + val2 + val3 + C4 + C20) >> 17;
882
out[1] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
883
t = (base - val1 - val2 + val3) >> 17;
884
out[6] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
885
t = (base - val1 + val2 - val3 + C4 - C16 + C20) >> 17;
886
out[25] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
887
t = (base + val1 - val2 - val3 + C20) >> 17;
888
out[30] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
891
892
base = 0x1000000;
892
893
base += coeff[0] - coeff[4] + coeff[16] - coeff[20];
913
914
val3 += TIMES_12538(coeff[24] - coeff[28]);
914
915
val3 += TIMES_30270(coeff[8] - coeff[12]);
916
t=(base + val1 + val2 + val3) >> 17;
917
out[2]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
918
t=(base - val1 - val2 + val3) >> 17;
919
out[5]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
920
t=(base - val1 + val2 - val3 - C16) >> 17;
921
out[26]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
922
t=(base + val1 - val2 - val3 + C4 - C16 + C20) >> 17;
923
out[29]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
917
t = (base + val1 + val2 + val3) >> 17;
918
out[2] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
919
t = (base - val1 - val2 + val3) >> 17;
920
out[5] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
921
t = (base - val1 + val2 - val3 - C16) >> 17;
922
out[26] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
923
t = (base + val1 - val2 - val3 + C4 - C16 + C20) >> 17;
924
out[29] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
927
928
base = 0x1000000;
928
929
base += coeff[0] + coeff[4] + coeff[16] + coeff[20];
949
950
tmp1 = TIMES_32134(C7_23);
950
951
tmp2 = TIMES_41986(coeff[15]) + TIMES_17391(coeff[31]);
952
t=(base + val1 + val2 + val3 - tmp1 - tmp2 - C4 - C20) >> 17;
953
out[3]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
954
t=(base - val1 - val2 + val3) >> 17;
955
out[4]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
956
t=(base - val1 + val2 - val3 - tmp1 + tmp2) >> 17;
957
out[27]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
958
t=(base + val1 - val2 - val3 - C16 - C20) >> 17;
959
out[28]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
953
t = (base + val1 + val2 + val3 - tmp1 - tmp2 - C4 - C20) >> 17;
954
out[3] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
955
t = (base - val1 - val2 + val3) >> 17;
956
out[4] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
957
t = (base - val1 + val2 - val3 - tmp1 + tmp2) >> 17;
958
out[27] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
959
t = (base + val1 - val2 - val3 - C16 - C20) >> 17;
960
out[28] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
962
963
C2_18 = coeff[2] - coeff[18];
963
964
C6_22 = coeff[6] - coeff[22];
964
965
C1_17 = coeff[1] - coeff[17];
990
991
val3 = TIMES_16382(coeff[10] - coeff[30]);
991
992
val3 += TIMES_6785(coeff[14]);
992
993
val3 -= TIMES_39550(coeff[26]);
993
val3 -=TIMES_30270(coeff[24] + coeff[28]);
994
val3 +=TIMES_12538(coeff[8] + coeff[12]);
996
t=(base + val1 + val2 + val3) >> 17;
997
out[8]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
998
t=(base - val1 - val2 + val3 - C4 + C16 + C20) >> 17;
999
out[15]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1000
t=(base - val1 + val2 - val3) >> 17;
1001
out[16]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1002
t=(base + val1 - val2 - val3 - C4 + C20) >> 17;
1003
out[23]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
994
val3 -= TIMES_30270(coeff[24] + coeff[28]);
995
val3 += TIMES_12538(coeff[8] + coeff[12]);
997
t = (base + val1 + val2 + val3) >> 17;
998
out[8] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
999
t = (base - val1 - val2 + val3 - C4 + C16 + C20) >> 17;
1000
out[15] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1001
t = (base - val1 + val2 - val3) >> 17;
1002
out[16] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1003
t = (base + val1 - val2 - val3 - C4 + C20) >> 17;
1004
out[23] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1007
1008
base = 0x1000000;
1008
1009
base += coeff[0] - coeff[4] - coeff[16] + coeff[20];
1029
1030
val3 += TIMES_12538(coeff[8] - coeff[12]);
1030
1031
val3 -= TIMES_30270(coeff[24] - coeff[28]);
1032
t=(base + val1 + val2 + val3 + C4 + C16 - C20) >> 17;
1033
out[9]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1034
t=(base - val1 - val2 + val3 + C16) >> 17;
1035
out[14]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1036
t=(base - val1 + val2 - val3 + C4) >> 17;
1037
out[17]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1038
t=(base + val1 - val2 - val3) >> 17;
1039
out[22]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1033
t = (base + val1 + val2 + val3 + C4 + C16 - C20) >> 17;
1034
out[9] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1035
t = (base - val1 - val2 + val3 + C16) >> 17;
1036
out[14] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1037
t = (base - val1 + val2 - val3 + C4) >> 17;
1038
out[17] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1039
t = (base + val1 - val2 - val3) >> 17;
1040
out[22] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1043
1044
base = 0x1000000;
1044
1045
base += coeff[0] - coeff[4] - coeff[16] + coeff[20];
1060
1061
val2 += TIMES_27242(C7_23);
1062
1063
val3 = -TIMES_6785(coeff[10]);
1063
val3 += TIMES_16382(coeff[14]+coeff[26]);
1064
val3 += TIMES_16382(coeff[14] + coeff[26]);
1064
1065
val3 -= TIMES_39550(coeff[30]);
1065
val3 += TIMES_12538(coeff[8]-coeff[12]);
1066
val3 -= TIMES_30270(coeff[24]-coeff[28]);
1068
t=(base + val1 + val2 + val3) >> 17;
1069
out[10]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1070
t=(base - val1 - val2 + val3 + C4 + C16 - C20) >> 17;
1071
out[13]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1072
t=(base - val1 + val2 - val3) >> 17;
1073
out[18]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1074
t=(base + val1 - val2 - val3 + C4) >> 17;
1075
out[21]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1066
val3 += TIMES_12538(coeff[8] - coeff[12]);
1067
val3 -= TIMES_30270(coeff[24] - coeff[28]);
1069
t = (base + val1 + val2 + val3) >> 17;
1070
out[10] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1071
t = (base - val1 - val2 + val3 + C4 + C16 - C20) >> 17;
1072
out[13] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1073
t = (base - val1 + val2 - val3) >> 17;
1074
out[18] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1075
t = (base + val1 - val2 - val3 + C4) >> 17;
1076
out[21] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1079
1080
base = 0x1000000;
1080
base += coeff[0]+coeff[4]-coeff[16]-coeff[20];
1081
base += coeff[0] + coeff[4] - coeff[16] - coeff[20];
1081
1082
base -= TIMES_30270(C2_18);
1082
1083
base -= TIMES_12538(C6_22);
1095
1096
val3 = -TIMES_16382(coeff[10] - coeff[30]);
1096
1097
val3 -= TIMES_6785(coeff[14]);
1097
1098
val3 += TIMES_39550(coeff[26]);
1098
val3 -= TIMES_30270(coeff[24]+coeff[28]);
1099
val3 += TIMES_12538(coeff[8]+coeff[12]);
1099
val3 -= TIMES_30270(coeff[24] + coeff[28]);
1100
val3 += TIMES_12538(coeff[8] + coeff[12]);
1101
1102
tmp1 = TIMES_32134(C7_23);
1102
1103
tmp2 = -TIMES_17391(coeff[15]) + TIMES_41986(coeff[31]);
1104
t=(base + val1 + val2 + val3 - tmp1 + tmp2 + C16 + C20) >> 17;
1105
out[11]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1106
t=(base - val1 - val2 + val3 + C16 + C20) >> 17;
1107
out[12]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1108
t=(base - val1 + val2 - val3 - tmp1 - tmp2 - C4 + C20) >> 17;
1109
out[19]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1110
t=(base + val1 - val2 - val3) >> 17;
1111
out[20]= t&0xFFFFFF00? t<0?0:255 : (unsigned char)t;
1105
t = (base + val1 + val2 + val3 - tmp1 + tmp2 + C16 + C20) >> 17;
1106
out[11] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1107
t = (base - val1 - val2 + val3 + C16 + C20) >> 17;
1108
out[12] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1109
t = (base - val1 + val2 - val3 - tmp1 - tmp2 - C4 + C20) >> 17;
1110
out[19] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1111
t = (base + val1 - val2 - val3) >> 17;
1112
out[20] = t & 0xFFFFFF00 ? t < 0 ? 0 : 255 : (unsigned char)t;
1114
1115
#undef TIMES_16382
1429
1428
int main(int argc, char *argv[])
1431
int width, height, yvu, src_size, dest_size;
1432
unsigned char src_buf[200000];
1433
unsigned char dest_buf[500000];
1436
if (v4lconvert_helper_read(STDIN_FILENO, &width, sizeof(int), argv[0]))
1437
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1439
if (v4lconvert_helper_read(STDIN_FILENO, &height, sizeof(int), argv[0]))
1440
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1442
if (v4lconvert_helper_read(STDIN_FILENO, &yvu, sizeof(int), argv[0]))
1443
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1445
if (v4lconvert_helper_read(STDIN_FILENO, &src_size, sizeof(int), argv[0]))
1446
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1448
if (src_size > sizeof(src_buf)) {
1449
fprintf(stderr, "%s: error: src_buf too small, need: %d\n",
1454
if (v4lconvert_helper_read(STDIN_FILENO, src_buf, src_size, argv[0]))
1455
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1458
dest_size = width * height * 3 / 2;
1459
if (dest_size > sizeof(dest_buf)) {
1460
fprintf(stderr, "%s: error: dest_buf too small, need: %d\n",
1461
argv[0], dest_size);
1463
} else if (v4lconvert_ov518_to_yuv420(src_buf, dest_buf, width, height,
1467
if (v4lconvert_helper_write(STDOUT_FILENO, &dest_size, sizeof(int),
1469
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1471
if (dest_size == -1)
1474
if (v4lconvert_helper_write(STDOUT_FILENO, dest_buf, dest_size, argv[0]))
1475
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1430
int width, height, yvu, src_size, dest_size;
1431
unsigned char src_buf[200000];
1432
unsigned char dest_buf[500000];
1435
if (v4lconvert_helper_read(STDIN_FILENO, &width, sizeof(int), argv[0]))
1436
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1438
if (v4lconvert_helper_read(STDIN_FILENO, &height, sizeof(int), argv[0]))
1439
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1441
if (v4lconvert_helper_read(STDIN_FILENO, &yvu, sizeof(int), argv[0]))
1442
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1444
if (v4lconvert_helper_read(STDIN_FILENO, &src_size, sizeof(int), argv[0]))
1445
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1447
if (src_size > sizeof(src_buf)) {
1448
fprintf(stderr, "%s: error: src_buf too small, need: %d\n",
1453
if (v4lconvert_helper_read(STDIN_FILENO, src_buf, src_size, argv[0]))
1454
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1457
dest_size = width * height * 3 / 2;
1458
if (dest_size > sizeof(dest_buf)) {
1459
fprintf(stderr, "%s: error: dest_buf too small, need: %d\n",
1460
argv[0], dest_size);
1462
} else if (v4lconvert_ov518_to_yuv420(src_buf, dest_buf, width, height,
1466
if (v4lconvert_helper_write(STDOUT_FILENO, &dest_size, sizeof(int),
1468
return 1; /* Erm, no way to recover without loosing sync with libv4l */
1470
if (dest_size == -1)
1473
if (v4lconvert_helper_write(STDOUT_FILENO, dest_buf, dest_size, argv[0]))
1474
return 1; /* Erm, no way to recover without loosing sync with libv4l */