JPEG compressor
Dependencies: SDL_lib SX1276Lib mbed
encoder.cpp@2:f256eebcade8, 2017-01-11 (annotated)
- Committer:
- miruga27
- Date:
- Wed Jan 11 20:20:00 2017 +0000
- Revision:
- 2:f256eebcade8
- Parent:
- 1:f0c646dfe574
JPEG Compressor and SX1276 transmitter
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
miruga27 | 1:f0c646dfe574 | 1 | |
miruga27 | 0:1076a8b67c6c | 2 | //Author: Miguel Ruiz García |
miruga27 | 0:1076a8b67c6c | 3 | //Company: University of Cantabria. 2016 |
miruga27 | 0:1076a8b67c6c | 4 | //mail: mrg47@alumnos.unican.es |
miruga27 | 0:1076a8b67c6c | 5 | |
miruga27 | 0:1076a8b67c6c | 6 | #include "mbed.h" |
miruga27 | 0:1076a8b67c6c | 7 | #include "stdio.h" |
miruga27 | 0:1076a8b67c6c | 8 | #include <math.h> |
miruga27 | 0:1076a8b67c6c | 9 | #include "SDL_lib/SDL.h" |
miruga27 | 0:1076a8b67c6c | 10 | #include "functions.h" |
miruga27 | 2:f256eebcade8 | 11 | #include "lora2.h" |
miruga27 | 2:f256eebcade8 | 12 | //#include "sx1276-hal.h" |
miruga27 | 2:f256eebcade8 | 13 | //#include "debug.h" |
miruga27 | 1:f0c646dfe574 | 14 | #include "lora_tansc.h" |
miruga27 | 0:1076a8b67c6c | 15 | |
miruga27 | 2:f256eebcade8 | 16 | //DigitalOut led(LED1); |
miruga27 | 0:1076a8b67c6c | 17 | DigitalIn button(PC_13); |
miruga27 | 1:f0c646dfe574 | 18 | |
miruga27 | 2:f256eebcade8 | 19 | //Serial uart(PA_2, PA_3); |
miruga27 | 1:f0c646dfe574 | 20 | |
miruga27 | 0:1076a8b67c6c | 21 | #define BPS 128000 |
miruga27 | 0:1076a8b67c6c | 22 | #define BITS 8 |
miruga27 | 0:1076a8b67c6c | 23 | #define STOP_BITS 1 |
miruga27 | 0:1076a8b67c6c | 24 | |
miruga27 | 0:1076a8b67c6c | 25 | |
miruga27 | 1:f0c646dfe574 | 26 | int main(int argc, char *argv[]){ |
miruga27 | 1:f0c646dfe574 | 27 | Serial pc(USBTX, USBRX); |
miruga27 | 0:1076a8b67c6c | 28 | pc.baud(BPS); |
miruga27 | 0:1076a8b67c6c | 29 | pc.format (BITS,SerialBase::None, STOP_BITS) ; |
miruga27 | 2:f256eebcade8 | 30 | |
miruga27 | 2:f256eebcade8 | 31 | /*led=1; |
miruga27 | 0:1076a8b67c6c | 32 | |
miruga27 | 2:f256eebcade8 | 33 | wait (2); |
miruga27 | 2:f256eebcade8 | 34 | led=!led;*/ |
miruga27 | 1:f0c646dfe574 | 35 | short int m[HEIGHT][WIDTH][3]; |
miruga27 | 0:1076a8b67c6c | 36 | int i,j,veces=0; |
miruga27 | 2:f256eebcade8 | 37 | //debug( "start of transmission...\r\n" ); |
miruga27 | 2:f256eebcade8 | 38 | for(veces=0;veces<30;veces++){ |
miruga27 | 1:f0c646dfe574 | 39 | |
miruga27 | 2:f256eebcade8 | 40 | //myled=0; |
miruga27 | 1:f0c646dfe574 | 41 | for(i=0;i<8;i++){ |
miruga27 | 1:f0c646dfe574 | 42 | for(j=0;j<320;j++){ |
miruga27 | 0:1076a8b67c6c | 43 | |
miruga27 | 0:1076a8b67c6c | 44 | while(!pc.readable()); |
miruga27 | 1:f0c646dfe574 | 45 | m[i][j][0]=(char)pc.getc(); |
miruga27 | 0:1076a8b67c6c | 46 | |
miruga27 | 0:1076a8b67c6c | 47 | while(!pc.readable()); |
miruga27 | 1:f0c646dfe574 | 48 | m[i][j][1]=(char)pc.getc(); |
miruga27 | 0:1076a8b67c6c | 49 | while(!pc.readable()); |
miruga27 | 1:f0c646dfe574 | 50 | m[i][j][2]=(char)pc.getc(); |
miruga27 | 0:1076a8b67c6c | 51 | |
miruga27 | 0:1076a8b67c6c | 52 | } |
miruga27 | 0:1076a8b67c6c | 53 | } |
miruga27 | 2:f256eebcade8 | 54 | |
miruga27 | 0:1076a8b67c6c | 55 | |
miruga27 | 2:f256eebcade8 | 56 | //myled=1; |
miruga27 | 0:1076a8b67c6c | 57 | |
miruga27 | 0:1076a8b67c6c | 58 | |
miruga27 | 0:1076a8b67c6c | 59 | rgb_to_yuv(m); |
miruga27 | 0:1076a8b67c6c | 60 | |
miruga27 | 0:1076a8b67c6c | 61 | |
miruga27 | 2:f256eebcade8 | 62 | //debug( "DCT...\r\n" ); |
miruga27 | 1:f0c646dfe574 | 63 | int mat[8][8][3]; |
miruga27 | 1:f0c646dfe574 | 64 | for(i=0;i<HEIGHT;i+=8){ |
miruga27 | 1:f0c646dfe574 | 65 | for(j=0;j<WIDTH;j+=8){ |
miruga27 | 0:1076a8b67c6c | 66 | |
miruga27 | 0:1076a8b67c6c | 67 | int k=0,l=0; |
miruga27 | 0:1076a8b67c6c | 68 | |
miruga27 | 0:1076a8b67c6c | 69 | for(k=i;k<i+8;k++){ |
miruga27 | 0:1076a8b67c6c | 70 | |
miruga27 | 0:1076a8b67c6c | 71 | for(l=j;l<j+8;l++){ |
miruga27 | 0:1076a8b67c6c | 72 | |
miruga27 | 0:1076a8b67c6c | 73 | |
miruga27 | 1:f0c646dfe574 | 74 | mat[k-i][l-j][0]=m[k][l][0]; |
miruga27 | 1:f0c646dfe574 | 75 | mat[k-i][l-j][1]=m[k][l][1]; |
miruga27 | 1:f0c646dfe574 | 76 | mat[k-i][l-j][2]=m[k][l][2]; |
miruga27 | 0:1076a8b67c6c | 77 | |
miruga27 | 0:1076a8b67c6c | 78 | } |
miruga27 | 0:1076a8b67c6c | 79 | |
miruga27 | 0:1076a8b67c6c | 80 | |
miruga27 | 0:1076a8b67c6c | 81 | } |
miruga27 | 1:f0c646dfe574 | 82 | |
miruga27 | 1:f0c646dfe574 | 83 | DCT(mat,m,i,j);// 'i' 'j' índices de los pixeles en x e y del macrobloque |
miruga27 | 2:f256eebcade8 | 84 | |
miruga27 | 0:1076a8b67c6c | 85 | } |
miruga27 | 0:1076a8b67c6c | 86 | |
miruga27 | 0:1076a8b67c6c | 87 | } |
miruga27 | 0:1076a8b67c6c | 88 | |
miruga27 | 2:f256eebcade8 | 89 | //debug( "CUANTIZAR...\r\n" ); |
miruga27 | 0:1076a8b67c6c | 90 | cuantizador(m); |
miruga27 | 0:1076a8b67c6c | 91 | |
miruga27 | 1:f0c646dfe574 | 92 | |
miruga27 | 0:1076a8b67c6c | 93 | short int *matriz =(short int *) malloc(sizeof(short int)*HEIGHT*WIDTH*3); |
miruga27 | 2:f256eebcade8 | 94 | //debug( "zig-zag...\r\n" ); |
miruga27 | 1:f0c646dfe574 | 95 | zig_zag(m,matriz);//OJO!!!!! |
miruga27 | 2:f256eebcade8 | 96 | //debug( "rlc...\r\n" ); |
miruga27 | 2:f256eebcade8 | 97 | short int acumulador[3]={0x0000,0x0000,0x0000}; |
miruga27 | 1:f0c646dfe574 | 98 | RLC(matriz,acumulador); |
miruga27 | 0:1076a8b67c6c | 99 | |
miruga27 | 1:f0c646dfe574 | 100 | |
miruga27 | 1:f0c646dfe574 | 101 | short int * temp1= (short int *) malloc(sizeof(short int)*acumulador[0]);//reserva de memoria exacta para cada una de las componenetes y u v |
miruga27 | 2:f256eebcade8 | 102 | short int * temp2= (short int *) malloc(sizeof(short int)*acumulador[1]);//U |
miruga27 | 2:f256eebcade8 | 103 | short int * temp3= (short int *) malloc(sizeof(short int)*acumulador[2]);//V |
miruga27 | 2:f256eebcade8 | 104 | |
miruga27 | 1:f0c646dfe574 | 105 | RLC2(matriz,temp1,temp2,temp3); |
miruga27 | 1:f0c646dfe574 | 106 | free(matriz); |
miruga27 | 1:f0c646dfe574 | 107 | |
miruga27 | 2:f256eebcade8 | 108 | /*acumulador[0]=20; |
miruga27 | 2:f256eebcade8 | 109 | acumulador[1]=20; |
miruga27 | 2:f256eebcade8 | 110 | acumulador[2]=20;*/ |
miruga27 | 1:f0c646dfe574 | 111 | lora(temp1,acumulador[0],temp2,acumulador[1],temp3,acumulador[2]); |
miruga27 | 2:f256eebcade8 | 112 | //debug( "end of transmission...\r\n" ); |
miruga27 | 2:f256eebcade8 | 113 | |
miruga27 | 2:f256eebcade8 | 114 | |
miruga27 | 1:f0c646dfe574 | 115 | |
miruga27 | 1:f0c646dfe574 | 116 | free(temp1); |
miruga27 | 1:f0c646dfe574 | 117 | free(temp2); |
miruga27 | 1:f0c646dfe574 | 118 | free(temp3); |
miruga27 | 2:f256eebcade8 | 119 | |
miruga27 | 1:f0c646dfe574 | 120 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 121 | pc.printf("1");//OJO con ponerlo aqui arriba*/ |
miruga27 | 2:f256eebcade8 | 122 | |
miruga27 | 2:f256eebcade8 | 123 | char h; |
miruga27 | 2:f256eebcade8 | 124 | h=acumulador[0]&0xff; |
miruga27 | 2:f256eebcade8 | 125 | |
miruga27 | 2:f256eebcade8 | 126 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 127 | pc.printf("%c",h); |
miruga27 | 2:f256eebcade8 | 128 | |
miruga27 | 2:f256eebcade8 | 129 | h=(acumulador[0]>>8) & 0xff; |
miruga27 | 2:f256eebcade8 | 130 | |
miruga27 | 2:f256eebcade8 | 131 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 132 | pc.printf("%c",h); |
miruga27 | 2:f256eebcade8 | 133 | |
miruga27 | 0:1076a8b67c6c | 134 | |
miruga27 | 0:1076a8b67c6c | 135 | |
miruga27 | 2:f256eebcade8 | 136 | h=acumulador[1]&0xff; |
miruga27 | 2:f256eebcade8 | 137 | |
miruga27 | 2:f256eebcade8 | 138 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 139 | pc.printf("%c",h); |
miruga27 | 2:f256eebcade8 | 140 | |
miruga27 | 2:f256eebcade8 | 141 | h=(acumulador[1]>>8)&0xff; |
miruga27 | 2:f256eebcade8 | 142 | |
miruga27 | 2:f256eebcade8 | 143 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 144 | pc.printf("%c",h); |
miruga27 | 2:f256eebcade8 | 145 | |
miruga27 | 2:f256eebcade8 | 146 | |
miruga27 | 2:f256eebcade8 | 147 | h=acumulador[2]&0xff; |
miruga27 | 2:f256eebcade8 | 148 | |
miruga27 | 2:f256eebcade8 | 149 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 150 | pc.printf("%c",h); |
miruga27 | 2:f256eebcade8 | 151 | |
miruga27 | 2:f256eebcade8 | 152 | h=(acumulador[2]>>8)&0xff; |
miruga27 | 2:f256eebcade8 | 153 | |
miruga27 | 2:f256eebcade8 | 154 | while(!pc.writeable()); |
miruga27 | 2:f256eebcade8 | 155 | pc.printf("%c",h);//OJO con ponerlo aqui arriba |
miruga27 | 1:f0c646dfe574 | 156 | } |
miruga27 | 2:f256eebcade8 | 157 | fuera: |
miruga27 | 0:1076a8b67c6c | 158 | |
miruga27 | 0:1076a8b67c6c | 159 | //http://www.martin-gardner.co.uk/how-to-connect-your-old-sd-card-to-an-arduino/ |
miruga27 | 2:f256eebcade8 | 160 | DigitalOut led(LED1); |
miruga27 | 0:1076a8b67c6c | 161 | while(1){ |
miruga27 | 0:1076a8b67c6c | 162 | |
miruga27 | 2:f256eebcade8 | 163 | led=1; |
miruga27 | 2:f256eebcade8 | 164 | wait(0.5); |
miruga27 | 2:f256eebcade8 | 165 | led=0; |
miruga27 | 2:f256eebcade8 | 166 | wait(0.5); |
miruga27 | 0:1076a8b67c6c | 167 | } |
miruga27 | 0:1076a8b67c6c | 168 | |
miruga27 | 0:1076a8b67c6c | 169 | } |