📄 mpeg2dec.c
字号:
case 'F': Frame_Store_Flag = 1; break; case 'G': Big_Picture_Flag = 1; break; case 'I':#ifdef VERIFY Stats_Flag = atoi(&argv[i][2]); #else /* VERIFY */ printf("WARNING: This program not compiled for -i option\n");#endif /* VERIFY */ break; case 'L': /* spatial scalability flag */ Spatial_Flag = 1; if(NextArg || LastArg) { printf("ERROR: -l must be followed by filename\n"); exit(ERROR); } else Lower_Layer_Picture_Filename = argv[++i]; break; case 'O': Output_Type = atoi(&argv[i][2]); if((Output_Type==4) || (Output_Type==5)) Output_Picture_Filename = ""; /* no need of filename */ else if(NextArg || LastArg) { printf("ERROR: -o must be followed by filename\n"); exit(ERROR); } else /* filename is separated by space, so it becomes the next argument */ Output_Picture_Filename = argv[++i]; #ifdef DISPLAY if (Output_Type==T_X11HIQ) { hiQdither = 1; Output_Type=T_X11; }#endif /* DISPLAY */ break; case 'Q': Quiet_Flag = 1; break; case 'R': Reference_IDCT_Flag = 1; break; case 'T':#ifdef TRACE Trace_Flag = 1;#else /* TRACE */ printf("WARNING: This program not compiled for -t option\n");#endif /* TRACE */ break; case 'U': User_Data_Flag = 1; case 'V':#ifdef VERBOSE Verbose_Flag = atoi(&argv[i][2]); #else /* VERBOSE */ printf("This program not compiled for -v option\n");#endif /* VERBOSE */ break; case 'X': Ersatz_Flag = 1; if(NextArg || LastArg) { printf("ERROR: -x must be followed by filename\n"); exit(ERROR); } else Substitute_Picture_Filename = argv[++i]; break; default: fprintf(stderr,"undefined option -%c ignored. Exiting program\n", argv[i][1]); exit(ERROR); } /* switch() */ } /* if argv[i][0] == '-' */ i++; /* check for bitstream filename argument (there must always be one, at the very end of the command line arguments */ } /* while() */ /* options sense checking */ if(Main_Bitstream_Flag!=1) { printf("There must be a main bitstream specified (-b filename)\n"); } /* force display process to show frame pictures */ if((Output_Type==4 || Output_Type==5) && Frame_Store_Flag) Display_Progressive_Flag = 1; else Display_Progressive_Flag = 0;#ifdef VERIFY /* parse the bitstream, do not actually decode it completely */ #if 0 if(Output_Type==-1) { Decode_Layer = Verify_Flag; printf("FYI: Decoding bitstream elements up to: %s\n", Layer_Table[Decode_Layer]); } else#endif Decode_Layer = ALL_LAYERS;#endif /* VERIFY */ /* no output type specified */ if(Output_Type==-1) { Output_Type = 9; Output_Picture_Filename = ""; }#ifdef DISPLAY if (Output_Type==T_X11) { if(Frame_Store_Flag) Display_Progressive_Flag = 1; else Display_Progressive_Flag = 0; Frame_Store_Flag = 1; /* to avoid calling dither() twice */ }#endif}#ifdef OLD/* this is an old routine used to convert command line arguments into integers */static int Get_Val(argv)char *argv[];{ int val; if (sscanf(argv[1]+2,"%d",&val)!=1) return 0; while (isdigit(argv[1][2])) argv[1]++; return val;}#endifstatic int Headers(){ int ret; ld = &base; /* return when end of sequence (0) or picture header has been parsed (1) */ ret = Get_Hdr(); if (Two_Streams) { ld = &enhan; if (Get_Hdr()!=ret && !Quiet_Flag) fprintf(stderr,"streams out of sync\n"); ld = &base; } return ret;}static int Decode_Bitstream(){ int ret; int Bitstream_Framenum; Bitstream_Framenum = 0; for(;;) {#ifdef VERIFY Clear_Verify_Headers();#endif /* VERIFY */ ret = Headers(); if(ret==1) { ret = video_sequence(&Bitstream_Framenum); } else return(ret); }}static void Deinitialize_Sequence(){ int i; /* clear flags */ base.MPEG2_Flag=0; for(i=0;i<3;i++) { free(backward_reference_frame[i]); free(forward_reference_frame[i]); free(auxframe[i]); if (base.scalable_mode==SC_SPAT) { free(llframe0[i]); free(llframe1[i]); } } if (base.scalable_mode==SC_SPAT) free(lltmp);#ifdef DISPLAY if (Output_Type==T_X11) Terminate_Display_Process();#endif}static int video_sequence(Bitstream_Framenumber)int *Bitstream_Framenumber;{ int Bitstream_Framenum; int Sequence_Framenum; int Return_Value; Bitstream_Framenum = *Bitstream_Framenumber; Sequence_Framenum=0; Initialize_Sequence(); /* decode picture whose header has already been parsed in Decode_Bitstream() */ Decode_Picture(Bitstream_Framenum, Sequence_Framenum); /* update picture numbers */ if (!Second_Field) { Bitstream_Framenum++; Sequence_Framenum++; } /* loop through the rest of the pictures in the sequence */ while ((Return_Value=Headers())) { Decode_Picture(Bitstream_Framenum, Sequence_Framenum); if (!Second_Field) { Bitstream_Framenum++; Sequence_Framenum++; } } /* put last frame */ if (Sequence_Framenum!=0) { Output_Last_Frame_of_Sequence(Bitstream_Framenum); } Deinitialize_Sequence();#ifdef VERIFY Clear_Verify_Headers();#endif /* VERIFY */ *Bitstream_Framenumber = Bitstream_Framenum; return(Return_Value);}static void Clear_Options(){ Verbose_Flag = 0; Output_Type = 0; Output_Picture_Filename = " "; hiQdither = 0; Output_Type = 0; Frame_Store_Flag = 0; Spatial_Flag = 0; Lower_Layer_Picture_Filename = " "; Reference_IDCT_Flag = 0; Trace_Flag = 0; Quiet_Flag = 0; Ersatz_Flag = 0; Substitute_Picture_Filename = " "; Two_Streams = 0; Enhancement_Layer_Bitstream_Filename = " "; Big_Picture_Flag = 0; Main_Bitstream_Flag = 0; Main_Bitstream_Filename = " "; Verify_Flag = 0; Stats_Flag = 0; User_Data_Flag = 0; }#ifdef DEBUGstatic void Print_Options(){ printf("Verbose_Flag = %d\n", Verbose_Flag); printf("Output_Type = %d\n", Output_Type); printf("Output_Picture_Filename = %s\n", Output_Picture_Filename); printf("hiQdither = %d\n", hiQdither); printf("Output_Type = %d\n", Output_Type); printf("Frame_Store_Flag = %d\n", Frame_Store_Flag); printf("Spatial_Flag = %d\n", Spatial_Flag); printf("Lower_Layer_Picture_Filename = %s\n", Lower_Layer_Picture_Filename); printf("Reference_IDCT_Flag = %d\n", Reference_IDCT_Flag); printf("Trace_Flag = %d\n", Trace_Flag); printf("Quiet_Flag = %d\n", Quiet_Flag); printf("Ersatz_Flag = %d\n", Ersatz_Flag); printf("Substitute_Picture_Filename = %s\n", Substitute_Picture_Filename); printf("Two_Streams = %d\n", Two_Streams); printf("Enhancement_Layer_Bitstream_Filename = %s\n", Enhancement_Layer_Bitstream_Filename); printf("Big_Picture_Flag = %d\n", Big_Picture_Flag); printf("Main_Bitstream_Flag = %d\n", Main_Bitstream_Flag); printf("Main_Bitstream_Filename = %s\n", Main_Bitstream_Filename); printf("Verify_Flag = %d\n", Verify_Flag); printf("Stats_Flag = %d\n", Stats_Flag); printf("User_Data_Flag = %d\n", User_Data_Flag);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -