00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "contributors.h"
00016
00017 #include "global.h"
00018 #include "enc_statistics.h"
00019
00020 #include "rtp.h"
00021 #include "annexb.h"
00022 #include "parset.h"
00023 #include "mbuffer.h"
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 void error(char *text, int code)
00038 {
00039 fprintf(stderr, "%s\n", text);
00040 flush_dpb();
00041 exit(code);
00042 }
00043
00044
00045
00046
00047
00048
00049
00050
00051 int write_PPS(int len, int PPS_id)
00052 {
00053 NALU_t *nalu;
00054 nalu = NULL;
00055 nalu = GeneratePic_parameter_set_NALU (PPS_id);
00056 len += WriteNALU (nalu);
00057 FreeNALU (nalu);
00058
00059 return len;
00060 }
00061
00062
00063
00064
00065
00066
00067
00068
00069 int start_sequence(void)
00070 {
00071 int i,len=0, total_pps = (params->GenerateMultiplePPS) ? 3 : 1;
00072 NALU_t *nalu;
00073
00074
00075 switch(params->of_mode)
00076 {
00077 case PAR_OF_ANNEXB:
00078 OpenAnnexbFile (params->outfile);
00079 WriteNALU = WriteAnnexbNALU;
00080 break;
00081 case PAR_OF_RTP:
00082 OpenRTPFile (params->outfile);
00083 WriteNALU = WriteRTPNALU;
00084 break;
00085 default:
00086 snprintf(errortext, ET_SIZE, "Output File Mode %d not supported", params->of_mode);
00087 error(errortext,1);
00088 return 1;
00089 }
00090
00091
00092 if ( params->SendAUD )
00093 {
00094 len += Write_AUD_NALU();
00095 }
00096
00097
00098
00099
00100
00101
00102 nalu = NULL;
00103 nalu = GenerateSeq_parameter_set_NALU ();
00104 len += WriteNALU (nalu);
00105 FreeNALU (nalu);
00106
00107
00108 for (i=0;i<total_pps;i++)
00109 {
00110 len = write_PPS(len, i);
00111 }
00112
00113 if (params->GenerateSEIMessage)
00114 {
00115 nalu = NULL;
00116 nalu = GenerateSEImessage_NALU();
00117 len += WriteNALU (nalu);
00118 FreeNALU (nalu);
00119 }
00120
00121 stats->bit_ctr_parametersets_n = len;
00122 return 0;
00123 }
00124
00125
00126
00127
00128
00129
00130
00131
00132 int rewrite_paramsets(void)
00133 {
00134 int i,len=0, total_pps = (params->GenerateMultiplePPS) ? 3 : 1;
00135 NALU_t *nalu;
00136
00137
00138 if ( params->SendAUD )
00139 {
00140 len += Write_AUD_NALU();
00141 }
00142
00143
00144
00145
00146
00147
00148 nalu = NULL;
00149 nalu = GenerateSeq_parameter_set_NALU ();
00150 len += WriteNALU (nalu);
00151 FreeNALU (nalu);
00152
00153
00154 for (i=0;i<total_pps;i++)
00155 {
00156 len = write_PPS(len, i);
00157 }
00158
00159 if (params->GenerateSEIMessage)
00160 {
00161 nalu = NULL;
00162 nalu = GenerateSEImessage_NALU();
00163 len += WriteNALU (nalu);
00164 FreeNALU (nalu);
00165 }
00166
00167 stats->bit_ctr_parametersets_n = len;
00168 return 0;
00169 }
00170
00171
00172
00173
00174
00175
00176
00177
00178 int terminate_sequence(void)
00179 {
00180
00181
00182
00183
00184
00185 switch(params->of_mode)
00186 {
00187 case PAR_OF_ANNEXB:
00188 CloseAnnexbFile();
00189 break;
00190 case PAR_OF_RTP:
00191 CloseRTPFile();
00192 return 0;
00193 default:
00194 snprintf(errortext, ET_SIZE, "Output File Mode %d not supported", params->of_mode);
00195 error(errortext,1);
00196 return 1;
00197 }
00198 return 1;
00199 }
00200