Go to the documentation of this file.
   65     s->streams = &ic->
streams[first_stream_of_set_idx];
 
   68     } 
while (first_stream_of_set_idx + 
s->n_streams < ic->
nb_streams &&
 
   69              s->streams[
s->n_streams]->id == 
s->streams[0]->id);
 
   71     s->prev_stream_id = -1;
 
   72     s->prev_timestamp = -1;
 
   74     s->dynamic_protocol_context = priv_data;
 
   97                                   const char *challenge)
 
   99     int ch_len = strlen (challenge), 
i;
 
  100     unsigned char zres[16],
 
  101         buf[64] = { 0xa1, 0xe9, 0x14, 0x9d, 0x0e, 0x6b, 0x3b, 0x59 };
 
  102 #define XOR_TABLE_SIZE 37 
  104         0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
 
  105         0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
 
  106         0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
 
  107         0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
 
  108         0x10, 0x57, 0x05, 0x18, 0x54 };
 
  113     else if (ch_len > 56)
 
  115     memcpy(buf + 8, challenge, ch_len);
 
  119         buf[8 + 
i] ^= xor_table[
i];
 
  125     strcpy (response + 32, 
"01d0a8e3");
 
  128     for (
i = 0; 
i < 8; 
i++)
 
  129         chksum[
i] = response[
i * 4];
 
  159     if (
tag == 
MKTAG(
'M', 
'L', 
'T', 
'I')) {
 
  164         if (rule_nr < 0 || rule_nr >= num)
 
  193                     int *pset_id, 
int *pseq_no, 
int *pstream_id,
 
  194                     int *pis_keyframe, uint32_t *ptimestamp)
 
  197     int consumed = 0, set_id, seq_no, stream_id, 
is_keyframe,
 
  198         len_included, need_reliable;
 
  202     while (
len >= 5 && buf[1] == 0xFF ) {
 
  205         if (!(buf[0] & 0x80))
 
  284     if (stream_id == 0x1f)
 
  287     if (pset_id)      *pset_id      = set_id;
 
  288     if (pseq_no)      *pseq_no      = seq_no;
 
  289     if (pstream_id)   *pstream_id   = stream_id;
 
  291     if (ptimestamp)   *ptimestamp   = timestamp;
 
  300                   const uint8_t *buf, 
int len, uint16_t rtp_seq, 
int flags)
 
  311                                  len, 
pkt, &seq, rmflags, *timestamp);
 
  340                     uint8_t **bufptr, 
int len)
 
  342     uint8_t *buf = bufptr ? *bufptr : 
NULL;
 
  347     if (!
s->parse_packet)
 
  350     if (!buf && 
s->prev_stream_id != -1) {
 
  353         rv= 
s->parse_packet(
s->ic, 
s->dynamic_protocol_context,
 
  354                             s->streams[
s->prev_stream_id],
 
  365         (set_id != 
s->prev_set_id || timestamp != 
s->prev_timestamp ||
 
  366          stream_id != 
s->prev_stream_id)) {
 
  368         s->prev_set_id    = set_id;
 
  369         s->prev_timestamp = timestamp;
 
  371     s->prev_stream_id = stream_id;
 
  375      if (
s->prev_stream_id >= 
s->n_streams) {
 
  376          s->prev_stream_id = -1;
 
  380     rv = 
s->parse_packet(
s->ic, 
s->dynamic_protocol_context,
 
  381                          s->streams[
s->prev_stream_id],
 
  389                        int stream_nr, 
int rule_nr)
 
  392                 stream_nr, rule_nr * 2, stream_nr, rule_nr * 2 + 1);
 
  395 static unsigned char *
 
  398     unsigned char *target;
 
  404     *target_len = 
len * 3 / 4;
 
  417     const char *
p = 
line;
 
  426         for (n = 0; n < 
s->nb_streams; n++)
 
  427             if (
s->streams[n]->id == stream->
id) {
 
  428                 int count = 
s->streams[n]->index + 1, err;
 
  432                                            count * 
sizeof(*rdt->
rmst))) < 0) {
 
  441                 if (!rdt->
rmst[
s->streams[n]->index])
 
  455         if (sscanf(
p, 
" %*1[Aa]verage%*1[Bb]andwidth=%"SCNd64, &st->
codecpar->
bit_rate) == 1)
 
  457         if (!(
p = strchr(
p, 
',')) || 
p > end)
 
  470     st->
id = orig_st->
id;
 
  482     int n_rules = 0, odd = 0;
 
  501         if (!(end = strchr(
p, 
';')))
 
  503         if (!odd && end != 
p) {
 
  522     const char *
p = 
line;
 
  560 #define RDT_HANDLER(n, s, t) \ 
  561 const RTPDynamicProtocolHandler ff_rdt_ ## n ## _handler = { \ 
  564     .codec_id         = AV_CODEC_ID_NONE, \ 
  565     .priv_data_size   = sizeof(PayloadContext), \ 
  567     .parse_sdp_a_line = rdt_parse_sdp_line, \ 
  568     .close            = rdt_close_context, \ 
  569     .parse_packet     = rdt_parse_packet \ 
  
void ff_rdt_subscribe_rule(char *cmd, int size, int stream_nr, int rule_nr)
Add subscription information to Subscribe parameter string.
static unsigned char * rdt_parse_b64buf(unsigned int *target_len, const char *p)
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
enum AVMediaType codec_type
General type of the encoded data.
int64_t first_dts
Timestamp corresponding to the last dts sync point.
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
void avio_context_free(AVIOContext **s)
Free the supplied IO context and everything associated with it.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
char buffer[RTP_MAX_PACKET_LENGTH+AV_INPUT_BUFFER_PADDING_SIZE]
static int get_bits_count(const GetBitContext *s)
AVStream ** streams
A list of all streams in the file.
#define RDT_HANDLER(n, s, t)
int ff_rm_retrieve_cache(AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *rst, AVPacket *pkt)
Retrieve one cached packet from the rm-context.
AVIOContext * avio_alloc_context(unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, const uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
Allocate and initialize an AVIOContext for buffered I/O.
void ff_rdt_calc_response_and_checksum(char response[41], char chksum[9], const char *challenge)
Calculate the response (RealChallenge2 in the RTSP header) to the challenge (RealChallenge1 in the RT...
void ffio_init_read_context(FFIOContext *s, const uint8_t *buffer, int buffer_size)
Wrap a buffer in an AVIOContext for reading.
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static void skip_bits(GetBitContext *s, int n)
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int ff_rdt_parse_packet(RDTDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len)
Parse RDT-style packet data (header + media data).
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
#define RTP_FLAG_KEY
RTP packet contains a keyframe.
void ff_rdt_parse_close(RDTDemuxContext *s)
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But first
unsigned int avio_rb32(AVIOContext *s)
int avformat_open_input(AVFormatContext **ps, const char *url, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
static int rdt_parse_sdp_line(AVFormatContext *s, int st_index, PayloadContext *rdt, const char *line)
static void real_parse_asm_rulebook(AVFormatContext *s, AVStream *orig_st, const char *p)
static void handler(vbi_event *ev, void *user_data)
AVFormatContext * ic
the containing (RTSP) demux context
AVCodecParameters * codecpar
Codec parameters associated with this stream.
int ff_rdt_parse_header(const uint8_t *buf, int len, int *pset_id, int *pseq_no, int *pstream_id, int *pis_keyframe, uint32_t *ptimestamp)
Actual data handling.
unsigned int mlti_data_size
void * dynamic_protocol_context
static unsigned int get_bits1(GetBitContext *s)
AVIOContext * pb
I/O context.
int av_base64_decode(uint8_t *out, const char *in_str, int out_size)
Decode a base64-encoded string.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
unsigned int avio_rl32(AVIOContext *s)
AVStream ** streams
Each RDT stream-set (represented by one RTSPStream) can contain multiple streams (of the same content...
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
static void rdt_close_context(PayloadContext *rdt)
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
const struct FFInputFormat ff_rdt_demuxer
void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len)
Hash an array of data.
RDTDemuxContext * ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx, void *priv_data, const RTPDynamicProtocolHandler *handler)
Allocate and init the RDT parsing context.
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
void ff_real_parse_sdp_a_line(AVFormatContext *s, int stream_index, const char *line)
Parse a server-related SDP line.
int ff_rm_parse_packet(AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *rst, int len, AVPacket *pkt, int *seq, int flags, int64_t ts)
Parse one rm-stream packet from the input bytestream.
#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...
static AVStream * add_dstream(AVFormatContext *s, AVStream *orig_st)
RMStream * ff_rm_alloc_rmstream(void)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int n_streams
streams with identical content in this set
int(* DynamicPayloadPacketHandlerProc)(AVFormatContext *ctx, PayloadContext *s, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t seq, int flags)
Packet parsing for "private" payloads in the RTP specs.
int id
Format-specific stream ID.
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
static void real_parse_asm_rule(AVStream *st, const char *p, const char *end)
unsigned int avio_rb16(AVIOContext *s)
DynamicPayloadPacketHandlerProc parse_packet
#define AV_INPUT_BUFFER_PADDING_SIZE
#define RTP_MAX_PACKET_LENGTH
int index
stream index in AVFormatContext
static int rdt_parse_packet(AVFormatContext *ctx, PayloadContext *rdt, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t rtp_seq, int flags)
return 0 on packet, no more left, 1 on packet, 1 on partial packet...
A Quick Description Of Rate Distortion Theory We want to encode a video
static av_cold int rdt_init(AVFormatContext *s, int st_index, PayloadContext *rdt)
IDirect3DDxgiInterfaceAccess _COM_Outptr_ void ** p
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
int ff_rm_read_mdpr_codecdata(AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *rst, unsigned int codec_data_size, const uint8_t *mime)
Read the MDPR chunk, which contains stream-specific codec initialization parameters.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure stores compressed data.
int audio_pkt_cnt
remaining audio packets in rmdec
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define MKTAG(a, b, c, d)
void ff_rm_free_rmstream(RMStream *rms)
RTP/AV1 specific private data.
The official guide to swscale for confused that consecutive non overlapping rectangles of slice_bottom special converter These generally are unscaled converters of common like for each output line the vertical scaler pulls lines from a ring buffer When the ring buffer does not contain the wanted line
static int is_keyframe(NalUnitType naltype)
static int rdt_load_mdpr(PayloadContext *rdt, AVStream *st, int rule_nr)
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