Go to the documentation of this file.
63 s->streams = &ic->
streams[first_stream_of_set_idx];
66 }
while (first_stream_of_set_idx +
s->n_streams < ic->
nb_streams &&
67 s->streams[
s->n_streams]->id ==
s->streams[0]->id);
69 s->prev_stream_id = -1;
70 s->prev_timestamp = -1;
72 s->dynamic_protocol_context = priv_data;
95 const char *challenge)
97 int ch_len = strlen (challenge),
i;
98 unsigned char zres[16],
99 buf[64] = { 0xa1, 0xe9, 0x14, 0x9d, 0x0e, 0x6b, 0x3b, 0x59 };
100 #define XOR_TABLE_SIZE 37
102 0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
103 0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
104 0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
105 0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
106 0x10, 0x57, 0x05, 0x18, 0x54 };
111 else if (ch_len > 56)
113 memcpy(
buf + 8, challenge, ch_len);
117 buf[8 +
i] ^= xor_table[
i];
123 strcpy (response + 32,
"01d0a8e3");
126 for (
i = 0;
i < 8;
i++)
127 chksum[
i] = response[
i * 4];
157 if (
tag ==
MKTAG(
'M',
'L',
'T',
'I')) {
162 if (rule_nr < 0 || rule_nr >= num)
191 int *pset_id,
int *pseq_no,
int *pstream_id,
192 int *pis_keyframe, uint32_t *ptimestamp)
195 int consumed = 0, set_id, seq_no, stream_id,
is_keyframe,
196 len_included, need_reliable;
200 while (
len >= 5 &&
buf[1] == 0xFF ) {
203 if (!(
buf[0] & 0x80))
280 if (stream_id == 0x1f)
283 if (pset_id) *pset_id = set_id;
284 if (pseq_no) *pseq_no = seq_no;
285 if (pstream_id) *pstream_id = stream_id;
287 if (ptimestamp) *ptimestamp = timestamp;
307 &seq, rmflags, *timestamp);
343 if (!
s->parse_packet)
346 if (!
buf &&
s->prev_stream_id != -1) {
349 rv=
s->parse_packet(
s->ic,
s->dynamic_protocol_context,
350 s->streams[
s->prev_stream_id],
361 (set_id !=
s->prev_set_id || timestamp !=
s->prev_timestamp ||
362 stream_id !=
s->prev_stream_id)) {
364 s->prev_set_id = set_id;
365 s->prev_timestamp = timestamp;
367 s->prev_stream_id = stream_id;
371 if (
s->prev_stream_id >=
s->n_streams) {
372 s->prev_stream_id = -1;
376 rv =
s->parse_packet(
s->ic,
s->dynamic_protocol_context,
377 s->streams[
s->prev_stream_id],
385 int stream_nr,
int rule_nr)
388 stream_nr, rule_nr * 2, stream_nr, rule_nr * 2 + 1);
391 static unsigned char *
394 unsigned char *target;
400 *target_len =
len * 3 / 4;
413 const char *p =
line;
417 }
else if (
av_strstart(p,
"StartTime:integer;", &p))
419 else if (
av_strstart(p,
"ASMRuleBook:string;", &p)) {
422 for (
n = 0;
n <
s->nb_streams;
n++)
423 if (
s->streams[
n]->id == stream->
id) {
424 int count =
s->streams[
n]->index + 1, err;
437 if (!rdt->
rmst[
s->streams[
n]->index])
451 if (sscanf(p,
" %*1[Aa]verage%*1[Bb]andwidth=%"SCNd64, &st->
codecpar->
bit_rate) == 1)
453 if (!(p = strchr(p,
',')) || p >
end)
466 st->
id = orig_st->
id;
478 int n_rules = 0, odd = 0;
497 if (!(
end = strchr(p,
';')))
499 if (!odd &&
end != p) {
518 const char *p =
line;
556 #define RDT_HANDLER(n, s, t) \
557 RTPDynamicProtocolHandler ff_rdt_ ## n ## _handler = { \
560 .codec_id = AV_CODEC_ID_NONE, \
561 .priv_data_size = sizeof(PayloadContext), \
563 .parse_sdp_a_line = rdt_parse_sdp_line, \
564 .close = rdt_close_context, \
565 .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
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.
#define MKTAG(a, b, c, d)
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)
static av_cold int end(AVCodecContext *avctx)
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.
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...
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.
void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len)
Hash an array of data.
#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)
int64_t first_dts
Timestamp corresponding to the last dts sync point.
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)
int ffio_init_context(AVIOContext *s, 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, uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
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.
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...
int avformat_open_input(AVFormatContext **ps, const char *url, ff_const59 AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
static AVStream * add_dstream(AVFormatContext *s, AVStream *orig_st)
RMStream * ff_rm_alloc_rmstream(void)
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, 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 * 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
AVInputFormat ff_rdt_demuxer
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).
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