Program: gdcm
Module: $RCSfile: gdcmMpeg.cxx,v $
Language: C++
- Date: $Date: 2005/05/21 18:43:52 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2007/08/22 16:14:04 $
+ Version: $Revision: 1.13 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "global.h"
/* private prototypes */
-static int video_sequence _ANSI_ARGS_((int *framenum));
-static int Decode_Bitstream _ANSI_ARGS_((void));
-static int Headers _ANSI_ARGS_((void));
-static void Initialize_Sequence _ANSI_ARGS_((void));
-static void Initialize_Decoder _ANSI_ARGS_((void));
+static int video_sequence _ANSI_ARGS_((int *framenum));
+static int Decode_Bitstream _ANSI_ARGS_((void));
+static int Headers _ANSI_ARGS_((void));
+static void Initialize_Sequence _ANSI_ARGS_((void));
+static void Initialize_Decoder _ANSI_ARGS_((void));
static void Deinitialize_Sequence _ANSI_ARGS_((void));
-//static void Process_Options _ANSI_ARGS_((int argc, char *argv[]));
+//static void Process_Options _ANSI_ARGS_((int argc, char *argv[]));
-/* IMPLEMENTAION specific rouintes */
+/* IMPLEMENTATION specific routines */
static void Initialize_Decoder()
{
int i;
/* Clip table */
- if (!(Clip=(unsigned char *)malloc(1024)))
+ if ( !(Clip=(unsigned char *)malloc(1024)) )
Error("Clip[] malloc failed\n");
Clip += 384;
Clip[i] = (i<0) ? 0 : ((i>255) ? 255 : i);
/* IDCT */
- if (Reference_IDCT_Flag)
+ if ( Reference_IDCT_Flag )
Initialize_Reference_IDCT();
else
Initialize_Fast_IDCT();
}
-/* mostly IMPLEMENTAION specific rouintes */
+/* mostly IMPLEMENTATION specific routines */
static void Initialize_Sequence()
{
int cc, size;
static int Table_6_20[3] = {6,8,12};
/* check scalability mode of enhancement layer */
- if (Two_Streams && (enhan.scalable_mode!=SC_SNR) && (base.scalable_mode!=SC_DP))
- Error("unsupported scalability mode\n");
-
+ if ( Two_Streams && (enhan.scalable_mode!=SC_SNR)
+ &&
+ (base.scalable_mode!=SC_DP) )
+ {
+ Error("unsupported scalability mode\n");
+ }
/* force MPEG-1 parameters for proper decoder behavior */
/* see ISO/IEC 13818-2 section D.9.14 */
- if (!base.MPEG2_Flag)
+ if ( !base.MPEG2_Flag )
{
progressive_sequence = 1;
progressive_frame = 1;
for (cc=0; cc<3; cc++)
{
- if (cc==0)
+ if ( cc==0 )
size = Coded_Picture_Width*Coded_Picture_Height;
else
size = Chroma_Width*Chroma_Height;
- if (!(backward_reference_frame[cc] = (unsigned char *)malloc(size)))
+ if ( !(backward_reference_frame[cc] = (unsigned char *)malloc(size)) )
Error("backward_reference_frame[] malloc failed\n");
- if (!(forward_reference_frame[cc] = (unsigned char *)malloc(size)))
+ if ( !(forward_reference_frame[cc] = (unsigned char *)malloc(size)) )
Error("forward_reference_frame[] malloc failed\n");
- if (!(auxframe[cc] = (unsigned char *)malloc(size)))
+ if ( !(auxframe[cc] = (unsigned char *)malloc(size)) )
Error("auxframe[] malloc failed\n");
- if(Ersatz_Flag)
- if (!(substitute_frame[cc] = (unsigned char *)malloc(size)))
+ if ( Ersatz_Flag )
+ if ( !(substitute_frame[cc] = (unsigned char *)malloc(size)) )
Error("substitute_frame[] malloc failed\n");
- if (base.scalable_mode==SC_SPAT)
+ if ( base.scalable_mode==SC_SPAT )
{
/* this assumes lower layer is 4:2:0 */
- if (!(llframe0[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
+ if ( !(llframe0[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
Error("llframe0 malloc failed\n");
- if (!(llframe1[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
+ if ( !(llframe1[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
Error("llframe1 malloc failed\n");
}
}
/* SCALABILITY: Spatial */
- if (base.scalable_mode==SC_SPAT)
+ if ( base.scalable_mode==SC_SPAT )
{
- if (!(lltmp = (short *)malloc(lower_layer_prediction_horizontal_size*((lower_layer_prediction_vertical_size*vertical_subsampling_factor_n)/vertical_subsampling_factor_m)*sizeof(short))))
+ if ( !(lltmp = (short *)malloc(lower_layer_prediction_horizontal_size*((lower_layer_prediction_vertical_size*vertical_subsampling_factor_n)/vertical_subsampling_factor_m)*sizeof(short))))
Error("lltmp malloc failed\n");
}
int ret;
ld = &base;
-
-
+
/* return when end of sequence (0) or picture
header has been parsed (1) */
ret = Headers();
- if(ret==1)
+ if ( ret==1 )
{
ret = video_sequence(&Bitstream_Framenum);
}
free(forward_reference_frame[i]);
free(auxframe[i]);
- if (base.scalable_mode==SC_SPAT)
+ if ( base.scalable_mode==SC_SPAT )
{
free(llframe0[i]);
free(llframe1[i]);
}
}
- if (base.scalable_mode==SC_SPAT)
+ if ( base.scalable_mode==SC_SPAT )
free(lltmp);
#ifdef DISPLAY
- if (Output_Type==T_X11)
+ if ( Output_Type==T_X11 )
Terminate_Display_Process();
#endif
}
-
static int video_sequence(int *Bitstream_Framenumber)
{
int Bitstream_Framenum;
Decode_Picture(Bitstream_Framenum, Sequence_Framenum);
/* update picture numbers */
- if (!Second_Field)
+ if ( !Second_Field )
{
Bitstream_Framenum++;
Sequence_Framenum++;
{
Decode_Picture(Bitstream_Framenum, Sequence_Framenum);
- if (!Second_Field)
+ if ( !Second_Field )
{
Bitstream_Framenum++;
Sequence_Framenum++;
* @param fp pointer to an already open file descriptor
* 8 significant bits per pixel
* @param image_buffer to receive uncompressed pixels
- * @param statesuspension Suspension State basically it should be 3 otherwise more complex to handle
+ * @param length length
* @return 1 on success, 0 on error
*/
-bool ReadMPEGFile (std::ifstream *fp, void *image_buffer)
+bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t length)
{
int ret, code;
+#if 0
+ fp->read((char*)image_buffer, length);
+ ofstream out("/tmp/etiam.mpeg");
+ out.write((char*)image_buffer, length);
+ out.close();
+#endif
+
// Clear_Options();
/* decode command line arguments */
#endif
- if(base.Infile != 0)
+ if ( base.Infile != 0 )
{
Initialize_Buffer();
- if(Show_Bits(8)==0x47)
+ if ( Show_Bits(8)==0x47 )
{
sprintf(Error_Text,"Decoder currently does not parse transport streams\n");
Error(Error_Text);
Initialize_Buffer();
}
- if(base.Infile!=0)
+ if ( base.Infile!=0 )
{
//lseek(base.Infile, 0l, SEEK_SET);
//fp->seekg(mpeg_start, ios_base::beg);
Initialize_Buffer();
- if(Two_Streams)
+ if ( Two_Streams )
{
abort();
ld = &enhan; /* select enhancement layer context */
- if ((enhan.Infile = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY))<0)
+ if ( (enhan.Infile = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY))<0)
{
sprintf(Error_Text,"enhancment layer bitstream file %s not found\n",
Enhancement_Layer_Bitstream_Filename);
//close(base.Infile);
- if (Two_Streams)
+ if ( Two_Streams )
{
abort();
close(enhan.Infile);