H261 decoder
Dependencies: SDL_lib2 SX1276Lib mbed
Diff: main.cpp
- Revision:
- 1:1ed97958d0f3
- Parent:
- 0:5bd441b8ab2d
--- a/main.cpp Thu Sep 22 00:04:30 2016 +0000 +++ b/main.cpp Wed Jan 11 20:18:38 2017 +0000 @@ -1,3 +1,4 @@ + /* @@ -15,11 +16,12 @@ #include "mbed.h" #include "functions_dec.h" #include "lora.h" +//#include "debug.h" #define BPS 128000 #define BITS 8 #define STOP_BITS 1 - +//DigitalOut myled(LED1); int main(int argc, char *argv[]){ Serial pc(USBTX, USBRX); @@ -27,50 +29,98 @@ pc.format (BITS,SerialBase::None, STOP_BITS) ; int i=0,j=0,p_x=0,p_y=0,k=0; - + //myled=1; short int m[HEIGHT][WIDTH][3]; short int *matriz=(short int *)malloc(sizeof(short int)*WIDTH*HEIGHT*3); - + short int index1,index2,index3; short int acumulador[3]={0,0,0}; +int veces=0; + +for(veces=0; veces < 30;veces++){ 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,...) + temp3=(short int *)malloc(sizeof(short int)*380); + temp2=(short int *)malloc(sizeof(short int)*300); + temp1=(short int *)malloc(sizeof(short int)*300); +//debug("lora\r\n"); + lora(temp1,index1,temp2,index2,temp3,index3,acumulador);//acumulador tells the length of the respective vector(acumulador[0] -> temp1,...) int indice=0; - + // debug("paquete numero %i\r\n",veces+1); //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); + +/* debug("return from lora function...\r\n"); + debug("acumulador[0]= %i\r\n",acumulador[0]); + debug("acumulador[0]= %i\r\n",acumulador[1]); + debug("acumulador[0]= %i\r\n",acumulador[2]); + debug("Paquete numero %i\r\n",veces+1);*/ + k=0; + short int acc1=0,acc2=0,acc3=0; + for(i=0;i<acumulador[0]/2;i++){//Se divide entre 2 poque se cuentan por pares (longitud,valor). + for(j=k;j<(*(temp1+indice)*3+k);j+=3){ + + *(matriz+j)=*(temp1+indice+1); + acc1++; + if(j>HEIGHT*WIDTH*3) break; + //debug("iteracion\r\n"); + } + k=j; + indice+=2; + + } + for(i=(acc1-1)*3;i<HEIGHT*WIDTH*3;i++){ + *(matriz+i)=0; + + } + +//debug("*(temp1+indice)= %i\r\n",*(temp1+0)); + indice=0; + k=0; + for(i=0;i<acumulador[1]/2;i++){ + + for(j=k;j<(*(temp2+indice)*3+k);j+=3){ + + *(matriz+j+1)=*(temp2+indice+1); + acc2++; + if(j>HEIGHT*WIDTH*3) break; } k=j; indice+=2; } + for(i=(acc2-1)*3;i<HEIGHT*WIDTH*3;i++){ + *(matriz+i+1)=0; + } + +//debug("*(temp2+indice)= %i\r\n",*(temp2+indice)); 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); + for(i=0;i<acumulador[2]/2;i++){ + for(j=k;j<(*(temp3+indice)*3+k);j+=3){ + + *(matriz+j+2)=*(temp3+indice+1); + acc3++; + if(j>HEIGHT*WIDTH*3) break; } 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; + for(i=(acc3-1)*3;i<HEIGHT*WIDTH*3;i++){ + *(matriz+i+2)=0; } - - + + + free(temp1); + free(temp2); + free(temp3); + //debug("zig-zag\r\n"); + zig_zag_dec(m,matriz); + //debug("acumulador\r\n"); cuantizador_dec(m); + - + //debug("idct\r\n"); int matrix[8][8][3]; for(i=0;i<HEIGHT;i+=8){ for(j=0;j<WIDTH;j+=8){ @@ -97,7 +147,7 @@ int bpp=3; - for(i=0;i<HEIGHT;i++){ +/* for(i=0;i<HEIGHT;i++){ for(j=0;j<WIDTH;j++){ if(m[i][j][0]>235) m[i][j][0]=235; @@ -108,22 +158,131 @@ if(m[i][j][1]<16) m[i][j][1]=16; if(m[i][j][2]<16) m[i][j][2]=16; } + }*/ +//debug("yuv\r\n"); + yuv_to_rgb(m); + unsigned char var; +/* for(i=0;i<HEIGHT;i++){ + for(j=0;j<WIDTH;j++){ + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j][0]); } - - yuv_to_rgb(m); +}*/ for(i=0;i<8;i++){ for(j=0;j<320;j++){ + + var=0xff & m[i][j][0]; + if(j>311){ + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j-8][0]); - 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]); + + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j-8][1]); + + + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j-8][2]); + } + else{ + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j][0]); + + + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j][1]); + + + while(!pc.writeable()); + pc.printf("%c",(char)m[i][j][2]); + } + + //var=255; + } } + + while(!pc.writeable()); + pc.printf("2");//OJO con ponerlo aqui arriba + + + char h; + h=acc1&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + h=(acc1>>8) & 0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + + + h=acc2&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + h=(acc2>>8)&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + + h=acc3&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + h=(acc3>>8)&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + /* char h; + h=acumulador[0]&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + h=(acumulador[0]>>8) & 0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + + + h=acumulador[1]&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + h=(acumulador[1]>>8)&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + + h=acumulador[2]&0xff; + + while(!pc.writeable()); + pc.printf("%c",h); + + h=(acumulador[2]>>8)&0xff; + + while(!pc.writeable()); + pc.printf("%c",h);*/ +} + + DigitalOut led(LED1); + while(1){ + + led=1; + wait(0.5); + led=0; + wait(0.5); + } return 0; }