[svn] / branches / dev-api-3 / xvidcore / examples / xvid_decraw.c Repository:
ViewVC logotype

Diff of /branches/dev-api-3/xvidcore/examples/xvid_decraw.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 780, Sun Jan 12 17:21:04 2003 UTC revision 783, Mon Jan 13 00:37:20 2003 UTC
# Line 19  Line 19 
19   *  along with this program; if not, write to the Free Software   *  along with this program; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: xvid_decraw.c,v 1.1.2.1 2003-01-12 17:21:04 edgomez Exp $   * $Id: xvid_decraw.c,v 1.1.2.2 2003-01-13 00:37:20 edgomez Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 115  Line 115 
115          unsigned char *mp4_ptr    = NULL;          unsigned char *mp4_ptr    = NULL;
116          unsigned char *out_buffer = NULL;          unsigned char *out_buffer = NULL;
117          int bigendian = 0;          int bigendian = 0;
118            int still_left_in_packet;
119    
120          double totaldectime;          double totaldectime;
121    
# Line 259  Line 260 
260          totaldectime = 0;          totaldectime = 0;
261          totalsize = 0;          totalsize = 0;
262          filenr = 0;          filenr = 0;
263            still_left_in_packet = 0;
264          mp4_ptr = mp4_buffer;          mp4_ptr = mp4_buffer;
265    
266          do {          do {
# Line 270  Line 272 
272                  /* Read data from input file */                  /* Read data from input file */
273                  if(ARG_STREAMTYPE) {                  if(ARG_STREAMTYPE) {
274    
275                          /* MP4U container */                          /*
276                             * MP4U container
277                             *
278                             * When dealing with mp4u, we have to take care about PBB...B packets
279                             * generated with some XviD options.
280                             *
281                             * We use the still_left_in_packet variable to keep trace of how many
282                             * bytes we loaded at a time.
283                             */
284    
285                            /* Still real frames in loaded packet ? */
286                            if(still_left_in_packet < 7) {
287    
288                          /* Read stream size first */                          /* Read stream size first */
289                          if(feof(in_file))                          if(feof(in_file))
290                                  break;                                  break;
291                          fread(&mp4_size, sizeof(long), 1, in_file);                                  fread(&still_left_in_packet, sizeof(long), 1, in_file);
292    
293                          /* Mp4U container is big endian */                          /* Mp4U container is big endian */
294                          if(!bigendian)                          if(!bigendian)
295                                  mp4_size = SWAP(mp4_size);                                          mp4_size = SWAP(still_left_in_packet);
296    
297                          /* Read mp4_size_bytes */                          /* Read mp4_size_bytes */
298                          if(feof(in_file))                          if(feof(in_file))
299                                  break;                                  break;
300                          fread(mp4_buffer, mp4_size, 1, in_file);                                  fread(mp4_buffer, still_left_in_packet, 1, in_file);
301    
302                          /*                          /*
303                           * When reading mp4u, we don't have to care about buffer                           * When reading mp4u, we don't have to care about buffer
# Line 294  Line 307 
307                          mp4_ptr = mp4_buffer;                          mp4_ptr = mp4_buffer;
308    
309                  }                  }
310    
311                    }
312                  else {                  else {
313    
314                          /* Real raw stream */                          /*
315                             * Real raw stream
316                             *
317                             * In raw stream mode,we don't have to care how many bytes there're
318                             * still in packet because we simply let the decore decode frames
319                             * without taking care of buffer overruns or underruns.
320                             *
321                             */
322                            still_left_in_packet = 0;
323    
324                          /* buffer more than half empty -> Fill it */                          /* buffer more than half empty -> Fill it */
325                          if (mp4_ptr > mp4_buffer + BUFFER_SIZE/2) {                          if (mp4_ptr > mp4_buffer + BUFFER_SIZE/2) {
# Line 312  Line 335 
335                                  /* read new data */                                  /* read new data */
336                                  if(feof(in_file))                                  if(feof(in_file))
337                                          break;                                          break;
338    
339                                  fread(mp4_buffer + rest, BUFFER_SIZE - rest, 1, in_file);                                  fread(mp4_buffer + rest, BUFFER_SIZE - rest, 1, in_file);
340    
341                          }                          }
342    
343                  }                  }
344    
345                     /* The do loop is just to flush NVOPS */
346                    do {
347    
348                  /* Decode frame */                  /* Decode frame */
349                  dectime = msecond();                  dectime = msecond();
350                  status = dec_main(mp4_ptr, out_buffer, mp4_size, &used_bytes);                  status = dec_main(mp4_ptr, out_buffer, mp4_size, &used_bytes);
# Line 332  Line 359 
359                   * mp4_ptr = mp4_buffer for each frame                   * mp4_ptr = mp4_buffer for each frame
360                   */                   */
361                  mp4_ptr += used_bytes;                  mp4_ptr += used_bytes;
362                            still_left_in_packet -= used_bytes;
363    
364                  /* Updated data */                          /* Total size */
365                  totalsize += used_bytes;                  totalsize += used_bytes;
366    
367                    }while(used_bytes <= 7); /* <= 7 bytes is a NVOPS */
368    
369                    /* Updated data - Count only usefull decode time */
370                  totaldectime += dectime;                  totaldectime += dectime;
371    
372                  /* Prints some decoding stats */                  /* Prints some decoding stats */
373                  printf("Frame %5d: dectime =%6.1f ms length=%7d bytes \n",                  printf("Frame %5d: dectime =%6.1f ms length=%7d bytes \n",
374                         filenr, dectime, used_bytes);                         filenr, dectime, used_bytes);
375    
376                  /* Save individual mpeg4 strean if required */                  /* Save individual mpeg4 stream if required */
377                  if (ARG_SAVEMPEGSTREAM) {                  if (ARG_SAVEMPEGSTREAM) {
378                          FILE *filehandle = NULL;                          FILE *filehandle = NULL;
379    
# Line 358  Line 390 
390                          }                          }
391                  }                  }
392    
   
393                  /* Save output frame if required */                  /* Save output frame if required */
394                  if (ARG_SAVEDECOUTPUT) {                  if (ARG_SAVEDECOUTPUT) {
395                          sprintf(filename, "%sdec%05d.pgm", filepath, filenr);                          sprintf(filename, "%sdec%05d.pgm", filepath, filenr);
# Line 516  Line 547 
547          xparam.height = YDIM;          xparam.height = YDIM;
548    
549          xerr = xvid_decore(NULL, XVID_DEC_CREATE, &xparam, NULL);          xerr = xvid_decore(NULL, XVID_DEC_CREATE, &xparam, NULL);
550    
551          dec_handle = xparam.handle;          dec_handle = xparam.handle;
552    
553          return xerr;          return xerr;

Legend:
Removed from v.780  
changed lines
  Added in v.783

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4