Go to the documentation of this file.
   37 #define PCR_TIME_BASE 27000000 
   41 #define DVB_PRIVATE_NETWORK_START 0xff01 
  104 #define MPEGTS_FLAG_REEMIT_PAT_PMT  0x01 
  105 #define MPEGTS_FLAG_AAC_LATM        0x02 
  106 #define MPEGTS_FLAG_PAT_PMT_AT_FRAMES           0x04 
  107 #define MPEGTS_FLAG_SYSTEM_B        0x08 
  108 #define MPEGTS_FLAG_DISCONT         0x10 
  121 #define DEFAULT_PES_HEADER_FREQ  16 
  122 #define DEFAULT_PES_PAYLOAD_SIZE ((DEFAULT_PES_HEADER_FREQ - 1) * 184 + 170) 
  126 #define SECTION_LENGTH 1020 
  133     const unsigned char *buf_ptr;
 
  140     buf[
len - 4] = (crc >> 24) & 0xff;
 
  141     buf[
len - 3] = (crc >> 16) & 0xff;
 
  142     buf[
len - 2] = (crc >>  8) & 0xff;
 
  143     buf[
len - 1] =  crc        & 0xff;
 
  156         s->cc = 
s->cc + 1 & 0xf;
 
  158         if (
s->discontinuity) {
 
  162             s->discontinuity = 0;
 
  169         memcpy(q, buf_ptr, len1);
 
  174             memset(q, 0xff, 
left);
 
  176         s->write_packet(
s, packet);
 
  193                                  int version, 
int sec_num, 
int last_sec_num,
 
  197     unsigned int tot_len;
 
  201     tot_len = 3 + 5 + 
len + 4;
 
  222 #define DEFAULT_PROVIDER_NAME   "FFmpeg" 
  223 #define DEFAULT_SERVICE_NAME    "Service01" 
  226 #define SDT_RETRANS_TIME 500 
  227 #define PAT_RETRANS_TIME 100 
  228 #define PCR_RETRANS_TIME 20 
  289     int val, stream_type, 
i, err = 0;
 
  294     program_info_length_ptr = q;
 
  299     val = 0xf000 | (q - program_info_length_ptr - 2);
 
  300     program_info_length_ptr[0] = 
val >> 8;
 
  301     program_info_length_ptr[1] = 
val;
 
  303     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  308         if (
s->nb_programs) {
 
  312             for (k = 0; k < 
program->nb_stream_indexes; k++)
 
  313                 if (
program->stream_index[k] == 
i) {
 
  432                         static const uint8_t coupled_stream_counts[9] = {
 
  433                             1, 0, 1, 1, 2, 2, 2, 3, 3
 
  435                         static const uint8_t channel_map_a[8][8] = {
 
  442                             {0, 4, 1, 2, 3, 5, 6},
 
  443                             {0, 6, 1, 2, 3, 4, 5, 7},
 
  445                         static const uint8_t channel_map_b[8][8] = {
 
  452                             {0, 1, 2, 3, 4, 5, 6},
 
  453                             {0, 1, 2, 3, 4, 5, 6, 7},
 
  487                 char *next = lang->
value;
 
  494                 for (p = lang->
value; next && *len_ptr < 255 / 4 * 4; p = next + 1) {
 
  499                     next = strchr(p, 
',');
 
  500                     if (strlen(p) != 3 && (!next || next != p + 3))
 
  525            const char default_language[] = 
"und";
 
  526            const char *
language = lang && strlen(lang->
value) >= 3 ? lang->
value : default_language;
 
  530                int extradata_copied = 0;
 
  536                    if (
sizeof(
data) - (q - 
data) < 8) { 
 
  550                        extradata_copied += 5;
 
  560                            extradata_copied += 4;
 
  569                *len_ptr = q - len_ptr - 1;
 
  572                int extradata_copied = 0;
 
  588                        extradata_copied += 2;
 
  600                *len_ptr = q - len_ptr - 1;
 
  617                 const char *
tag = 
"ID3 ";
 
  630         val = 0xf000 | (q - desc_length_ptr - 2);
 
  631         desc_length_ptr[0] = 
val >> 8;
 
  632         desc_length_ptr[1] = 
val;
 
  637                "The PMT section cannot fit stream %d and all following streams.\n" 
  638                "Try reducing the number of languages in the audio streams " 
  639                "or the total number of streams.\n", 
i);
 
  651     int i, running_status, free_ca_mode, 
val;
 
  660         desc_list_len_ptr = q;
 
  672         desc_len_ptr[0] = q - desc_len_ptr - 1;
 
  675         val = (running_status << 13) | (free_ca_mode << 12) |
 
  676               (q - desc_list_len_ptr - 2);
 
  677         desc_list_len_ptr[0] = 
val >> 8;
 
  678         desc_list_len_ptr[1] = 
val;
 
  693     str_len = strlen(str);
 
  694     if (str[0] && (
unsigned)str[0] >= 0x20) {   
 
  696         int has_multibyte = 0;
 
  700             has_multibyte |= (
code > 127);      
 
  705             buf[0] = str_len + 1;
 
  707             memcpy(&
buf[2], str, str_len);
 
  716     memcpy(&
buf[1], str, str_len);
 
  757         int64_t pcr = 
get_pcr(
s->priv_data, 
s->pb);
 
  758         uint32_t tp_extra_header = pcr % 0x3fffffff;
 
  759         tp_extra_header = 
AV_RB32(&tp_extra_header);
 
  760         avio_write(
s->pb, (
unsigned char *) &tp_extra_header,
 
  761                    sizeof(tp_extra_header));
 
  780     const char *service_name;
 
  785     if (
s->max_delay < 0) 
 
  793     if (!
s->nb_programs) {
 
  809         service->
pmt.
cc           = 15;
 
  812         for (
i = 0; 
i < 
s->nb_programs; 
i++) {
 
  828             service->
pmt.
cc           = 15;
 
  855     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  890         } 
else if (st->
id < 0x1FFF) {
 
  894                    "Invalid stream id %d, must be less than 8191\n", st->
id);
 
  903         for (j = 0; j < 
i; j++) {
 
  904             if (pids[j] == ts_st->
pid) {
 
  910         pids[
i]                = ts_st->
pid;
 
  957     if (service->
pcr_pid == 0x1fff && 
s->nb_streams > 0) {
 
  958         pcr_st           = 
s->streams[0];
 
 1018            "pcr every %d pkts, sdt every %d, pat/pmt every %d pkts\n",
 
 1067     int64_t pcr_low = pcr % 300, pcr_high = pcr / 300;
 
 1069     *
buf++ = pcr_high >> 25;
 
 1070     *
buf++ = pcr_high >> 17;
 
 1071     *
buf++ = pcr_high >>  9;
 
 1072     *
buf++ = pcr_high >>  1;
 
 1073     *
buf++ = pcr_high <<  7 | pcr_low >> 8 | 0x7e;
 
 1105     *q++ = ts_st->
pid >> 8;
 
 1107     *q++ = 0x20 | ts_st->
cc;   
 
 1129     val  = fourbits << 4 | (((
pts >> 30) & 0x07) << 1) | 1;
 
 1131     val  = (((
pts >> 15) & 0x7fff) << 1) | 1;
 
 1134     val  = (((
pts) & 0x7fff) << 1) | 1;
 
 1145     if ((
pkt[3] & 0x20) == 0) {
 
 1177                              const uint8_t *payload, 
int payload_size,
 
 1178                              int64_t 
pts, int64_t dts, 
int key, 
int stream_id)
 
 1184     int val, is_start, 
len, header_len, write_pcr, is_dvb_subtitle, is_dvb_teletext, 
flags;
 
 1185     int afc_len, stuffing_len;
 
 1196     while (payload_size > 0) {
 
 1212             (dts - 
get_pcr(ts, 
s->pb) / 300) > delay) {
 
 1230         ts_st->
cc = ts_st->
cc + 1 & 0xf;
 
 1231         *q++      = 0x10 | ts_st->
cc; 
 
 1251                 pcr = (dts - delay) * 300;
 
 1258             int pes_extension = 0;
 
 1259             int pes_header_stuffing_bytes = 0;
 
 1264             is_dvb_subtitle = 0;
 
 1265             is_dvb_teletext = 0;
 
 1284                 *q++ = stream_id != -1 ? stream_id : 0xfc;
 
 1286                 if (stream_id == 0xbd) 
 
 1292                         is_dvb_subtitle = 1;
 
 1294                         is_dvb_teletext = 1;
 
 1330             if (is_dvb_teletext) {
 
 1331                 pes_header_stuffing_bytes = 0x24 - header_len;
 
 1334             len = payload_size + header_len + 3;
 
 1336             if (is_dvb_subtitle) {
 
 1381             if (is_dvb_subtitle) {
 
 1388             if (is_dvb_teletext) {
 
 1389                 memset(q, 0xff, pes_header_stuffing_bytes);
 
 1390                 q += pes_header_stuffing_bytes;
 
 1395         header_len = q - 
buf;
 
 1398         if (
len > payload_size)
 
 1401         if (stuffing_len > 0) {
 
 1403             if (
buf[3] & 0x20) {
 
 1405                 afc_len = 
buf[4] + 1;
 
 1406                 memmove(
buf + 4 + afc_len + stuffing_len,
 
 1408                         header_len - (4 + afc_len));
 
 1409                 buf[4] += stuffing_len;
 
 1410                 memset(
buf + 4 + afc_len, 0xff, stuffing_len);
 
 1413                 memmove(
buf + 4 + stuffing_len, 
buf + 4, header_len - 4);
 
 1415                 buf[4]  = stuffing_len - 1;
 
 1416                 if (stuffing_len >= 2) {
 
 1418                     memset(
buf + 6, 0xff, stuffing_len - 2);
 
 1423         if (is_dvb_subtitle && payload_size == 
len) {
 
 1431         payload_size -= 
len;
 
 1443                    "no startcode found, use the video bitstream filter 'h264_mp4toannexb' to fix it " 
 1444                    "('-bsf:v h264_mp4toannexb' option with ffmpeg)\n");
 
 1476     static const int durations[32] = {
 
 1477       480, 960, 1920, 2880,       
 
 1478       480, 960, 1920, 2880,       
 
 1479       480, 960, 1920, 2880,       
 
 1487     int toc, frame_duration, nframes, 
duration;
 
 1494     frame_duration = durations[toc >> 3];
 
 1512     duration = nframes * frame_duration;
 
 1515                "Opus packet duration > 120 ms, invalid");
 
 1532     int opus_samples = 0;
 
 1541         stream_id = side_data[0];
 
 1545                "resend_headers option is deprecated, use -mpegts_flags resend_headers\n");
 
 1571         uint32_t 
state = -1;
 
 1583             if ((
state & 0x1f) == 7)
 
 1585         } 
while (p < buf_end && (
state & 0x1f) != 9 &&
 
 1588         if ((
state & 0x1f) != 5)
 
 1590         if ((
state & 0x1f) != 9) { 
 
 1613                                         "and extradata missing\n");
 
 1637         uint32_t 
state = -1;
 
 1649             if ((
state & 0x7e) == 2*32)
 
 1651         } 
while (p < buf_end && (
state & 0x7e) != 2*35 &&
 
 1652                  (
state & 0x7e) >= 2*32);
 
 1654         if ((
state & 0x7e) < 2*16 && (
state & 0x7e) >= 2*24)
 
 1656         if ((
state & 0x7e) != 2*35) { 
 
 1680             int ctrl_header_size;
 
 1681             int trim_start = 0, trim_end = 0;
 
 1689             if (side_data && side_data_size >= 10) {
 
 1695               ctrl_header_size += 2;
 
 1697               ctrl_header_size += 2;
 
 1727                 trim_end = 
FFMIN(trim_end, opus_samples - trim_start);
 
 1734             size    = ctrl_header_size;
 
 1744         for(
i=0; 
i<
s->nb_streams; 
i++) {
 
 1799     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 1836     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 1878     { 
"mpegts_transport_stream_id", 
"Set transport_stream_id field.",
 
 1881     { 
"mpegts_original_network_id", 
"Set original_network_id field.",
 
 1884     { 
"mpegts_service_id", 
"Set service_id field.",
 
 1887     { 
"mpegts_service_type", 
"Set service_type field.",
 
 1890     { 
"digital_tv", 
"Digital Television.",
 
 1893     { 
"digital_radio", 
"Digital Radio.",
 
 1896     { 
"teletext", 
"Teletext.",
 
 1899     { 
"advanced_codec_digital_radio", 
"Advanced Codec Digital Radio.",
 
 1902     { 
"mpeg2_digital_hdtv", 
"MPEG2 Digital HDTV.",
 
 1905     { 
"advanced_codec_digital_sdtv", 
"Advanced Codec Digital SDTV.",
 
 1908     { 
"advanced_codec_digital_hdtv", 
"Advanced Codec Digital HDTV.",
 
 1911     { 
"hevc_digital_hdtv", 
"HEVC Digital Television Service.",
 
 1914     { 
"mpegts_pmt_start_pid", 
"Set the first pid of the PMT.",
 
 1917     { 
"mpegts_start_pid", 
"Set the first pid.",
 
 1920     { 
"mpegts_m2ts_mode", 
"Enable m2ts mode.",
 
 1926     { 
"pes_payload_size", 
"Minimum PES packet payload in bytes",
 
 1929     { 
"mpegts_flags", 
"MPEG-TS muxing flags",
 
 1932     { 
"resend_headers", 
"Reemit PAT/PMT before writing the next packet",
 
 1935     { 
"latm", 
"Use LATM packetization for AAC",
 
 1938     { 
"pat_pmt_at_frames", 
"Reemit PAT and PMT at each video frame",
 
 1941     { 
"system_b", 
"Conform to System B (DVB) instead of System A (ATSC)",
 
 1944     { 
"initial_discontinuity", 
"Mark initial packets as discontinuous",
 
 1948     { 
"resend_headers", 
"Reemit PAT/PMT before writing the next packet",
 
 1951     { 
"mpegts_copyts", 
"don't offset dts/pts",
 
 1954     { 
"tables_version", 
"set PAT, PMT and SDT version",
 
 1957     { 
"omit_video_pes_length", 
"Omit the PES packet length for video packets",
 
 1960     { 
"pcr_period", 
"PCR retransmission time in milliseconds",
 
 1963     { 
"pat_period", 
"PAT/PMT retransmission time limit in seconds",
 
 1966     { 
"sdt_period", 
"SDT retransmission time limit in seconds",
 
 1982     .mime_type      = 
"video/MP2T",
 
 1983     .extensions     = 
"ts,m2t,m2ts,mts",
 
  
int first_pts_check
first pts check needed
#define DEFAULT_PROVIDER_NAME
#define AV_LOG_WARNING
Something somehow does not look correct.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C program
static av_cold int init(AVCodecContext *avctx)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
#define MPEGTS_FLAG_AAC_LATM
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
enum AVMediaType codec_type
General type of the encoded data.
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
uint8_t provider_name[256]
static void section_write_packet(MpegTSSection *s, const uint8_t *packet)
@ AV_PKT_DATA_MPEGTS_STREAM_ID
MPEGTS stream ID as uint8_t, this is required to pass the stream ID information from the demuxer to t...
#define STREAM_TYPE_AUDIO_AAC
static void retransmit_si_info(AVFormatContext *s, int force_pat, int64_t dts)
#define STREAM_TYPE_VIDEO_VC1
#define STREAM_TYPE_PRIVATE_DATA
static void mpegts_write_flush(AVFormatContext *s)
#define MKTAG(a, b, c, d)
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
static void set_af_flag(uint8_t *pkt, int flag)
#define STREAM_TYPE_AUDIO_MPEG1
AVStream ** streams
A list of all streams in the file.
static void mpegts_deinit(AVFormatContext *s)
@ AV_CODEC_ID_DVB_TELETEXT
static int64_t get_pcr(const MpegTSWrite *ts, AVIOContext *pb)
@ MPEGTS_SERVICE_TYPE_MPEG2_DIGITAL_HDTV
#define AV_LOG_VERBOSE
Detailed information.
#define MPEGTS_FLAG_PAT_PMT_AT_FRAMES
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
static int opus_get_packet_samples(AVFormatContext *s, AVPacket *pkt)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static int mpegts_write_end(AVFormatContext *s)
#define STREAM_TYPE_AUDIO_DTS
#define STREAM_TYPE_AUDIO_MPEG2
static void put_registration_descriptor(uint8_t **q_ptr, uint32_t tag)
static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
ff_const59 AVOutputFormat * av_guess_format(const char *short_name, const char *filename, const char *mime_type)
Return the output format in the list of registered output formats which best matches the provided par...
static void mpegts_write_pes(AVFormatContext *s, AVStream *st, const uint8_t *payload, int payload_size, int64_t pts, int64_t dts, int key, int stream_id)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
void(* write_packet)(struct MpegTSSection *s, const uint8_t *packet)
#define DEFAULT_SERVICE_NAME
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
@ AV_CODEC_ID_DVB_SUBTITLE
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
#define STREAM_TYPE_AUDIO_EAC3
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But first
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static MpegTSService * mpegts_add_service(AVFormatContext *s, int sid, const char *provider_name, const char *name)
static int write_pcr_bits(uint8_t *buf, int64_t pcr)
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define STREAM_TYPE_AUDIO_AC3
@ MPEGTS_SERVICE_TYPE_DIGITAL_RADIO
#define STREAM_TYPE_VIDEO_MPEG4
#define MPEGTS_FLAG_SYSTEM_B
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding
int av_match_ext(const char *filename, const char *extensions)
Return a positive value if the given filename has one of the given extensions, 0 otherwise.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static const AVOption options[]
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
static int mpegts_init(AVFormatContext *s)
static void extend_af(uint8_t *pkt, int size)
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
static void mpegts_insert_null_packet(AVFormatContext *s)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
static void mpegts_write_section(MpegTSSection *s, uint8_t *buf, int len)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
static int write_trailer(AVFormatContext *s1)
Rational number (pair of numerator and denominator).
const char * av_default_item_name(void *ptr)
Return the context name.
AVIOContext * pb
I/O context.
int av_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file.
#define MPEGTS_FLAG_REEMIT_PAT_PMT
int sample_rate
Audio only.
ff_const59 struct AVOutputFormat * oformat
The output container format.
int64_t nb_frames
number of frames in this stream if known or 0
int extradata_size
Size of the extradata content in bytes.
struct MpegTSService * service
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
#define STREAM_TYPE_VIDEO_HEVC
static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
static void mpegts_write_pat(AVFormatContext *s)
#define AV_NOPTS_VALUE
Undefined timestamp value.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
static int mpegts_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
const char const char void * val
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
#define STREAM_TYPE_VIDEO_MPEG2
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
MpegTSService ** services
int flags
A combination of AV_PKT_FLAG values.
#define STREAM_TYPE_AUDIO_AAC_LATM
#define FF_COMPLIANCE_NORMAL
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
#define STREAM_TYPE_VIDEO_DIRAC
#define i(width, name, range_min, range_max)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
static void put16(uint8_t **q_ptr, int val)
static int mpegts_write_section1(MpegTSSection *s, int tid, int id, int version, int sec_num, int last_sec_num, uint8_t *buf, int len)
#define AV_TIME_BASE
Internal time base represented as integer.
#define av_malloc_array(a, b)
static void putbuf(uint8_t **q_ptr, const uint8_t *buf, size_t len)
static void write_pts(uint8_t *q, int fourbits, int64_t pts)
#define STREAM_TYPE_AUDIO_TRUEHD
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
New fields can be added to the end with minor version bumps.
@ AV_PKT_DATA_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
#define MPEGTS_FLAG_DISCONT
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int opus_pending_trim_start
static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
Undefined Behavior In the C language
int disposition
AV_DISPOSITION_* bit field.
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
int id
Format-specific stream ID.
@ MPEGTS_SERVICE_TYPE_ADVANCED_CODEC_DIGITAL_RADIO
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
@ MPEGTS_SERVICE_TYPE_HEVC_DIGITAL_HDTV
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
@ MPEGTS_SERVICE_TYPE_DIGITAL_TV
#define STREAM_TYPE_VIDEO_H264
static void mpegts_write_sdt(AVFormatContext *s)
@ MPEGTS_SERVICE_TYPE_TELETEXT
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
#define STREAM_TYPE_VIDEO_CAVS
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
This function is the same as av_get_audio_frame_duration(), except it works with AVCodecParameters in...
static int check_hevc_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt)
static const AVClass mpegts_muxer_class
static void mpegts_prefix_m2ts_header(AVFormatContext *s)
#define STREAM_TYPE_METADATA
AVOutputFormat ff_mpegts_muxer
@ MPEGTS_SERVICE_TYPE_ADVANCED_CODEC_DIGITAL_SDTV
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure stores compressed data.
#define flags(name, subs,...)
int omit_video_pes_length
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static uint8_t * get_ts_payload_start(uint8_t *pkt)
static void mpegts_insert_pcr_only(AVFormatContext *s, AVStream *st)
#define DVB_PRIVATE_NETWORK_START
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_RB24
#define DEFAULT_PES_PAYLOAD_SIZE
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
int initial_padding
Audio only.
@ MPEGTS_SERVICE_TYPE_ADVANCED_CODEC_DIGITAL_HDTV
static int encode_str8(uint8_t *buf, const char *str)
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
int mux_rate
set to 1 when VBR
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt)
Check presence of H264 startcode.