#include "libavutil/crc.h"#include "libavutil/intreadwrite.h"#include "libavcodec/bytestream.h"#include "avformat.h"#include "mpegts.h"#include "internal.h"#include "seek.h"Go to the source code of this file.
Data Structures | |
| struct | MpegTSPESFilter |
| struct | MpegTSSectionFilter |
| struct | MpegTSFilter |
| struct | Program |
| struct | MpegTSContext |
| struct | PESContext |
| struct | SectionHeader |
| struct | StreamType |
Defines | |
| #define | MAX_SCAN_PACKETS 32000 |
| #define | MAX_RESYNC_SIZE 65536 |
| #define | MAX_PES_PAYLOAD 200*1024 |
| #define | MAX_PIDS_PER_PROGRAM 64 |
| #define | PES_START_SIZE 6 |
| #define | PES_HEADER_SIZE 9 |
| #define | MAX_PES_HEADER_SIZE (9 + 255) |
| #define | CHECK_COUNT 10 |
| #define | MAX_PACKET_READAHEAD ((128 * 1024) / 188) |
Typedefs | |
| typedef struct MpegTSFilter | MpegTSFilter |
| typedef int | PESCallback (MpegTSFilter *f, const uint8_t *buf, int len, int is_start, int64_t pos) |
| typedef void | SectionCallback (MpegTSFilter *f, const uint8_t *buf, int len) |
| typedef void | SetServiceCallback (void *opaque, int ret) |
Enumerations | |
| enum | MpegTSFilterType { MPEGTS_PES, MPEGTS_SECTION } |
| enum | MpegTSState { MPEGTS_HEADER = 0, MPEGTS_PESHEADER, MPEGTS_PESHEADER_FILL, MPEGTS_PAYLOAD, MPEGTS_SKIP } |
Functions | |
| static void | clear_program (MpegTSContext *ts, unsigned int programid) |
| static void | clear_programs (MpegTSContext *ts) |
| static void | add_pat_entry (MpegTSContext *ts, unsigned int programid) |
| static void | add_pid_to_pmt (MpegTSContext *ts, unsigned int programid, unsigned int pid) |
| static int | discard_pid (MpegTSContext *ts, unsigned int pid) |
| discard_pid() decides if the pid is to be discarded according to caller's programs selection | |
| static void | write_section_data (AVFormatContext *s, MpegTSFilter *tss1, const uint8_t *buf, int buf_size, int is_start) |
| Assembles PES packets out of TS packets, and then calls the "section_cb" function when they are complete. | |
| static MpegTSFilter * | mpegts_open_section_filter (MpegTSContext *ts, unsigned int pid, SectionCallback *section_cb, void *opaque, int check_crc) |
| static MpegTSFilter * | mpegts_open_pes_filter (MpegTSContext *ts, unsigned int pid, PESCallback *pes_cb, void *opaque) |
| static void | mpegts_close_filter (MpegTSContext *ts, MpegTSFilter *filter) |
| static int | analyze (const uint8_t *buf, int size, int packet_size, int *index) |
| static int | get_packet_size (const uint8_t *buf, int size) |
| static int | get8 (const uint8_t **pp, const uint8_t *p_end) |
| static int | get16 (const uint8_t **pp, const uint8_t *p_end) |
| static char * | getstr8 (const uint8_t **pp, const uint8_t *p_end) |
| static int | parse_section_header (SectionHeader *h, const uint8_t **pp, const uint8_t *p_end) |
| static void | mpegts_find_stream_type (AVStream *st, uint32_t stream_type, const StreamType *types) |
| static int | mpegts_set_stream_info (AVStream *st, PESContext *pes, uint32_t stream_type, uint32_t prog_reg_desc) |
| static int64_t | get_pts (const uint8_t *p) |
| static void | new_pes_packet (PESContext *pes, AVPacket *pkt) |
| static int | mpegts_push_data (MpegTSFilter *filter, const uint8_t *buf, int buf_size, int is_start, int64_t pos) |
| static PESContext * | add_pes_stream (MpegTSContext *ts, int pid, int pcr_pid) |
| static void | pmt_cb (MpegTSFilter *filter, const uint8_t *section, int section_len) |
| static void | pat_cb (MpegTSFilter *filter, const uint8_t *section, int section_len) |
| static void | sdt_cb (MpegTSFilter *filter, const uint8_t *section, int section_len) |
| static int | handle_packet (MpegTSContext *ts, const uint8_t *packet) |
| static int | mpegts_resync (AVFormatContext *s) |
| static int | read_packet (AVFormatContext *s, uint8_t *buf, int raw_packet_size) |
| static int | handle_packets (MpegTSContext *ts, int nb_packets) |
| static int | mpegts_probe (AVProbeData *p) |
| static int | parse_pcr (int64_t *ppcr_high, int *ppcr_low, const uint8_t *packet) |
| static int | mpegts_read_header (AVFormatContext *s, AVFormatParameters *ap) |
| static int | mpegts_raw_read_packet (AVFormatContext *s, AVPacket *pkt) |
| static int | mpegts_read_packet (AVFormatContext *s, AVPacket *pkt) |
| static int | mpegts_read_close (AVFormatContext *s) |
| static int64_t | mpegts_get_pcr (AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit) |
| static int | read_seek (AVFormatContext *s, int stream_index, int64_t target_ts, int flags) |
| MpegTSContext * | ff_mpegts_parse_open (AVFormatContext *s) |
| int | ff_mpegts_parse_packet (MpegTSContext *ts, AVPacket *pkt, const uint8_t *buf, int len) |
| void | ff_mpegts_parse_close (MpegTSContext *ts) |
Variables | |
| AVInputFormat | mpegts_demuxer |
| static const StreamType | ISO_types [] |
| static const StreamType | HDMV_types [] |
| static const StreamType | MISC_types [] |
| static const StreamType | REGD_types [] |
| static const StreamType | DESC_types [] |
| AVInputFormat | mpegtsraw_demuxer |
| #define CHECK_COUNT 10 |
| #define MAX_PACKET_READAHEAD ((128 * 1024) / 188) |
| #define MAX_PES_PAYLOAD 200*1024 |
| #define MAX_PIDS_PER_PROGRAM 64 |
| #define MAX_RESYNC_SIZE 65536 |
| #define PES_HEADER_SIZE 9 |
| #define PES_START_SIZE 6 |
| typedef struct MpegTSFilter MpegTSFilter |
| typedef int PESCallback(MpegTSFilter *f, const uint8_t *buf, int len, int is_start, int64_t pos) |
| typedef void SectionCallback(MpegTSFilter *f, const uint8_t *buf, int len) |
| typedef void SetServiceCallback(void *opaque, int ret) |
| enum MpegTSFilterType |
| enum MpegTSState |
| static void add_pat_entry | ( | MpegTSContext * | ts, | |
| unsigned int | programid | |||
| ) | [static] |
| static PESContext* add_pes_stream | ( | MpegTSContext * | ts, | |
| int | pid, | |||
| int | pcr_pid | |||
| ) | [static] |
| static void add_pid_to_pmt | ( | MpegTSContext * | ts, | |
| unsigned int | programid, | |||
| unsigned int | pid | |||
| ) | [static] |
| static int analyze | ( | const uint8_t * | buf, | |
| int | size, | |||
| int | packet_size, | |||
| int * | index | |||
| ) | [static] |
| static void clear_program | ( | MpegTSContext * | ts, | |
| unsigned int | programid | |||
| ) | [static] |
| static void clear_programs | ( | MpegTSContext * | ts | ) | [static] |
| static int discard_pid | ( | MpegTSContext * | ts, | |
| unsigned int | pid | |||
| ) | [static] |
discard_pid() decides if the pid is to be discarded according to caller's programs selection
| ts | : - TS context | |
| pid | : - pid |
Definition at line 216 of file mpegts.c.
Referenced by handle_packet().
| void ff_mpegts_parse_close | ( | MpegTSContext * | ts | ) |
| MpegTSContext* ff_mpegts_parse_open | ( | AVFormatContext * | s | ) |
| int ff_mpegts_parse_packet | ( | MpegTSContext * | ts, | |
| AVPacket * | pkt, | |||
| const uint8_t * | buf, | |||
| int | len | |||
| ) |
| static int get16 | ( | const uint8_t ** | pp, | |
| const uint8_t * | p_end | |||
| ) | [inline, static] |
| static int get8 | ( | const uint8_t ** | pp, | |
| const uint8_t * | p_end | |||
| ) | [inline, static] |
| static int get_packet_size | ( | const uint8_t * | buf, | |
| int | size | |||
| ) | [static] |
| static char* getstr8 | ( | const uint8_t ** | pp, | |
| const uint8_t * | p_end | |||
| ) | [static] |
| static int handle_packet | ( | MpegTSContext * | ts, | |
| const uint8_t * | packet | |||
| ) | [static] |
Definition at line 1139 of file mpegts.c.
Referenced by ff_mpegts_parse_packet(), and handle_packets().
| static int handle_packets | ( | MpegTSContext * | ts, | |
| int | nb_packets | |||
| ) | [static] |
Definition at line 1269 of file mpegts.c.
Referenced by mpegts_read_header(), and mpegts_read_packet().
| static void mpegts_close_filter | ( | MpegTSContext * | ts, | |
| MpegTSFilter * | filter | |||
| ) | [static] |
| static void mpegts_find_stream_type | ( | AVStream * | st, | |
| uint32_t | stream_type, | |||
| const StreamType * | types | |||
| ) | [static] |
| static int64_t mpegts_get_pcr | ( | AVFormatContext * | s, | |
| int | stream_index, | |||
| int64_t * | ppos, | |||
| int64_t | pos_limit | |||
| ) | [static] |
| static MpegTSFilter* mpegts_open_pes_filter | ( | MpegTSContext * | ts, | |
| unsigned int | pid, | |||
| PESCallback * | pes_cb, | |||
| void * | opaque | |||
| ) | [static] |
| static MpegTSFilter* mpegts_open_section_filter | ( | MpegTSContext * | ts, | |
| unsigned int | pid, | |||
| SectionCallback * | section_cb, | |||
| void * | opaque, | |||
| int | check_crc | |||
| ) | [static] |
| static int mpegts_probe | ( | AVProbeData * | p | ) | [static] |
| static int mpegts_push_data | ( | MpegTSFilter * | filter, | |
| const uint8_t * | buf, | |||
| int | buf_size, | |||
| int | is_start, | |||
| int64_t | pos | |||
| ) | [static] |
| static int mpegts_raw_read_packet | ( | AVFormatContext * | s, | |
| AVPacket * | pkt | |||
| ) | [static] |
| static int mpegts_read_close | ( | AVFormatContext * | s | ) | [static] |
| static int mpegts_read_header | ( | AVFormatContext * | s, | |
| AVFormatParameters * | ap | |||
| ) | [static] |
| static int mpegts_read_packet | ( | AVFormatContext * | s, | |
| AVPacket * | pkt | |||
| ) | [static] |
| static int mpegts_resync | ( | AVFormatContext * | s | ) | [static] |
| static int mpegts_set_stream_info | ( | AVStream * | st, | |
| PESContext * | pes, | |||
| uint32_t | stream_type, | |||
| uint32_t | prog_reg_desc | |||
| ) | [static] |
| static void new_pes_packet | ( | PESContext * | pes, | |
| AVPacket * | pkt | |||
| ) | [static] |
Definition at line 614 of file mpegts.c.
Referenced by mpegts_push_data(), and mpegts_read_packet().
| static int parse_pcr | ( | int64_t * | ppcr_high, | |
| int * | ppcr_low, | |||
| const uint8_t * | packet | |||
| ) | [static] |
Definition at line 1325 of file mpegts.c.
Referenced by mpegts_get_pcr(), mpegts_raw_read_packet(), and mpegts_read_header().
| static int parse_section_header | ( | SectionHeader * | h, | |
| const uint8_t ** | pp, | |||
| const uint8_t * | p_end | |||
| ) | [static] |
| static void pat_cb | ( | MpegTSFilter * | filter, | |
| const uint8_t * | section, | |||
| int | section_len | |||
| ) | [static] |
| static void pmt_cb | ( | MpegTSFilter * | filter, | |
| const uint8_t * | section, | |||
| int | section_len | |||
| ) | [static] |
| static int read_packet | ( | AVFormatContext * | s, | |
| uint8_t * | buf, | |||
| int | raw_packet_size | |||
| ) | [static] |
| static int read_seek | ( | AVFormatContext * | s, | |
| int | stream_index, | |||
| int64_t | target_ts, | |||
| int | flags | |||
| ) | [static] |
| static void sdt_cb | ( | MpegTSFilter * | filter, | |
| const uint8_t * | section, | |||
| int | section_len | |||
| ) | [static] |
| static void write_section_data | ( | AVFormatContext * | s, | |
| MpegTSFilter * | tss1, | |||
| const uint8_t * | buf, | |||
| int | buf_size, | |||
| int | is_start | |||
| ) | [static] |
Assembles PES packets out of TS packets, and then calls the "section_cb" function when they are complete.
Definition at line 245 of file mpegts.c.
Referenced by handle_packet().
const StreamType DESC_types[] [static] |
Initial value:
{
{ 0x6a, AVMEDIA_TYPE_AUDIO, CODEC_ID_AC3 },
{ 0x7a, AVMEDIA_TYPE_AUDIO, CODEC_ID_EAC3 },
{ 0x7b, AVMEDIA_TYPE_AUDIO, CODEC_ID_DTS },
{ 0x56, AVMEDIA_TYPE_SUBTITLE, CODEC_ID_DVB_TELETEXT },
{ 0x59, AVMEDIA_TYPE_SUBTITLE, CODEC_ID_DVB_SUBTITLE },
{ 0 },
}
const StreamType HDMV_types[] [static] |
Initial value:
{
{ 0x80, AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_BLURAY },
{ 0x81, AVMEDIA_TYPE_AUDIO, CODEC_ID_AC3 },
{ 0x82, AVMEDIA_TYPE_AUDIO, CODEC_ID_DTS },
{ 0x83, AVMEDIA_TYPE_AUDIO, CODEC_ID_TRUEHD },
{ 0x84, AVMEDIA_TYPE_AUDIO, CODEC_ID_EAC3 },
{ 0x90, AVMEDIA_TYPE_SUBTITLE, CODEC_ID_HDMV_PGS_SUBTITLE },
{ 0 },
}
const StreamType ISO_types[] [static] |
Initial value:
{
{ 0x01, AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG2VIDEO },
{ 0x02, AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG2VIDEO },
{ 0x03, AVMEDIA_TYPE_AUDIO, CODEC_ID_MP3 },
{ 0x04, AVMEDIA_TYPE_AUDIO, CODEC_ID_MP3 },
{ 0x0f, AVMEDIA_TYPE_AUDIO, CODEC_ID_AAC },
{ 0x10, AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG4 },
{ 0x1b, AVMEDIA_TYPE_VIDEO, CODEC_ID_H264 },
{ 0xd1, AVMEDIA_TYPE_VIDEO, CODEC_ID_DIRAC },
{ 0xea, AVMEDIA_TYPE_VIDEO, CODEC_ID_VC1 },
{ 0 },
}
const StreamType MISC_types[] [static] |
Initial value:
{
{ 0x81, AVMEDIA_TYPE_AUDIO, CODEC_ID_AC3 },
{ 0x8a, AVMEDIA_TYPE_AUDIO, CODEC_ID_DTS },
{ 0 },
}
Initial value:
{
"mpegts",
NULL_IF_CONFIG_SMALL("MPEG-2 transport stream format"),
sizeof(MpegTSContext),
mpegts_probe,
mpegts_read_header,
mpegts_read_packet,
mpegts_read_close,
read_seek,
mpegts_get_pcr,
.flags = AVFMT_SHOW_IDS|AVFMT_TS_DISCONT,
}
Initial value:
{
"mpegtsraw",
NULL_IF_CONFIG_SMALL("MPEG-2 raw transport stream format"),
sizeof(MpegTSContext),
NULL,
mpegts_read_header,
mpegts_raw_read_packet,
mpegts_read_close,
read_seek,
mpegts_get_pcr,
.flags = AVFMT_SHOW_IDS|AVFMT_TS_DISCONT,
}
const StreamType REGD_types[] [static] |
Initial value:
{
{ MKTAG('d','r','a','c'), AVMEDIA_TYPE_VIDEO, CODEC_ID_DIRAC },
{ MKTAG('A','C','-','3'), AVMEDIA_TYPE_AUDIO, CODEC_ID_AC3 },
{ 0 },
}
1.5.8