Go to the documentation of this file.
64 s->streams = &ic->
streams[first_stream_of_set_idx];
67 }
while (first_stream_of_set_idx +
s->n_streams < ic->
nb_streams &&
68 s->streams[
s->n_streams]->id ==
s->streams[0]->id);
70 s->prev_stream_id = -1;
71 s->prev_timestamp = -1;
73 s->dynamic_protocol_context = priv_data;
96 const char *challenge)
98 int ch_len = strlen (challenge),
i;
99 unsigned char zres[16],
100 buf[64] = { 0xa1, 0xe9, 0x14, 0x9d, 0x0e, 0x6b, 0x3b, 0x59 };
101 #define XOR_TABLE_SIZE 37
103 0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
104 0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
105 0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
106 0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
107 0x10, 0x57, 0x05, 0x18, 0x54 };
112 else if (ch_len > 56)
114 memcpy(buf + 8, challenge, ch_len);
118 buf[8 +
i] ^= xor_table[
i];
124 strcpy (response + 32,
"01d0a8e3");
127 for (
i = 0;
i < 8;
i++)
128 chksum[
i] = response[
i * 4];
158 if (
tag ==
MKTAG(
'M',
'L',
'T',
'I')) {
163 if (rule_nr < 0 || rule_nr >= num)
192 int *pset_id,
int *pseq_no,
int *pstream_id,
193 int *pis_keyframe, uint32_t *ptimestamp)
196 int consumed = 0, set_id, seq_no, stream_id,
is_keyframe,
197 len_included, need_reliable;
201 while (
len >= 5 && buf[1] == 0xFF ) {
204 if (!(buf[0] & 0x80))
283 if (stream_id == 0x1f)
286 if (pset_id) *pset_id = set_id;
287 if (pseq_no) *pseq_no = seq_no;
288 if (pstream_id) *pstream_id = stream_id;
290 if (ptimestamp) *ptimestamp = timestamp;
299 const uint8_t *buf,
int len, uint16_t rtp_seq,
int flags)
310 len,
pkt, &seq, rmflags, *timestamp);
339 uint8_t **bufptr,
int len)
341 uint8_t *buf = bufptr ? *bufptr :
NULL;
346 if (!
s->parse_packet)
349 if (!buf &&
s->prev_stream_id != -1) {
352 rv=
s->parse_packet(
s->ic,
s->dynamic_protocol_context,
353 s->streams[
s->prev_stream_id],
364 (set_id !=
s->prev_set_id || timestamp !=
s->prev_timestamp ||
365 stream_id !=
s->prev_stream_id)) {
367 s->prev_set_id = set_id;
368 s->prev_timestamp = timestamp;
370 s->prev_stream_id = stream_id;
374 if (
s->prev_stream_id >=
s->n_streams) {
375 s->prev_stream_id = -1;
379 rv =
s->parse_packet(
s->ic,
s->dynamic_protocol_context,
380 s->streams[
s->prev_stream_id],
388 int stream_nr,
int rule_nr)
391 stream_nr, rule_nr * 2, stream_nr, rule_nr * 2 + 1);
394 static unsigned char *
397 unsigned char *target;
403 *target_len =
len * 3 / 4;
416 const char *p =
line;
420 }
else if (
av_strstart(p,
"StartTime:integer;", &p))
422 else if (
av_strstart(p,
"ASMRuleBook:string;", &p)) {
425 for (n = 0; n <
s->nb_streams; n++)
426 if (
s->streams[n]->id == stream->
id) {
427 int count =
s->streams[n]->index + 1, err;
431 count *
sizeof(*rdt->
rmst))) < 0) {
440 if (!rdt->
rmst[
s->streams[n]->index])
454 if (sscanf(p,
" %*1[Aa]verage%*1[Bb]andwidth=%"SCNd64, &st->
codecpar->
bit_rate) == 1)
456 if (!(p = strchr(p,
',')) || p > end)
469 st->
id = orig_st->
id;
481 int n_rules = 0, odd = 0;
500 if (!(end = strchr(p,
';')))
502 if (!odd && end != p) {
521 const char *p =
line;
559 #define RDT_HANDLER(n, s, t) \
560 const RTPDynamicProtocolHandler ff_rdt_ ## n ## _handler = { \
563 .codec_id = AV_CODEC_ID_NONE, \
564 .priv_data_size = sizeof(PayloadContext), \
566 .parse_sdp_a_line = rdt_parse_sdp_line, \
567 .close = rdt_close_context, \
568 .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
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)
Parse RDT-style packet header.
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.
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)
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)
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
#define flags(name, subs,...)
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/JPEG 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