aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/rdt.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2008-12-13 21:37:27 +0000
committerRonald S. Bultje <rsbultje@gmail.com>2008-12-13 21:37:27 +0000
commita15ebf34c77c7c93aef70caeeace538f47eaab8a (patch)
tree2ed9198c79fd39059ad3c627030aa3ea08fabb6f /libavformat/rdt.c
parent616deed28f0626a98022837488b222aa158ce3b4 (diff)
downloadffmpeg-a15ebf34c77c7c93aef70caeeace538f47eaab8a.tar.gz
Don't access RMContext directly in rdt.c. Rather, use the return value of
ff_rm_parse_packet() to indicate whether more audio packets are available in the demuxer from the last RM frame, and save that in the RDT parsing context. See patch/discussion in "[PATCH] rdt.c: don't access RMContext" on ML. Originally committed as revision 16110 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/rdt.c')
-rw-r--r--libavformat/rdt.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/libavformat/rdt.c b/libavformat/rdt.c
index a86cb6f780..be35cd02d5 100644
--- a/libavformat/rdt.c
+++ b/libavformat/rdt.c
@@ -84,6 +84,7 @@ struct PayloadContext {
uint8_t *mlti_data;
unsigned int mlti_data_size;
char buffer[RTP_MAX_PACKET_LENGTH + FF_INPUT_BUFFER_PADDING_SIZE];
+ int audio_pkt_cnt[MAX_STREAMS]; /**< remaining audio packets in rmdec */
};
void
@@ -294,9 +295,8 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st,
{
int seq = 1, res;
ByteIOContext pb;
- RMContext *rm = rdt->rmctx->priv_data;
- if (rm->audio_pkt_cnt == 0) {
+ if (rdt->audio_pkt_cnt == 0) {
int pos;
init_put_byte(&pb, buf, len, 0, NULL, NULL, NULL, NULL);
@@ -306,7 +306,8 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st,
pos = url_ftell(&pb);
if (res < 0)
return res;
- if (rm->audio_pkt_cnt > 0 &&
+ rdt->audio_pkt_cnt[st->id] = res;
+ if (rdt->audio_pkt_cnt[st->id] > 0 &&
st->codec->codec_id == CODEC_ID_AAC) {
memcpy (rdt->buffer, buf + pos, len - pos);
rdt->rmctx->pb = av_alloc_put_byte (rdt->buffer, len - pos, 0,
@@ -314,14 +315,14 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st,
}
} else {
ff_rm_retrieve_cache (rdt->rmctx, rdt->rmctx->pb, st, pkt);
- if (rm->audio_pkt_cnt == 0 &&
+ if (rdt->audio_pkt_cnt[st->id] == 0 &&
st->codec->codec_id == CODEC_ID_AAC)
av_freep(&rdt->rmctx->pb);
}
pkt->stream_index = st->index;
pkt->pts = *timestamp;
- return rm->audio_pkt_cnt > 0;
+ return rdt->audio_pkt_cnt[st->id] > 0;
}
int