H261 decoder
Dependencies: SDL_lib2 SX1276Lib mbed
Diff: main.cpp
- Revision:
- 0:5bd441b8ab2d
- Child:
- 1:1ed97958d0f3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 22 00:04:30 2016 +0000 @@ -0,0 +1,129 @@ + + +/* + * decoder.c + * + * Created on: 5/7/2016 + * Author: Miguel Ruiz García + Company: University of Cantabria + e-mail:mrg47@alumnos.unican.es + */ + + +#include <SDL.h> +#include <stdio.h> +#include "mbed.h" +#include "functions_dec.h" +#include "lora.h" +#define BPS 128000 +#define BITS 8 +#define STOP_BITS 1 + + + +int main(int argc, char *argv[]){ + Serial pc(USBTX, USBRX); + pc.baud(BPS); + pc.format (BITS,SerialBase::None, STOP_BITS) ; + + int i=0,j=0,p_x=0,p_y=0,k=0; + + short int m[HEIGHT][WIDTH][3]; + short int *matriz=(short int *)malloc(sizeof(short int)*WIDTH*HEIGHT*3); + + short int acumulador[3]={0,0,0}; + short int *temp1,*temp2,*temp3;//these are vectors. Memory allocations are done at lora function. + lora(temp1,acumulador[0],temp2,acumulador[1],temp3,acumulador[2]);//acumulador tells the length of the respective vector(acumulador[0] -> temp1,...) + int indice=0; + + //We must "unroll" the vectors after being processed with the RLC (in the encoder) + for(i=0;i<acumulador[0]>>1;i++){ + for(j=k;j<*(temp1+indice)+k;j++){ + *(matriz+j*3)=*(temp1+indice+1); + } + k=j; + indice+=2; + } + indice=0; + k=0; + for(i=0;i<acumulador[1]>>1;i++){ + for(j=k;j<*(temp2+indice)+k;j++){ + *(matriz+j*3+1)=*(temp2+indice+1); + } + k=j; + indice+=2; + } + + indice=0; + k=0; + for(i=0;i<acumulador[2]>>1;i++){ + for(j=k;j<*(temp3+indice)+k;j++){ + *(matriz+j*3+2)=*(temp3+indice+1); + } + k=j; + indice+=2; + } + + + + zig_zag_dec(m,matriz); + + cuantizador_dec(m); + + + int matrix[8][8][3]; + for(i=0;i<HEIGHT;i+=8){ + for(j=0;j<WIDTH;j+=8){ + + int k=0,l=0; + + for(k=i;k<i+8;k++){ + for(l=j;l<j+8;l++){ + + + matrix[k-i][l-j][0]=m[k][l][0]; + matrix[k-i][l-j][1]=m[k][l][1]; + matrix[k-i][l-j][2]=m[k][l][2]; + } + + } + + IDCT(matrix,m,i,j);// i j índices de los pixeles en x e y del macrobloque + + } + + } + + + int bpp=3; + + for(i=0;i<HEIGHT;i++){ + for(j=0;j<WIDTH;j++){ + + if(m[i][j][0]>235) m[i][j][0]=235; + if(m[i][j][1]>235) m[i][j][1]=235; + if(m[i][j][2]>240) m[i][j][2]=240; + + if(m[i][j][0]<16) m[i][j][0]=16; + if(m[i][j][1]<16) m[i][j][1]=16; + if(m[i][j][2]<16) m[i][j][2]=16; + } + } + + yuv_to_rgb(m); + + for(i=0;i<8;i++){ + for(j=0;j<320;j++){ + + while(!pc.writeable()); + pc.printf("%u",(unsigned char)m[i][j][0]); + + while(!pc.writeable()); + pc.printf("%u",(unsigned char)m[i][j][1]); + while(!pc.writeable()); + pc.printf("%u",(unsigned char)m[i][j][2]); + + } + } +return 0; +}