32 #define MAX_PAYLOAD_SIZE 4096 
  105     put_bits(&pb, 3,  (uint32_t)((timestamp >> 30) & 0x07));
 
  107     put_bits(&pb, 15, (uint32_t)((timestamp >> 15) & 0x7fff));
 
  109     put_bits(&pb, 15, (uint32_t)((timestamp      ) & 0x7fff));
 
  130     int size, i, private_stream_coded, 
id;
 
  186         int P_STD_max_video = 0;
 
  187         int P_STD_max_mpeg_audio = 0;
 
  188         int P_STD_max_mpeg_PS1 = 0;
 
  196             } 
else if (
id >= 0xc0 && id <= 0xc7 && stream->max_buffer_size > P_STD_max_mpeg_audio) {
 
  207         put_bits(&pb, 13, P_STD_max_video / 1024);
 
  210         if (P_STD_max_mpeg_audio == 0)
 
  211             P_STD_max_mpeg_audio = 4096;
 
  215         put_bits(&pb, 13, P_STD_max_mpeg_audio / 128);
 
  221         put_bits(&pb, 13, P_STD_max_mpeg_PS1 / 128);
 
  231         private_stream_coded = 0;
 
  239             if ( !s->
is_vcd || stream->
id==only_for_stream_id
 
  240                 || only_for_stream_id==0) {
 
  245                     if (private_stream_coded)
 
  247                     private_stream_coded = 1;
 
  275     int buf_index, i, private_stream_coded;
 
  283     private_stream_coded = 0;
 
  286         if (stream->
id < 0xc0) {
 
  287             if (private_stream_coded)
 
  289             private_stream_coded = 1;
 
  299     int bitrate, i, mpa_id, mpv_id, mps_id, ac3_id, dts_id, lpcm_id, j;
 
  306     s->
is_vcd =    (CONFIG_MPEG1VCD_MUXER  && ctx->
oformat == &ff_mpeg1vcd_muxer);
 
  307     s->
is_svcd =   (CONFIG_MPEG2SVCD_MUXER && ctx->
oformat == &ff_mpeg2svcd_muxer);
 
  308     s->
is_mpeg2 = ((CONFIG_MPEG2VOB_MUXER  && ctx->
oformat == &ff_mpeg2vob_muxer) ||
 
  309                    (CONFIG_MPEG2DVD_MUXER  && ctx->
oformat == &ff_mpeg2dvd_muxer) ||
 
  310                    (CONFIG_MPEG2SVCD_MUXER && ctx->
oformat == &ff_mpeg2svcd_muxer));
 
  311     s->
is_dvd =    (CONFIG_MPEG2DVD_MUXER  && ctx->
oformat == &ff_mpeg2dvd_muxer);
 
  348                 stream->
id = ac3_id++;
 
  350                 stream->
id = dts_id++;
 
  352                 stream->
id = lpcm_id++;
 
  353                 for(j = 0; j < 4; j++) {
 
  366                 stream->
id = mpa_id++;
 
  375             stream->
id = mpv_id++;
 
  389             stream->
id = mps_id++;
 
  415         bitrate += codec_rate;
 
  418             audio_bitrate += codec_rate;
 
  420             video_bitrate += codec_rate;
 
  428         bitrate += bitrate / 20;
 
  430         s->
mux_rate = (bitrate + (8 * 50) - 1) / (8 * 50);
 
  438         double overhead_rate;
 
  458         overhead_rate  = ((audio_bitrate / 8.0) / 2279) * (2324 - 2279);
 
  459         overhead_rate += ((video_bitrate / 8.0) / 2294) * (2324 - 2294);
 
  506              (((timestamp >> 30) & 0x07) << 1) |
 
  508     avio_wb16(pb, (uint16_t)((((timestamp >> 15) & 0x7fff) << 1) | 1));
 
  509     avio_wb16(pb, (uint16_t)((((timestamp      ) & 0x7fff) << 1) | 1));
 
  522         int64_t full_pad_bytes;
 
  551     for(i=0;i<packet_bytes;i++)
 
  563         pkt_desc= pkt_desc->
next;
 
  571                          int64_t pts, int64_t dts, int64_t scr, 
int trailer_size)
 
  576     int size, payload_size, startcode, 
id, stuffing_size, i, header_len;
 
  579     int zero_trail_bytes = 0;
 
  580     int pad_packet_bytes = 0;
 
  582     int general_pack = 0;  
 
  587     av_dlog(ctx, 
"packet ID=%2x PTS=%0.3f\n", 
id, pts / 90000.0);
 
  608                 int PES_bytes_to_fill = s->
packet_size - size - 10;
 
  612                         PES_bytes_to_fill -= 5 + 5;
 
  614                         PES_bytes_to_fill -= 5;
 
  626                     for (i = 0; i < 979; i++)
 
  632                     for (i = 0; i < 1017; i++)
 
  635                     memset(buffer, 0, 128);
 
  663         zero_trail_bytes += 20;
 
  675         pad_packet_bytes = packet_size - zero_trail_bytes;
 
  678     packet_size -= pad_packet_bytes + zero_trail_bytes;
 
  680     if (packet_size > 0) {
 
  704         payload_size = packet_size - header_len;
 
  714             startcode = 0x100 + 
id;
 
  725                 timestamp_len += s->
is_mpeg2 ? 5 : 4;
 
  727             header_len -= timestamp_len;
 
  729                 pad_packet_bytes += timestamp_len;
 
  730                 packet_size  -= timestamp_len;
 
  732                 payload_size += timestamp_len;
 
  734             stuffing_size += timestamp_len;
 
  735             if(payload_size > trailer_size)
 
  736                 stuffing_size += payload_size - trailer_size;
 
  739         if (pad_packet_bytes > 0 && pad_packet_bytes <= 7) { 
 
  740             packet_size += pad_packet_bytes;
 
  741             payload_size += pad_packet_bytes; 
 
  742             if (stuffing_size < 0) {
 
  743                 stuffing_size  = pad_packet_bytes;
 
  745                 stuffing_size += pad_packet_bytes;
 
  747             pad_packet_bytes = 0;
 
  750         if (stuffing_size < 0)
 
  755                 stuffing_size += payload_size % stream->
lpcm_align;
 
  758         if (stuffing_size > 16) {    
 
  759             pad_packet_bytes += stuffing_size;
 
  760             packet_size      -= stuffing_size;
 
  761             payload_size     -= stuffing_size;
 
  765         nb_frames= 
get_nb_frames(ctx, stream, payload_size - stuffing_size);
 
  772             for(i=0;i<stuffing_size;i++)
 
  794             avio_w8(ctx->
pb, header_len - 3 + stuffing_size);
 
  796             if (pes_flags & 0x80)  
 
  798             if (pes_flags & 0x40)  
 
  801             if (pes_flags & 0x01) {  
 
  829             for(i=0;i<stuffing_size;i++)
 
  842             } 
else if (
id >= 0x40) {
 
  858     if (pad_packet_bytes > 0)
 
  861     for(i=0;i<zero_trail_bytes;i++)
 
  874     return payload_size - stuffing_size;
 
  912               && scr > pkt_desc->
dts){ 
 
  916                        "buffer underflow st=%d bufi=%d size=%d\n",
 
  934     int i, avail_space=0, es_size, trailer_size;
 
  936     int best_score= INT_MIN;
 
  937     int ignore_constraints=0;
 
  960         if(space < s->packet_size && !ignore_constraints)
 
  963         if(next_pkt && next_pkt->
dts - scr > max_delay)
 
  968         if(rel_space > best_score){
 
  969             best_score= rel_space;
 
  976         int64_t best_dts= INT64_MAX;
 
  982             if(pkt_desc && pkt_desc->
dts < best_dts)
 
  983                 best_dts= pkt_desc->
dts;
 
  986         av_dlog(ctx, 
"bumping scr, scr:%f, dts:%f\n",
 
  987                 scr / 90000.0, best_dts / 90000.0);
 
  988         if(best_dts == INT64_MAX)
 
  991         if(scr >= best_dts+1 && !ignore_constraints){
 
  993             ignore_constraints= 1;
 
  995         scr= 
FFMAX(best_dts+1, scr);
 
 1001     assert(best_i >= 0);
 
 1008     assert(avail_space >= s->
packet_size || ignore_constraints);
 
 1015         timestamp_packet= timestamp_packet->
next;
 
 1018     if(timestamp_packet){
 
 1019         av_dlog(ctx, 
"dts:%f pts:%f scr:%f stream:%d\n",
 
 1020                 timestamp_packet->
dts / 90000.0,
 
 1021                 timestamp_packet->
pts / 90000.0,
 
 1022                 scr / 90000.0, best_i);
 
 1023         es_size= 
flush_packet(ctx, best_i, timestamp_packet->
pts, timestamp_packet->
dts, scr, trailer_size);
 
 1090     av_dlog(ctx, 
"dts:%f pts:%f flags:%d stream:%d nopts:%d\n",
 
 1091             dts / 90000.0, pts / 90000.0, pkt->
flags,
 
 1154 #define OFFSET(x) offsetof(MpegMuxContext, x) 
 1155 #define E AV_OPT_FLAG_ENCODING_PARAM 
 1158     { 
"preload", 
"Initial demux-decode delay in microseconds.", 
OFFSET(preload),  
AV_OPT_TYPE_INT, {.i64 = 500000}, 0, INT_MAX, 
E},
 
 1162 #define MPEGENC_CLASS(flavor)\ 
 1163 static const AVClass flavor ## _class = {\ 
 1164     .class_name = #flavor " muxer",\ 
 1165     .item_name  = av_default_item_name,\ 
 1166     .version    = LIBAVUTIL_VERSION_INT,\ 
 1170 #if CONFIG_MPEG1SYSTEM_MUXER 
 1175     .mime_type         = 
"video/mpeg",
 
 1176     .extensions        = 
"mpg,mpeg",
 
 1183     .priv_class        = &mpeg_class,
 
 1186 #if CONFIG_MPEG1VCD_MUXER 
 1191     .mime_type         = 
"video/mpeg",
 
 1198     .priv_class        = &vcd_class,
 
 1201 #if CONFIG_MPEG2VOB_MUXER 
 1206     .mime_type         = 
"video/mpeg",
 
 1207     .extensions        = 
"vob",
 
 1214     .priv_class        = &vob_class,
 
 1219 #if CONFIG_MPEG2SVCD_MUXER 
 1224     .mime_type         = 
"video/mpeg",
 
 1225     .extensions        = 
"vob",
 
 1232     .priv_class        = &svcd_class,
 
 1237 #if CONFIG_MPEG2DVD_MUXER 
 1242     .mime_type         = 
"video/mpeg",
 
 1243     .extensions        = 
"dvd",
 
 1250     .priv_class        = &dvd_class,