JPEG compressor

Dependencies:   SDL_lib SX1276Lib mbed

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?

UserRevisionLine numberNew 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 }