[XviD-devel] Fw: Fw: libxvidcore decompression

reno reballos rreballos at yahoo.com
Fri Apr 25 06:07:10 CEST 2008


Hi Master Stephan,

thank you for the the reply... i had double check and scrutinized everything in my code specially when it comes to initialization of decoder and the main decoder itself, i will share to you my code hope you'll fine a time for this.... and here is exactly what i do... yes, you are free to give any comment with my code:

//======== main application file routine===============//
FILE *fpi = NULL;<-- input file
FILE *fpo = NULL;<-- output file

 unsigned char *mp4_buffer = NULL;
unsigned char *dec_output_buffer = NULL;
mp4_buffer = (unsigned char*)malloc(1024*1024*2);
dec_output_buffer = (unsigned char *)malloc(352*240*4);<---this should be enough for the res. of 352*240

static void *dec_handle = NULL;<--decoder handle
int useful_bytes = 0;
int used_bytes = 0;


    useful_bytes = fread(mp4_buffer, sizeof(unsigned int), 1024, fpi);

    xvid_dec_stats_t dec_stats;
    memset(&dec_stats,0, sizeof(xvid_dec_stats_t));
    dec_stats.version = XVID_VERSION;

    do{
    
        //reading 5008*4 bytes from the file(fpi)
        useful_bytes = fread(gmp4_buffer, sizeof(unsigned int), 5008,fpi);//65536,5008,2048, 262144reading 1MB 

        do{
                //decode until dec_outBuf got data
            used_bytes = dec_decode(gmp4_buffer, dec_outBuf, useful_bytes,&dec_stats);<--in here itself no decoder output from dec_outBuf...
        }while(sizeof(dec_outBuf==0));

        sprintf(FileNames, "%sdec%05d.pgm", FilePath, totalframe);
        fpo = fopen(FileNames, "w+b");
        
        width = dec_stats.data.vol.width;
        height = dec_stats.data.vol.height;

        writedata = fwrite(dec_outBuf,1,width*height*3/2,fpo);//used_bytes
        fclose(fpo);
        totalframe++;

    }while(useful_bytes>1 || !feof(fpi) || used_bytes==0);

----------------------------------------------------------------------------------------------

//============ global initialization routine ======
int dec_global_initialize()
{
    int retVal_GBL_init = NULL;

     xvid_gbl_init_t xvid_gbl_init;
    memset(&xvid_gbl_init, 0, sizeof(xvid_gbl_init_t));
    xvid_gbl_init.debug = 0;
    xvid_gbl_init.version = XVID_VERSION;            
    xvid_gbl_init.cpu_flags = 0;                    
 
    retVal_GBL_init = xvid_global(NULL, XVID_GBL_INIT, &xvid_gbl_init, NULL);

   /*note: error checking is removed...*/
  ....
  ..
  .

    return retVal_GBL_init;

-----------------------------------------------------------------------------------------------------

//=========== decoder initialization ===================

    xvid_dec_create_t dec_create;
    memset(&dec_create,0, sizeof(xvid_dec_create_t));
    dec_create.version = XVID_VERSION;
    dec_create.width = 0;
    dec_create.height = 0;
    
    retVal_DEC_create = xvid_decore(NULL, XVID_DEC_CREATE, &dec_create, NULL);

    /*note: error checking is removed...*/
    ...
    ..
    .

    dec_handle = dec_create.handle;//decoder handle

    return retVal_DEC_create;
-------------------------------------------------------------------------------------------------------------

//============ decoder main routine =============================
int dec_decode(unsigned char *dec_inputstream, unsigned char *dec_outputstream, int data_length, xvid_dec_stats_t *dec_stats)
{

    int retVal_DEC_decode = NULL;
     xvid_dec_frame_t dec_frame;
    memset(&dec_frame,0, sizeof(xvid_dec_frame_t));
    dec_frame.version = XVID_VERSION;
    dec_frame.general = 0;
    dec_frame.bitstream = dec_inputstream;<-- decoder input stream
    dec_frame.length = data_length;<-- data length 
    dec_frame.output.plane[0] = dec_outputstream;<---decoder output stream
    dec_stats->type = XVID_TYPE_AUTO;

    retVal_DEC_decode = xvid_decore(dec_handle, XVID_DEC_DECODE, &dec_frame,dec_stats);
    /*note: error checking is removed...*/
    ...
    ..
    .
    dec_frame.output.stride[0] = (dec_stats->data.vol.width)*3; 
    dec_frame.output.csp = XVID_CSP_BGR;
    
    return retVal_DEC_decode;

-------------------------------------------------------------------------------------

//===== stop the decoding routine ===========

int dec_stop()
{
    int dec_destroy = xvid_decore(dec_handle, XVID_DEC_DESTROY, NULL, NULL);
    dec_handle = NULL;
    return dec_destroy;
}
---------------------------------------------------------------------------------------

i hope you can help me sort this out.. thank you for the time spent and knowledge shared......
looking forward for your comment...

regards,
reno




      ____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ


More information about the XviD-devel mailing list