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;
421 }
else if (
av_strstart(p,
"StartTime:integer;", &p))
423 else if (
av_strstart(p,
"ASMRuleBook:string;", &p)) {
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
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