3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 #include "libavutil/attributes.h"
25 #include "libavutil/fifo.h"
26 #include "libavutil/log.h"
27 #include "libavutil/mathematics.h"
28 #include "libavutil/opt.h"
30 #include "libavcodec/put_bits.h"
36 #define MAX_PAYLOAD_SIZE 4096
38 typedef struct PacketDesc {
43 struct PacketDesc *next;
46 typedef struct StreamInfo {
49 int max_buffer_size; /* in bytes */
51 PacketDesc *predecode_packet;
52 PacketDesc *premux_packet;
53 PacketDesc **next_packet;
55 uint8_t lpcm_header[3];
59 int64_t vobu_start_pts;
62 typedef struct MpegMuxContext {
64 int packet_size; /* required packet size */
66 int pack_header_freq; /* frequency (in packets^-1) at which we send pack headers */
67 int system_header_freq;
68 int system_header_size;
69 int user_mux_rate; /* bitrate in units of bits/s */
70 int mux_rate; /* bitrate in units of 50 bytes/s */
78 int64_t last_scr; /* current system clock */
80 int64_t vcd_padding_bitrate_num;
81 int64_t vcd_padding_bytes_written;
86 extern AVOutputFormat ff_mpeg1vcd_muxer;
87 extern AVOutputFormat ff_mpeg2dvd_muxer;
88 extern AVOutputFormat ff_mpeg2svcd_muxer;
89 extern AVOutputFormat ff_mpeg2vob_muxer;
91 static int put_pack_header(AVFormatContext *ctx, uint8_t *buf,
94 MpegMuxContext *s = ctx->priv_data;
97 init_put_bits(&pb, buf, 128);
99 put_bits32(&pb, PACK_START_CODE);
101 put_bits(&pb, 2, 0x1);
103 put_bits(&pb, 4, 0x2);
104 put_bits(&pb, 3, (uint32_t)((timestamp >> 30) & 0x07));
106 put_bits(&pb, 15, (uint32_t)((timestamp >> 15) & 0x7fff));
108 put_bits(&pb, 15, (uint32_t)((timestamp) & 0x7fff));
111 /* clock extension */
114 put_bits(&pb, 22, s->mux_rate);
118 put_bits(&pb, 5, 0x1f); /* reserved */
119 put_bits(&pb, 3, 0); /* stuffing length */
122 return put_bits_ptr(&pb) - pb.buf;
125 static int put_system_header(AVFormatContext *ctx, uint8_t *buf,
126 int only_for_stream_id)
128 MpegMuxContext *s = ctx->priv_data;
129 int size, i, private_stream_coded, id;
132 init_put_bits(&pb, buf, 128);
134 put_bits32(&pb, SYSTEM_HEADER_START_CODE);
135 put_bits(&pb, 16, 0);
138 /* maximum bit rate of the multiplexed stream */
139 put_bits(&pb, 22, s->mux_rate);
140 put_bits(&pb, 1, 1); /* marker */
141 if (s->is_vcd && only_for_stream_id == VIDEO_ID) {
142 /* This header applies only to the video stream
143 * (see VCD standard p. IV-7) */
146 put_bits(&pb, 6, s->audio_bound);
149 /* see VCD standard, p. IV-7 */
153 put_bits(&pb, 1, 0); /* variable bitrate */
154 put_bits(&pb, 1, 0); /* nonconstrained bitstream */
157 if (s->is_vcd || s->is_dvd) {
158 /* see VCD standard p IV-7 */
159 put_bits(&pb, 1, 1); /* audio locked */
160 put_bits(&pb, 1, 1); /* video locked */
162 put_bits(&pb, 1, 0); /* audio locked */
163 put_bits(&pb, 1, 0); /* video locked */
166 put_bits(&pb, 1, 1); /* marker */
168 if (s->is_vcd && (only_for_stream_id & 0xe0) == AUDIO_ID) {
169 /* This header applies only to the audio stream
170 * (see VCD standard p. IV-7) */
173 put_bits(&pb, 5, s->video_bound);
176 put_bits(&pb, 1, 0); /* packet_rate_restriction_flag */
177 put_bits(&pb, 7, 0x7f); /* reserved byte */
179 put_bits(&pb, 8, 0xff); /* reserved byte */
181 /* DVD-Video Stream_bound entries
182 * id (0xB9) video, maximum P-STD for stream 0xE0. (P-STD_buffer_bound_scale = 1)
183 * id (0xB8) audio, maximum P-STD for any MPEG audio (0xC0 to 0xC7) streams. If there are none set to 4096 (32x128). (P-STD_buffer_bound_scale = 0)
184 * id (0xBD) private stream 1 (audio other than MPEG and subpictures). (P-STD_buffer_bound_scale = 1)
185 * id (0xBF) private stream 2, NAV packs, set to 2x1024. */
188 int P_STD_max_video = 0;
189 int P_STD_max_mpeg_audio = 0;
190 int P_STD_max_mpeg_PS1 = 0;
192 for (i = 0; i < ctx->nb_streams; i++) {
193 StreamInfo *stream = ctx->streams[i]->priv_data;
196 if (id == 0xbd && stream->max_buffer_size > P_STD_max_mpeg_PS1) {
197 P_STD_max_mpeg_PS1 = stream->max_buffer_size;
198 } else if (id >= 0xc0 && id <= 0xc7 &&
199 stream->max_buffer_size > P_STD_max_mpeg_audio) {
200 P_STD_max_mpeg_audio = stream->max_buffer_size;
201 } else if (id == 0xe0 &&
202 stream->max_buffer_size > P_STD_max_video) {
203 P_STD_max_video = stream->max_buffer_size;
208 put_bits(&pb, 8, 0xb9); /* stream ID */
211 put_bits(&pb, 13, P_STD_max_video / 1024);
214 if (P_STD_max_mpeg_audio == 0)
215 P_STD_max_mpeg_audio = 4096;
216 put_bits(&pb, 8, 0xb8); /* stream ID */
219 put_bits(&pb, 13, P_STD_max_mpeg_audio / 128);
221 /* private stream 1 */
222 put_bits(&pb, 8, 0xbd); /* stream ID */
225 put_bits(&pb, 13, P_STD_max_mpeg_PS1 / 128);
227 /* private stream 2 */
228 put_bits(&pb, 8, 0xbf); /* stream ID */
231 put_bits(&pb, 13, 2);
233 /* audio stream info */
234 private_stream_coded = 0;
235 for (i = 0; i < ctx->nb_streams; i++) {
236 StreamInfo *stream = ctx->streams[i]->priv_data;
238 /* For VCDs, only include the stream info for the stream
239 * that the pack which contains this system belongs to.
240 * (see VCD standard p. IV-7) */
241 if (!s->is_vcd || stream->id == only_for_stream_id ||
242 only_for_stream_id == 0) {
245 /* special case for private streams (AC-3 uses that) */
246 if (private_stream_coded)
248 private_stream_coded = 1;
251 put_bits(&pb, 8, id); /* stream ID */
256 put_bits(&pb, 13, stream->max_buffer_size / 128);
260 put_bits(&pb, 13, stream->max_buffer_size / 1024);
267 size = put_bits_ptr(&pb) - pb.buf;
268 /* patch packet size */
269 AV_WB16(buf + 4, size - 6);
274 static int get_system_header_size(AVFormatContext *ctx)
276 int buf_index, i, private_stream_coded;
278 MpegMuxContext *s = ctx->priv_data;
281 return 18; // DVD-Video system headers are 18 bytes fixed length.
284 private_stream_coded = 0;
285 for (i = 0; i < ctx->nb_streams; i++) {
286 stream = ctx->streams[i]->priv_data;
287 if (stream->id < 0xc0) {
288 if (private_stream_coded)
290 private_stream_coded = 1;
297 static av_cold int mpeg_mux_init(AVFormatContext *ctx)
299 MpegMuxContext *s = ctx->priv_data;
300 int bitrate, i, mpa_id, mpv_id, h264_id, mps_id, ac3_id, dts_id, lpcm_id, j;
306 s->packet_number = 0;
307 s->is_vcd = (CONFIG_MPEG1VCD_MUXER && ctx->oformat == &ff_mpeg1vcd_muxer);
308 s->is_svcd = (CONFIG_MPEG2SVCD_MUXER && ctx->oformat == &ff_mpeg2svcd_muxer);
309 s->is_mpeg2 = ((CONFIG_MPEG2VOB_MUXER && ctx->oformat == &ff_mpeg2vob_muxer) ||
310 (CONFIG_MPEG2DVD_MUXER && ctx->oformat == &ff_mpeg2dvd_muxer) ||
311 (CONFIG_MPEG2SVCD_MUXER && ctx->oformat == &ff_mpeg2svcd_muxer));
312 s->is_dvd = (CONFIG_MPEG2DVD_MUXER && ctx->oformat == &ff_mpeg2dvd_muxer);
314 if (ctx->packet_size) {
315 if (ctx->packet_size < 20 || ctx->packet_size > (1 << 23) + 10) {
316 av_log(ctx, AV_LOG_ERROR, "Invalid packet size %d\n",
320 s->packet_size = ctx->packet_size;
322 s->packet_size = 2048;
323 if (ctx->max_delay < 0) /* Not set by the caller */
324 ctx->max_delay = AV_TIME_BASE*7/10;
326 s->vcd_padding_bytes_written = 0;
327 s->vcd_padding_bitrate_num = 0;
340 for (i = 0; i < ctx->nb_streams; i++) {
341 AVCPBProperties *props;
343 st = ctx->streams[i];
344 stream = av_mallocz(sizeof(StreamInfo));
347 st->priv_data = stream;
349 avpriv_set_pts_info(st, 64, 1, 90000);
351 switch (st->codecpar->codec_type) {
352 case AVMEDIA_TYPE_AUDIO:
354 (st->codecpar->codec_id == AV_CODEC_ID_AC3 ||
355 st->codecpar->codec_id == AV_CODEC_ID_DTS ||
356 st->codecpar->codec_id == AV_CODEC_ID_PCM_S16BE ||
357 st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD))
358 av_log(ctx, AV_LOG_WARNING,
359 "%s in MPEG-1 system streams is not widely supported, "
360 "consider using the vob or the dvd muxer "
361 "to force a MPEG-2 program stream.\n",
362 avcodec_get_name(st->codecpar->codec_id));
363 if (st->codecpar->codec_id == AV_CODEC_ID_AC3) {
364 stream->id = ac3_id++;
365 } else if (st->codecpar->codec_id == AV_CODEC_ID_DTS) {
366 stream->id = dts_id++;
367 } else if (st->codecpar->codec_id == AV_CODEC_ID_PCM_S16BE ||
368 st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) {
369 if (st->codecpar->bits_per_coded_sample != 16) {
370 av_log(ctx, AV_LOG_ERROR, "Only 16 bit LPCM streams can be muxed.\n");
373 stream->id = lpcm_id++;
374 for (j = 0; j < 4; j++) {
375 if (lpcm_freq_tab[j] == st->codecpar->sample_rate)
380 if (st->codecpar->channels > 8)
382 stream->lpcm_header[0] = 0x0c;
383 stream->lpcm_header[1] = (st->codecpar->channels - 1) | (j << 4);
384 stream->lpcm_header[2] = 0x80;
385 stream->lpcm_align = st->codecpar->channels * 2;
387 stream->id = mpa_id++;
390 /* This value HAS to be used for VCD (see VCD standard, p. IV-7).
391 * Right now it is also used for everything else. */
392 stream->max_buffer_size = 4 * 1024;
395 case AVMEDIA_TYPE_VIDEO:
396 if (st->codecpar->codec_id == AV_CODEC_ID_H264)
397 stream->id = h264_id++;
399 stream->id = mpv_id++;
401 props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
402 if (props && props->buffer_size)
403 stream->max_buffer_size = 6 * 1024 + props->buffer_size / 8;
405 av_log(ctx, AV_LOG_WARNING,
406 "VBV buffer size not set, using default size of 230KB\n"
407 "If you want the mpeg file to be compliant to some specification\n"
408 "Like DVD, VCD or others, make sure you set the correct buffer size\n");
409 // FIXME: this is probably too small as default
410 stream->max_buffer_size = 230 * 1024;
412 if (stream->max_buffer_size > 1024 * 8191) {
413 av_log(ctx, AV_LOG_WARNING, "buffer size %d, too large\n", stream->max_buffer_size);
414 stream->max_buffer_size = 1024 * 8191;
418 case AVMEDIA_TYPE_SUBTITLE:
419 stream->id = mps_id++;
420 stream->max_buffer_size = 16 * 1024;
423 av_log(ctx, AV_LOG_ERROR, "Invalid media type %s for output stream #%d\n",
424 av_get_media_type_string(st->codecpar->codec_type), i);
425 return AVERROR(EINVAL);
427 stream->fifo = av_fifo_alloc(16);
434 for (i = 0; i < ctx->nb_streams; i++) {
435 AVCPBProperties *props;
437 st = ctx->streams[i];
438 stream = (StreamInfo *)st->priv_data;
440 props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
442 codec_rate = props->max_bitrate;
444 codec_rate = st->codecpar->bit_rate;
447 codec_rate = (1 << 21) * 8 * 50 / ctx->nb_streams;
449 bitrate += codec_rate;
451 if ((stream->id & 0xe0) == AUDIO_ID)
452 audio_bitrate += codec_rate;
453 else if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
454 video_bitrate += codec_rate;
457 if (s->user_mux_rate) {
458 s->mux_rate = (s->user_mux_rate + (8 * 50) - 1) / (8 * 50);
460 /* we increase slightly the bitrate to take into account the
461 * headers. XXX: compute it exactly */
462 bitrate += bitrate / 20;
464 s->mux_rate = (bitrate + (8 * 50) - 1) / (8 * 50);
465 if (s->mux_rate >= (1<<22)) {
466 av_log(ctx, AV_LOG_WARNING, "mux rate %d is too large\n", s->mux_rate);
467 s->mux_rate = (1<<22) - 1;
472 int64_t overhead_rate;
474 /* The VCD standard mandates that the mux_rate field is 3528
475 * (see standard p. IV-6).
476 * The value is actually "wrong", i.e. if you calculate
477 * it using the normal formula and the 75 sectors per second transfer
478 * rate you get a different value because the real pack size is 2324,
479 * not 2352. But the standard explicitly specifies that the mux_rate
480 * field in the header must have this value. */
481 // s->mux_rate = 2352 * 75 / 50; /* = 3528 */
483 /* The VCD standard states that the muxed stream must be
484 * exactly 75 packs / second (the data rate of a single speed cdrom).
485 * Since the video bitrate (probably 1150000 bits/sec) will be below
486 * the theoretical maximum we have to add some padding packets
487 * to make up for the lower data rate.
488 * (cf. VCD standard p. IV-6 ) */
490 /* Add the header overhead to the data rate.
491 * 2279 data bytes per audio pack, 2294 data bytes per video pack */
492 overhead_rate = audio_bitrate * 2294LL * (2324 - 2279);
493 overhead_rate += video_bitrate * 2279LL * (2324 - 2294);
495 /* Add padding so that the full bitrate is 2324*75 bytes/sec */
496 s->vcd_padding_bitrate_num = (2324LL * 75 * 8 - bitrate) * 2279 * 2294 - overhead_rate;
497 #define VCD_PADDING_BITRATE_DEN (2279 * 2294)
500 if (s->is_vcd || s->is_mpeg2)
502 s->pack_header_freq = 1;
504 /* every 2 seconds */
505 s->pack_header_freq = 2 * bitrate / s->packet_size / 8;
507 /* the above seems to make pack_header_freq zero sometimes */
508 if (s->pack_header_freq == 0)
509 s->pack_header_freq = 1;
512 /* every 200 packets. Need to look at the spec. */
513 s->system_header_freq = s->pack_header_freq * 40;
515 /* the standard mandates that there are only two system headers
516 * in the whole file: one in the first packet of each stream.
517 * (see standard p. IV-7 and IV-8) */
518 s->system_header_freq = 0x7fffffff;
520 s->system_header_freq = s->pack_header_freq * 5;
522 for (i = 0; i < ctx->nb_streams; i++) {
523 stream = ctx->streams[i]->priv_data;
524 stream->packet_number = 0;
526 s->system_header_size = get_system_header_size(ctx);
527 s->last_scr = AV_NOPTS_VALUE;
531 for (i = 0; i < ctx->nb_streams; i++)
532 av_freep(&ctx->streams[i]->priv_data);
533 return AVERROR(ENOMEM);
536 static inline void put_timestamp(AVIOContext *pb, int id, int64_t timestamp)
538 avio_w8(pb, (id << 4) | (((timestamp >> 30) & 0x07) << 1) | 1);
539 avio_wb16(pb, (uint16_t)((((timestamp >> 15) & 0x7fff) << 1) | 1));
540 avio_wb16(pb, (uint16_t)((((timestamp) & 0x7fff) << 1) | 1));
543 /* return the number of padding bytes that should be inserted into
544 * the multiplexed stream. */
545 static int get_vcd_padding_size(AVFormatContext *ctx, int64_t pts)
547 MpegMuxContext *s = ctx->priv_data;
550 if (s->vcd_padding_bitrate_num > 0 && pts != AV_NOPTS_VALUE) {
551 int64_t full_pad_bytes;
553 // FIXME: this is wrong
555 av_rescale(s->vcd_padding_bitrate_num, pts, 90000LL * 8 * VCD_PADDING_BITRATE_DEN);
556 pad_bytes = (int)(full_pad_bytes - s->vcd_padding_bytes_written);
559 /* might happen if we have already padded to a later timestamp. This
560 * can occur if another stream has already advanced further. */
567 /* Write an MPEG padding packet header. */
568 static void put_padding_packet(AVFormatContext *ctx, AVIOContext *pb,
571 MpegMuxContext *s = ctx->priv_data;
574 avio_wb32(pb, PADDING_STREAM);
575 avio_wb16(pb, packet_bytes - 6);
582 for (i = 0; i < packet_bytes; i++)
586 static int get_nb_frames(AVFormatContext *ctx, StreamInfo *stream, int len)
589 PacketDesc *pkt_desc = stream->premux_packet;
592 if (pkt_desc->size == pkt_desc->unwritten_size)
594 len -= pkt_desc->unwritten_size;
595 pkt_desc = pkt_desc->next;
601 /* flush the packet on stream stream_index */
602 static int flush_packet(AVFormatContext *ctx, int stream_index,
603 int64_t pts, int64_t dts, int64_t scr, int trailer_size)
605 MpegMuxContext *s = ctx->priv_data;
606 StreamInfo *stream = ctx->streams[stream_index]->priv_data;
608 int size, payload_size, startcode, id, stuffing_size, i, header_len;
611 int zero_trail_bytes = 0;
612 int pad_packet_bytes = 0;
614 /* "general" pack without data specific to one stream? */
615 int general_pack = 0;
620 av_log(ctx, AV_LOG_TRACE, "packet ID=%2x PTS=%0.3f\n", id, pts / 90000.0);
624 if ((s->packet_number % s->pack_header_freq) == 0 || s->last_scr != scr) {
625 /* output pack and systems header if needed */
626 size = put_pack_header(ctx, buf_ptr, scr);
631 /* there is exactly one system header for each stream in a VCD MPEG,
632 * One in the very first video packet and one in the very first
633 * audio packet (see VCD standard p. IV-7 and IV-8). */
635 if (stream->packet_number == 0) {
636 size = put_system_header(ctx, buf_ptr, id);
639 } else if (s->is_dvd) {
640 if (stream->align_iframe || s->packet_number == 0) {
641 int PES_bytes_to_fill = s->packet_size - size - 10;
643 if (pts != AV_NOPTS_VALUE) {
645 PES_bytes_to_fill -= 5 + 5;
647 PES_bytes_to_fill -= 5;
650 if (stream->bytes_to_iframe == 0 || s->packet_number == 0) {
651 size = put_system_header(ctx, buf_ptr, 0);
653 size = buf_ptr - buffer;
654 avio_write(ctx->pb, buffer, size);
656 avio_wb32(ctx->pb, PRIVATE_STREAM_2);
657 avio_wb16(ctx->pb, 0x03d4); // length
658 avio_w8(ctx->pb, 0x00); // substream ID, 00=PCI
659 for (i = 0; i < 979; i++)
660 avio_w8(ctx->pb, 0x00);
662 avio_wb32(ctx->pb, PRIVATE_STREAM_2);
663 avio_wb16(ctx->pb, 0x03fa); // length
664 avio_w8(ctx->pb, 0x01); // substream ID, 01=DSI
665 for (i = 0; i < 1017; i++)
666 avio_w8(ctx->pb, 0x00);
668 memset(buffer, 0, 128);
671 stream->align_iframe = 0;
672 // FIXME: rounding and first few bytes of each packet
673 scr += s->packet_size * 90000LL /
674 (s->mux_rate * 50LL);
675 size = put_pack_header(ctx, buf_ptr, scr);
679 } else if (stream->bytes_to_iframe < PES_bytes_to_fill) {
680 pad_packet_bytes = PES_bytes_to_fill -
681 stream->bytes_to_iframe;
685 if ((s->packet_number % s->system_header_freq) == 0) {
686 size = put_system_header(ctx, buf_ptr, 0);
691 size = buf_ptr - buffer;
692 avio_write(ctx->pb, buffer, size);
694 packet_size = s->packet_size - size;
696 if (s->is_vcd && (id & 0xe0) == AUDIO_ID)
697 /* The VCD standard demands that 20 zero bytes follow
698 * each audio pack (see standard p. IV-8). */
699 zero_trail_bytes += 20;
701 if ((s->is_vcd && stream->packet_number == 0) ||
702 (s->is_svcd && s->packet_number == 0)) {
703 /* for VCD the first pack of each stream contains only the pack header,
704 * the system header and lots of padding (see VCD standard p. IV-6).
705 * In the case of an audio pack, 20 zero bytes are also added at
707 /* For SVCD we fill the very first pack to increase compatibility with
708 * some DVD players. Not mandated by the standard. */
710 /* the system header refers to both streams and no stream data */
712 pad_packet_bytes = packet_size - zero_trail_bytes;
715 packet_size -= pad_packet_bytes + zero_trail_bytes;
717 if (packet_size > 0) {
718 /* packet header size */
724 if (stream->packet_number == 0)
725 header_len += 3; /* PES extension */
726 header_len += 1; /* obligatory stuffing byte */
730 if (pts != AV_NOPTS_VALUE) {
740 payload_size = packet_size - header_len;
742 startcode = PRIVATE_STREAM_1;
750 startcode = 0x100 + id;
753 stuffing_size = payload_size - av_fifo_size(stream->fifo);
755 // first byte does not fit -> reset pts/dts + stuffing
756 if (payload_size <= trailer_size && pts != AV_NOPTS_VALUE) {
757 int timestamp_len = 0;
760 if (pts != AV_NOPTS_VALUE)
761 timestamp_len += s->is_mpeg2 ? 5 : 4;
763 dts = AV_NOPTS_VALUE;
764 header_len -= timestamp_len;
765 if (s->is_dvd && stream->align_iframe) {
766 pad_packet_bytes += timestamp_len;
767 packet_size -= timestamp_len;
769 payload_size += timestamp_len;
771 stuffing_size += timestamp_len;
772 if (payload_size > trailer_size)
773 stuffing_size += payload_size - trailer_size;
776 // can't use padding, so use stuffing
777 if (pad_packet_bytes > 0 && pad_packet_bytes <= 7) {
778 packet_size += pad_packet_bytes;
779 payload_size += pad_packet_bytes; // undo the previous adjustment
780 if (stuffing_size < 0)
781 stuffing_size = pad_packet_bytes;
783 stuffing_size += pad_packet_bytes;
784 pad_packet_bytes = 0;
787 if (stuffing_size < 0)
790 if (startcode == PRIVATE_STREAM_1 && id >= 0xa0) {
791 if (payload_size < av_fifo_size(stream->fifo))
792 stuffing_size += payload_size % stream->lpcm_align;
795 if (stuffing_size > 16) { /* <=16 for MPEG-1, <=32 for MPEG-2 */
796 pad_packet_bytes += stuffing_size;
797 packet_size -= stuffing_size;
798 payload_size -= stuffing_size;
802 nb_frames = get_nb_frames(ctx, stream, payload_size - stuffing_size);
804 avio_wb32(ctx->pb, startcode);
806 avio_wb16(ctx->pb, packet_size);
809 for (i = 0; i < stuffing_size; i++)
810 avio_w8(ctx->pb, 0xff);
813 avio_w8(ctx->pb, 0x80); /* mpeg2 id */
817 if (pts != AV_NOPTS_VALUE) {
823 /* Both the MPEG-2 and the SVCD standards demand that the
824 * P-STD_buffer_size field be included in the first packet of
825 * every stream. (see SVCD standard p. 26 V.2.3.1 and V.2.3.2
826 * and MPEG-2 standard 2.7.7) */
827 if (stream->packet_number == 0)
830 avio_w8(ctx->pb, pes_flags); /* flags */
831 avio_w8(ctx->pb, header_len - 3 + stuffing_size);
833 if (pes_flags & 0x80) /* write pts */
834 put_timestamp(ctx->pb, (pes_flags & 0x40) ? 0x03 : 0x02, pts);
835 if (pes_flags & 0x40) /* write dts */
836 put_timestamp(ctx->pb, 0x01, dts);
838 if (pes_flags & 0x01) { /* write pes extension */
839 avio_w8(ctx->pb, 0x10); /* flags */
841 /* P-STD buffer info */
842 if ((id & 0xe0) == AUDIO_ID)
843 avio_wb16(ctx->pb, 0x4000 | stream->max_buffer_size / 128);
845 avio_wb16(ctx->pb, 0x6000 | stream->max_buffer_size / 1024);
848 if (pts != AV_NOPTS_VALUE) {
850 put_timestamp(ctx->pb, 0x03, pts);
851 put_timestamp(ctx->pb, 0x01, dts);
853 put_timestamp(ctx->pb, 0x02, pts);
856 avio_w8(ctx->pb, 0x0f);
861 /* special stuffing byte that is always written
862 * to prevent accidental generation of start codes. */
863 avio_w8(ctx->pb, 0xff);
865 for (i = 0; i < stuffing_size; i++)
866 avio_w8(ctx->pb, 0xff);
869 if (startcode == PRIVATE_STREAM_1) {
870 avio_w8(ctx->pb, id);
872 /* LPCM (XXX: check nb_frames) */
874 avio_wb16(ctx->pb, 4); /* skip 3 header bytes */
875 avio_w8(ctx->pb, stream->lpcm_header[0]);
876 avio_w8(ctx->pb, stream->lpcm_header[1]);
877 avio_w8(ctx->pb, stream->lpcm_header[2]);
878 } else if (id >= 0x40) {
880 avio_w8(ctx->pb, nb_frames);
881 avio_wb16(ctx->pb, trailer_size + 1);
886 av_assert0(payload_size - stuffing_size <= av_fifo_size(stream->fifo));
887 av_fifo_generic_read(stream->fifo, ctx->pb,
888 payload_size - stuffing_size,
889 (void (*)(void*, void*, int))avio_write);
890 stream->bytes_to_iframe -= payload_size - stuffing_size;
896 if (pad_packet_bytes > 0)
897 put_padding_packet(ctx, ctx->pb, pad_packet_bytes);
899 for (i = 0; i < zero_trail_bytes; i++)
900 avio_w8(ctx->pb, 0x00);
906 /* only increase the stream packet number if this pack actually contains
907 * something that is specific to this stream! I.e. a dedicated header
910 stream->packet_number++;
912 return payload_size - stuffing_size;
915 static void put_vcd_padding_sector(AVFormatContext *ctx)
917 /* There are two ways to do this padding: writing a sector/pack
918 * of 0 values, or writing an MPEG padding pack. Both seem to
919 * work with most decoders, BUT the VCD standard only allows a 0-sector
920 * (see standard p. IV-4, IV-5).
921 * So a 0-sector it is... */
923 MpegMuxContext *s = ctx->priv_data;
926 for (i = 0; i < s->packet_size; i++)
929 s->vcd_padding_bytes_written += s->packet_size;
933 /* increasing the packet number is correct. The SCR of the following packs
934 * is calculated from the packet_number and it has to include the padding
935 * sector (it represents the sector index, not the MPEG pack index)
936 * (see VCD standard p. IV-6) */
940 static int remove_decoded_packets(AVFormatContext *ctx, int64_t scr)
944 for (i = 0; i < ctx->nb_streams; i++) {
945 AVStream *st = ctx->streams[i];
946 StreamInfo *stream = st->priv_data;
947 PacketDesc *pkt_desc;
949 while ((pkt_desc = stream->predecode_packet) &&
950 scr > pkt_desc->dts) { // FIXME: > vs >=
951 if (stream->buffer_index < pkt_desc->size ||
952 stream->predecode_packet == stream->premux_packet) {
953 av_log(ctx, AV_LOG_ERROR,
954 "buffer underflow st=%d bufi=%d size=%d\n",
955 i, stream->buffer_index, pkt_desc->size);
958 stream->buffer_index -= pkt_desc->size;
959 stream->predecode_packet = pkt_desc->next;
967 static int output_packet(AVFormatContext *ctx, int flush)
969 MpegMuxContext *s = ctx->priv_data;
972 int i, avail_space = 0, es_size, trailer_size;
974 int best_score = INT_MIN;
975 int ignore_constraints = 0;
976 int ignore_delay = 0;
977 int64_t scr = s->last_scr;
978 PacketDesc *timestamp_packet;
979 const int64_t max_delay = av_rescale(ctx->max_delay, 90000, AV_TIME_BASE);
982 for (i = 0; i < ctx->nb_streams; i++) {
983 AVStream *st = ctx->streams[i];
984 StreamInfo *stream = st->priv_data;
985 const int avail_data = av_fifo_size(stream->fifo);
986 const int space = stream->max_buffer_size - stream->buffer_index;
987 int rel_space = 1024LL * space / stream->max_buffer_size;
988 PacketDesc *next_pkt = stream->premux_packet;
990 /* for subtitle, a single PES packet must be generated,
991 * so we flush after every single subtitle packet */
992 if (s->packet_size > avail_data && !flush
993 && st->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE)
997 av_assert0(avail_data > 0);
999 if (space < s->packet_size && !ignore_constraints)
1002 if (next_pkt && next_pkt->dts - scr > max_delay && !ignore_delay)
1004 if ( stream->predecode_packet
1005 && stream->predecode_packet->size > stream->buffer_index)
1007 if (rel_space > best_score) {
1008 best_score = rel_space;
1010 avail_space = space;
1015 int64_t best_dts = INT64_MAX;
1018 for (i = 0; i < ctx->nb_streams; i++) {
1019 AVStream *st = ctx->streams[i];
1020 StreamInfo *stream = st->priv_data;
1021 PacketDesc *pkt_desc = stream->predecode_packet;
1022 if (pkt_desc && pkt_desc->dts < best_dts)
1023 best_dts = pkt_desc->dts;
1024 has_premux |= !!stream->premux_packet;
1027 if (best_dts < INT64_MAX) {
1028 av_log(ctx, AV_LOG_TRACE, "bumping scr, scr:%f, dts:%f\n",
1029 scr / 90000.0, best_dts / 90000.0);
1031 if (scr >= best_dts + 1 && !ignore_constraints) {
1032 av_log(ctx, AV_LOG_ERROR,
1033 "packet too large, ignoring buffer limits to mux it\n");
1034 ignore_constraints = 1;
1036 scr = FFMAX(best_dts + 1, scr);
1037 if (remove_decoded_packets(ctx, scr) < 0)
1039 } else if (has_premux && flush) {
1040 av_log(ctx, AV_LOG_ERROR,
1041 "delay too large, ignoring ...\n");
1043 ignore_constraints = 1;
1050 av_assert0(best_i >= 0);
1052 st = ctx->streams[best_i];
1053 stream = st->priv_data;
1055 av_assert0(av_fifo_size(stream->fifo) > 0);
1057 av_assert0(avail_space >= s->packet_size || ignore_constraints);
1059 timestamp_packet = stream->premux_packet;
1060 if (timestamp_packet->unwritten_size == timestamp_packet->size) {
1063 trailer_size = timestamp_packet->unwritten_size;
1064 timestamp_packet = timestamp_packet->next;
1067 if (timestamp_packet) {
1068 av_log(ctx, AV_LOG_TRACE, "dts:%f pts:%f scr:%f stream:%d\n",
1069 timestamp_packet->dts / 90000.0,
1070 timestamp_packet->pts / 90000.0,
1071 scr / 90000.0, best_i);
1072 es_size = flush_packet(ctx, best_i, timestamp_packet->pts,
1073 timestamp_packet->dts, scr, trailer_size);
1075 av_assert0(av_fifo_size(stream->fifo) == trailer_size);
1076 es_size = flush_packet(ctx, best_i, AV_NOPTS_VALUE, AV_NOPTS_VALUE, scr,
1081 /* Write one or more padding sectors, if necessary, to reach
1082 * the constant overall bitrate. */
1085 // FIXME: pts cannot be correct here
1086 while ((vcd_pad_bytes = get_vcd_padding_size(ctx, stream->premux_packet->pts)) >= s->packet_size) {
1087 put_vcd_padding_sector(ctx);
1088 // FIXME: rounding and first few bytes of each packet
1089 s->last_scr += s->packet_size * 90000LL / (s->mux_rate * 50LL);
1093 stream->buffer_index += es_size;
1094 // FIXME: rounding and first few bytes of each packet
1095 s->last_scr += s->packet_size * 90000LL / (s->mux_rate * 50LL);
1097 while (stream->premux_packet &&
1098 stream->premux_packet->unwritten_size <= es_size) {
1099 es_size -= stream->premux_packet->unwritten_size;
1100 stream->premux_packet = stream->premux_packet->next;
1103 av_assert0(stream->premux_packet);
1104 stream->premux_packet->unwritten_size -= es_size;
1107 if (remove_decoded_packets(ctx, s->last_scr) < 0)
1113 static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt)
1115 int stream_index = pkt->stream_index;
1116 int size = pkt->size;
1117 uint8_t *buf = pkt->data;
1118 MpegMuxContext *s = ctx->priv_data;
1119 AVStream *st = ctx->streams[stream_index];
1120 StreamInfo *stream = st->priv_data;
1122 PacketDesc *pkt_desc;
1124 const int is_iframe = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
1125 (pkt->flags & AV_PKT_FLAG_KEY);
1127 preload = av_rescale(s->preload, 90000, AV_TIME_BASE);
1132 if (s->last_scr == AV_NOPTS_VALUE) {
1133 if (dts == AV_NOPTS_VALUE || (dts < preload && ctx->avoid_negative_ts) || s->is_dvd) {
1134 if (dts != AV_NOPTS_VALUE)
1135 s->preload += av_rescale(-dts, AV_TIME_BASE, 90000);
1138 s->last_scr = dts - preload;
1141 preload = av_rescale(s->preload, 90000, AV_TIME_BASE);
1142 av_log(ctx, AV_LOG_DEBUG, "First SCR: %"PRId64" First DTS: %"PRId64"\n", s->last_scr, dts + preload);
1145 if (dts != AV_NOPTS_VALUE) dts += preload;
1146 if (pts != AV_NOPTS_VALUE) pts += preload;
1148 av_log(ctx, AV_LOG_TRACE, "dts:%f pts:%f flags:%d stream:%d nopts:%d\n",
1149 dts / 90000.0, pts / 90000.0, pkt->flags,
1150 pkt->stream_index, pts != AV_NOPTS_VALUE);
1151 if (!stream->premux_packet)
1152 stream->next_packet = &stream->premux_packet;
1153 *stream->next_packet =
1154 pkt_desc = av_mallocz(sizeof(PacketDesc));
1156 return AVERROR(ENOMEM);
1157 pkt_desc->pts = pts;
1158 pkt_desc->dts = dts;
1160 if (st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) {
1162 av_log(ctx, AV_LOG_ERROR, "Invalid packet size %d\n", size);
1163 return AVERROR(EINVAL);
1166 /* Skip first 3 bytes of packet data, which comprise PCM header
1167 and will be written fresh by this muxer. */
1172 pkt_desc->unwritten_size =
1173 pkt_desc->size = size;
1174 if (!stream->predecode_packet)
1175 stream->predecode_packet = pkt_desc;
1176 stream->next_packet = &pkt_desc->next;
1178 if (av_fifo_realloc2(stream->fifo, av_fifo_size(stream->fifo) + size) < 0)
1182 // min VOBU length 0.4 seconds (mpucoder)
1184 (s->packet_number == 0 ||
1185 (pts - stream->vobu_start_pts >= 36000))) {
1186 stream->bytes_to_iframe = av_fifo_size(stream->fifo);
1187 stream->align_iframe = 1;
1188 stream->vobu_start_pts = pts;
1192 av_fifo_generic_write(stream->fifo, buf, size, NULL);
1195 int ret = output_packet(ctx, 0);
1201 static int mpeg_mux_end(AVFormatContext *ctx)
1207 int ret = output_packet(ctx, 1);
1214 /* End header according to MPEG-1 systems standard. We do not write
1215 * it as it is usually not needed by decoders and because it
1216 * complicates MPEG stream concatenation. */
1217 // avio_wb32(ctx->pb, ISO_11172_END_CODE);
1218 // avio_flush(ctx->pb);
1220 for (i = 0; i < ctx->nb_streams; i++) {
1221 stream = ctx->streams[i]->priv_data;
1223 av_assert0(av_fifo_size(stream->fifo) == 0);
1224 av_fifo_freep(&stream->fifo);
1229 #define OFFSET(x) offsetof(MpegMuxContext, x)
1230 #define E AV_OPT_FLAG_ENCODING_PARAM
1231 static const AVOption options[] = {
1232 { "muxrate", NULL, OFFSET(user_mux_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, ((1<<22) - 1) * (8 * 50), E },
1233 { "preload", "Initial demux-decode delay in microseconds.", OFFSET(preload), AV_OPT_TYPE_INT, { .i64 = 500000 }, 0, INT_MAX, E },
1237 #define MPEGENC_CLASS(flavor) \
1238 static const AVClass flavor ## _class = { \
1239 .class_name = #flavor " muxer", \
1240 .item_name = av_default_item_name, \
1241 .version = LIBAVUTIL_VERSION_INT, \
1242 .option = options, \
1245 #if CONFIG_MPEG1SYSTEM_MUXER
1247 AVOutputFormat ff_mpeg1system_muxer = {
1249 .long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream"),
1250 .mime_type = "video/mpeg",
1251 .extensions = "mpg,mpeg",
1252 .priv_data_size = sizeof(MpegMuxContext),
1253 .audio_codec = AV_CODEC_ID_MP2,
1254 .video_codec = AV_CODEC_ID_MPEG1VIDEO,
1255 .write_header = mpeg_mux_init,
1256 .write_packet = mpeg_mux_write_packet,
1257 .write_trailer = mpeg_mux_end,
1258 .priv_class = &mpeg_class,
1262 #if CONFIG_MPEG1VCD_MUXER
1264 AVOutputFormat ff_mpeg1vcd_muxer = {
1266 .long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream (VCD)"),
1267 .mime_type = "video/mpeg",
1268 .priv_data_size = sizeof(MpegMuxContext),
1269 .audio_codec = AV_CODEC_ID_MP2,
1270 .video_codec = AV_CODEC_ID_MPEG1VIDEO,
1271 .write_header = mpeg_mux_init,
1272 .write_packet = mpeg_mux_write_packet,
1273 .write_trailer = mpeg_mux_end,
1274 .priv_class = &vcd_class,
1278 #if CONFIG_MPEG2VOB_MUXER
1280 AVOutputFormat ff_mpeg2vob_muxer = {
1282 .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (VOB)"),
1283 .mime_type = "video/mpeg",
1284 .extensions = "vob",
1285 .priv_data_size = sizeof(MpegMuxContext),
1286 .audio_codec = AV_CODEC_ID_MP2,
1287 .video_codec = AV_CODEC_ID_MPEG2VIDEO,
1288 .write_header = mpeg_mux_init,
1289 .write_packet = mpeg_mux_write_packet,
1290 .write_trailer = mpeg_mux_end,
1291 .priv_class = &vob_class,
1295 /* Same as mpeg2vob_mux except that the pack size is 2324 */
1296 #if CONFIG_MPEG2SVCD_MUXER
1298 AVOutputFormat ff_mpeg2svcd_muxer = {
1300 .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (SVCD)"),
1301 .mime_type = "video/mpeg",
1302 .extensions = "vob",
1303 .priv_data_size = sizeof(MpegMuxContext),
1304 .audio_codec = AV_CODEC_ID_MP2,
1305 .video_codec = AV_CODEC_ID_MPEG2VIDEO,
1306 .write_header = mpeg_mux_init,
1307 .write_packet = mpeg_mux_write_packet,
1308 .write_trailer = mpeg_mux_end,
1309 .priv_class = &svcd_class,
1313 /* Same as mpeg2vob_mux except the 'is_dvd' flag is set to produce NAV pkts */
1314 #if CONFIG_MPEG2DVD_MUXER
1316 AVOutputFormat ff_mpeg2dvd_muxer = {
1318 .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (DVD VOB)"),
1319 .mime_type = "video/mpeg",
1320 .extensions = "dvd",
1321 .priv_data_size = sizeof(MpegMuxContext),
1322 .audio_codec = AV_CODEC_ID_MP2,
1323 .video_codec = AV_CODEC_ID_MPEG2VIDEO,
1324 .write_header = mpeg_mux_init,
1325 .write_packet = mpeg_mux_write_packet,
1326 .write_trailer = mpeg_mux_end,
1327 .priv_class = &dvd_class,