mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00:00
Change function prototype of RTPDynamicPayloadHandler.parse_packet() to
not use RTPDemuxContext, but rather take a pointer to the payload context directly. This allows using payload handlers regardless over the transport over which they were sent, and prepares for the introduction of a future RDTDemuxContext. See discussion in "RDT/Realmedia patches #2" thread on ML. Originally committed as revision 15541 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ed0aacc76e
commit
9b932b8ac0
@ -163,14 +163,13 @@ ff_rdt_parse_header(const uint8_t *buf, int len,
|
||||
|
||||
/**< return 0 on packet, no more left, 1 on packet, 1 on partial packet... */
|
||||
static int
|
||||
rdt_parse_packet (RTPDemuxContext *s, AVPacket *pkt, uint32_t *timestamp,
|
||||
rdt_parse_packet (PayloadContext *rdt, AVStream *st,
|
||||
AVPacket *pkt, uint32_t *timestamp,
|
||||
const uint8_t *buf, int len, int flags)
|
||||
{
|
||||
PayloadContext *rdt = s->dynamic_protocol_context;
|
||||
int seq = 1, res;
|
||||
ByteIOContext *pb = rdt->rmctx->pb;
|
||||
RMContext *rm = rdt->rmctx->priv_data;
|
||||
AVStream *st = s->st;
|
||||
|
||||
if (rm->audio_pkt_cnt == 0) {
|
||||
int pos;
|
||||
@ -217,7 +216,8 @@ ff_rdt_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
|
||||
if (!buf) {
|
||||
/* return the next packets, if any */
|
||||
timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned....
|
||||
rv= s->parse_packet(s, pkt, ×tamp, NULL, 0, flags);
|
||||
rv= s->parse_packet(s->dynamic_protocol_context,
|
||||
s->st, pkt, ×tamp, NULL, 0, flags);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@ -235,7 +235,8 @@ ff_rdt_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
|
||||
len -= rv;
|
||||
s->seq = seq;
|
||||
|
||||
rv = s->parse_packet(s, pkt, ×tamp, buf, len, flags);
|
||||
rv = s->parse_packet(s->dynamic_protocol_context,
|
||||
s->st, pkt, ×tamp, buf, len, flags);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -159,15 +159,13 @@ static void sdp_parse_fmtp_config_h264(AVStream * stream,
|
||||
}
|
||||
|
||||
// return 0 on packet, no more left, 1 on packet, 1 on partial packet...
|
||||
static int h264_handle_packet(RTPDemuxContext * s,
|
||||
static int h264_handle_packet(PayloadContext *data,
|
||||
AVStream *st,
|
||||
AVPacket * pkt,
|
||||
uint32_t * timestamp,
|
||||
const uint8_t * buf,
|
||||
int len, int flags)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
PayloadContext *data = s->dynamic_protocol_context;
|
||||
#endif
|
||||
uint8_t nal = buf[0];
|
||||
uint8_t type = (nal & 0x1f);
|
||||
int result= 0;
|
||||
|
@ -46,13 +46,15 @@ typedef struct PayloadContext PayloadContext;
|
||||
* Packet parsing for "private" payloads in the RTP specs.
|
||||
*
|
||||
* @param s stream context
|
||||
* @param st stream that this packet belongs to
|
||||
* @param pkt packet in which to write the parsed data
|
||||
* @param timestamp pointer in which to write the timestamp of this RTP packet
|
||||
* @param buf pointer to raw RTP packet data
|
||||
* @param len length of buf
|
||||
* @param flags flags from the RTP packet header (PKT_FLAG_*)
|
||||
*/
|
||||
typedef int (*DynamicPayloadPacketHandlerProc) (struct RTPDemuxContext * s,
|
||||
typedef int (*DynamicPayloadPacketHandlerProc) (PayloadContext *s,
|
||||
AVStream *st,
|
||||
AVPacket * pkt,
|
||||
uint32_t *timestamp,
|
||||
const uint8_t * buf,
|
||||
|
@ -399,7 +399,8 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
|
||||
/* return the next packets, if any */
|
||||
if(s->st && s->parse_packet) {
|
||||
timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned....
|
||||
rv= s->parse_packet(s, pkt, ×tamp, NULL, 0, flags);
|
||||
rv= s->parse_packet(s->dynamic_protocol_context,
|
||||
s->st, pkt, ×tamp, NULL, 0, flags);
|
||||
finalize_packet(s, pkt, timestamp);
|
||||
return rv;
|
||||
} else {
|
||||
@ -463,7 +464,8 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
|
||||
return 1;
|
||||
}
|
||||
} else if (s->parse_packet) {
|
||||
rv = s->parse_packet(s, pkt, ×tamp, buf, len, flags);
|
||||
rv = s->parse_packet(s->dynamic_protocol_context,
|
||||
s->st, pkt, ×tamp, buf, len, flags);
|
||||
} else {
|
||||
// at this point, the RTP header has been stripped; This is ASSUMING that there is only 1 CSRC, which in't wise.
|
||||
switch(st->codec->codec_id) {
|
||||
|
Loading…
Reference in New Issue
Block a user