diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2008-12-13 21:37:27 +0000 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2008-12-13 21:37:27 +0000 |
commit | a15ebf34c77c7c93aef70caeeace538f47eaab8a (patch) | |
tree | 2ed9198c79fd39059ad3c627030aa3ea08fabb6f | |
parent | 616deed28f0626a98022837488b222aa158ce3b4 (diff) | |
download | ffmpeg-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
-rw-r--r-- | libavformat/rdt.c | 11 | ||||
-rw-r--r-- | libavformat/rm.h | 4 | ||||
-rw-r--r-- | libavformat/rmdec.c | 2 |
3 files changed, 10 insertions, 7 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 diff --git a/libavformat/rm.h b/libavformat/rm.h index 01c0d1681e..eff271fd2a 100644 --- a/libavformat/rm.h +++ b/libavformat/rm.h @@ -93,7 +93,9 @@ int ff_rm_read_mdpr_codecdata (AVFormatContext *s, ByteIOContext *pb, * @param flags pointer to an integer containing the packet flags, may be updated * @param ts pointer to timestamp, may be updated - * @return 0 on success, errno codes on error + * @return >=0 on success (where >0 indicates there are cached samples that + * can be retrieved with subsequent calls to ff_rm_retrieve_cache()), + * errno codes on error */ int ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb, AVStream *st, int len, diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index ea4cf809e9..440443c01d 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -644,7 +644,7 @@ ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb, if (*flags & 2) pkt->flags |= PKT_FLAG_KEY; - return 0; + return st->codec->codec_type == CODEC_TYPE_AUDIO ? rm->audio_pkt_cnt : 0; } void |