H261 decoder
Dependencies: SDL_lib2 SX1276Lib mbed
main.cpp@0:5bd441b8ab2d, 2016-09-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |