H261 decoder

Dependencies:   SDL_lib2 SX1276Lib mbed

Committer:
miruga27
Date:
Thu Sep 22 00:04:30 2016 +0000
Revision:
0:5bd441b8ab2d
Child:
1:1ed97958d0f3
JPEG uncompressor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miruga27 0:5bd441b8ab2d 1
miruga27 0:5bd441b8ab2d 2
miruga27 0:5bd441b8ab2d 3 /*
miruga27 0:5bd441b8ab2d 4 * decoder.c
miruga27 0:5bd441b8ab2d 5 *
miruga27 0:5bd441b8ab2d 6 * Created on: 5/7/2016
miruga27 0:5bd441b8ab2d 7 * Author: Miguel Ruiz García
miruga27 0:5bd441b8ab2d 8 Company: University of Cantabria
miruga27 0:5bd441b8ab2d 9 e-mail:mrg47@alumnos.unican.es
miruga27 0:5bd441b8ab2d 10 */
miruga27 0:5bd441b8ab2d 11
miruga27 0:5bd441b8ab2d 12
miruga27 0:5bd441b8ab2d 13 #include <SDL.h>
miruga27 0:5bd441b8ab2d 14 #include <stdio.h>
miruga27 0:5bd441b8ab2d 15 #include "mbed.h"
miruga27 0:5bd441b8ab2d 16 #include "functions_dec.h"
miruga27 0:5bd441b8ab2d 17 #include "lora.h"
miruga27 0:5bd441b8ab2d 18 #define BPS 128000
miruga27 0:5bd441b8ab2d 19 #define BITS 8
miruga27 0:5bd441b8ab2d 20 #define STOP_BITS 1
miruga27 0:5bd441b8ab2d 21
miruga27 0:5bd441b8ab2d 22
miruga27 0:5bd441b8ab2d 23
miruga27 0:5bd441b8ab2d 24 int main(int argc, char *argv[]){
miruga27 0:5bd441b8ab2d 25 Serial pc(USBTX, USBRX);
miruga27 0:5bd441b8ab2d 26 pc.baud(BPS);
miruga27 0:5bd441b8ab2d 27 pc.format (BITS,SerialBase::None, STOP_BITS) ;
miruga27 0:5bd441b8ab2d 28
miruga27 0:5bd441b8ab2d 29 int i=0,j=0,p_x=0,p_y=0,k=0;
miruga27 0:5bd441b8ab2d 30
miruga27 0:5bd441b8ab2d 31 short int m[HEIGHT][WIDTH][3];
miruga27 0:5bd441b8ab2d 32 short int *matriz=(short int *)malloc(sizeof(short int)*WIDTH*HEIGHT*3);
miruga27 0:5bd441b8ab2d 33
miruga27 0:5bd441b8ab2d 34 short int acumulador[3]={0,0,0};
miruga27 0:5bd441b8ab2d 35 short int *temp1,*temp2,*temp3;//these are vectors. Memory allocations are done at lora function.
miruga27 0:5bd441b8ab2d 36 lora(temp1,acumulador[0],temp2,acumulador[1],temp3,acumulador[2]);//acumulador tells the length of the respective vector(acumulador[0] -> temp1,...)
miruga27 0:5bd441b8ab2d 37 int indice=0;
miruga27 0:5bd441b8ab2d 38
miruga27 0:5bd441b8ab2d 39 //We must "unroll" the vectors after being processed with the RLC (in the encoder)
miruga27 0:5bd441b8ab2d 40 for(i=0;i<acumulador[0]>>1;i++){
miruga27 0:5bd441b8ab2d 41 for(j=k;j<*(temp1+indice)+k;j++){
miruga27 0:5bd441b8ab2d 42 *(matriz+j*3)=*(temp1+indice+1);
miruga27 0:5bd441b8ab2d 43 }
miruga27 0:5bd441b8ab2d 44 k=j;
miruga27 0:5bd441b8ab2d 45 indice+=2;
miruga27 0:5bd441b8ab2d 46 }
miruga27 0:5bd441b8ab2d 47 indice=0;
miruga27 0:5bd441b8ab2d 48 k=0;
miruga27 0:5bd441b8ab2d 49 for(i=0;i<acumulador[1]>>1;i++){
miruga27 0:5bd441b8ab2d 50 for(j=k;j<*(temp2+indice)+k;j++){
miruga27 0:5bd441b8ab2d 51 *(matriz+j*3+1)=*(temp2+indice+1);
miruga27 0:5bd441b8ab2d 52 }
miruga27 0:5bd441b8ab2d 53 k=j;
miruga27 0:5bd441b8ab2d 54 indice+=2;
miruga27 0:5bd441b8ab2d 55 }
miruga27 0:5bd441b8ab2d 56
miruga27 0:5bd441b8ab2d 57 indice=0;
miruga27 0:5bd441b8ab2d 58 k=0;
miruga27 0:5bd441b8ab2d 59 for(i=0;i<acumulador[2]>>1;i++){
miruga27 0:5bd441b8ab2d 60 for(j=k;j<*(temp3+indice)+k;j++){
miruga27 0:5bd441b8ab2d 61 *(matriz+j*3+2)=*(temp3+indice+1);
miruga27 0:5bd441b8ab2d 62 }
miruga27 0:5bd441b8ab2d 63 k=j;
miruga27 0:5bd441b8ab2d 64 indice+=2;
miruga27 0:5bd441b8ab2d 65 }
miruga27 0:5bd441b8ab2d 66
miruga27 0:5bd441b8ab2d 67
miruga27 0:5bd441b8ab2d 68
miruga27 0:5bd441b8ab2d 69 zig_zag_dec(m,matriz);
miruga27 0:5bd441b8ab2d 70
miruga27 0:5bd441b8ab2d 71 cuantizador_dec(m);
miruga27 0:5bd441b8ab2d 72
miruga27 0:5bd441b8ab2d 73
miruga27 0:5bd441b8ab2d 74 int matrix[8][8][3];
miruga27 0:5bd441b8ab2d 75 for(i=0;i<HEIGHT;i+=8){
miruga27 0:5bd441b8ab2d 76 for(j=0;j<WIDTH;j+=8){
miruga27 0:5bd441b8ab2d 77
miruga27 0:5bd441b8ab2d 78 int k=0,l=0;
miruga27 0:5bd441b8ab2d 79
miruga27 0:5bd441b8ab2d 80 for(k=i;k<i+8;k++){
miruga27 0:5bd441b8ab2d 81 for(l=j;l<j+8;l++){
miruga27 0:5bd441b8ab2d 82
miruga27 0:5bd441b8ab2d 83
miruga27 0:5bd441b8ab2d 84 matrix[k-i][l-j][0]=m[k][l][0];
miruga27 0:5bd441b8ab2d 85 matrix[k-i][l-j][1]=m[k][l][1];
miruga27 0:5bd441b8ab2d 86 matrix[k-i][l-j][2]=m[k][l][2];
miruga27 0:5bd441b8ab2d 87 }
miruga27 0:5bd441b8ab2d 88
miruga27 0:5bd441b8ab2d 89 }
miruga27 0:5bd441b8ab2d 90
miruga27 0:5bd441b8ab2d 91 IDCT(matrix,m,i,j);// i j índices de los pixeles en x e y del macrobloque
miruga27 0:5bd441b8ab2d 92
miruga27 0:5bd441b8ab2d 93 }
miruga27 0:5bd441b8ab2d 94
miruga27 0:5bd441b8ab2d 95 }
miruga27 0:5bd441b8ab2d 96
miruga27 0:5bd441b8ab2d 97
miruga27 0:5bd441b8ab2d 98 int bpp=3;
miruga27 0:5bd441b8ab2d 99
miruga27 0:5bd441b8ab2d 100 for(i=0;i<HEIGHT;i++){
miruga27 0:5bd441b8ab2d 101 for(j=0;j<WIDTH;j++){
miruga27 0:5bd441b8ab2d 102
miruga27 0:5bd441b8ab2d 103 if(m[i][j][0]>235) m[i][j][0]=235;
miruga27 0:5bd441b8ab2d 104 if(m[i][j][1]>235) m[i][j][1]=235;
miruga27 0:5bd441b8ab2d 105 if(m[i][j][2]>240) m[i][j][2]=240;
miruga27 0:5bd441b8ab2d 106
miruga27 0:5bd441b8ab2d 107 if(m[i][j][0]<16) m[i][j][0]=16;
miruga27 0:5bd441b8ab2d 108 if(m[i][j][1]<16) m[i][j][1]=16;
miruga27 0:5bd441b8ab2d 109 if(m[i][j][2]<16) m[i][j][2]=16;
miruga27 0:5bd441b8ab2d 110 }
miruga27 0:5bd441b8ab2d 111 }
miruga27 0:5bd441b8ab2d 112
miruga27 0:5bd441b8ab2d 113 yuv_to_rgb(m);
miruga27 0:5bd441b8ab2d 114
miruga27 0:5bd441b8ab2d 115 for(i=0;i<8;i++){
miruga27 0:5bd441b8ab2d 116 for(j=0;j<320;j++){
miruga27 0:5bd441b8ab2d 117
miruga27 0:5bd441b8ab2d 118 while(!pc.writeable());
miruga27 0:5bd441b8ab2d 119 pc.printf("%u",(unsigned char)m[i][j][0]);
miruga27 0:5bd441b8ab2d 120
miruga27 0:5bd441b8ab2d 121 while(!pc.writeable());
miruga27 0:5bd441b8ab2d 122 pc.printf("%u",(unsigned char)m[i][j][1]);
miruga27 0:5bd441b8ab2d 123 while(!pc.writeable());
miruga27 0:5bd441b8ab2d 124 pc.printf("%u",(unsigned char)m[i][j][2]);
miruga27 0:5bd441b8ab2d 125
miruga27 0:5bd441b8ab2d 126 }
miruga27 0:5bd441b8ab2d 127 }
miruga27 0:5bd441b8ab2d 128 return 0;
miruga27 0:5bd441b8ab2d 129 }