diff rdt.c @ 4133:90a12fced519 libavformat

Add RMStream object as function argument to public functions so that non-.rm AVStreams can be used to call these public rmdec.c functions as well, as is the case for RDT/RTSP streams. See mailinglist discussion in "[PATCH] rdt.c: don't reuse the same AVStream in both RTSP and RM demuxer" thread.
author rbultje
date Sun, 28 Dec 2008 00:21:11 +0000
parents 233ba738a68e
children d74875f9b3d4
line wrap: on
line diff
--- a/rdt.c	Sun Dec 28 00:18:38 2008 +0000
+++ b/rdt.c	Sun Dec 28 00:21:11 2008 +0000
@@ -81,6 +81,7 @@
 
 struct PayloadContext {
     AVFormatContext *rmctx;
+    RMStream *rmst[MAX_STREAMS];
     uint8_t *mlti_data;
     unsigned int mlti_data_size;
     char buffer[RTP_MAX_PACKET_LENGTH + FF_INPUT_BUFFER_PADDING_SIZE];
@@ -174,7 +175,7 @@
         size = rdt->mlti_data_size;
         url_fseek(&pb, 0, SEEK_SET);
     }
-    if (ff_rm_read_mdpr_codecdata(rdt->rmctx, &pb, st, size) < 0)
+    if (ff_rm_read_mdpr_codecdata(rdt->rmctx, &pb, st, rdt->rmst[0], size) < 0)
         return -1;
 
     return 0;
@@ -301,7 +302,7 @@
 
         init_put_byte(&pb, buf, len, 0, NULL, NULL, NULL, NULL);
         flags = (flags & PKT_FLAG_KEY) ? 2 : 0;
-        res = ff_rm_parse_packet (rdt->rmctx, &pb, st, len, pkt,
+        res = ff_rm_parse_packet (rdt->rmctx, &pb, st, rdt->rmst[0], len, pkt,
                                   &seq, &flags, timestamp);
         pos = url_ftell(&pb);
         if (res < 0)
@@ -314,7 +315,7 @@
                                                 NULL, NULL, NULL, NULL);
         }
     } else {
-        ff_rm_retrieve_cache (rdt->rmctx, rdt->rmctx->pb, st, pkt);
+        ff_rm_retrieve_cache (rdt->rmctx, rdt->rmctx->pb, st, rdt->rmst[0], pkt);
         if (rdt->audio_pkt_cnt[st->id] == 0 &&
             st->codec->codec_id == CODEC_ID_AAC)
             av_freep(&rdt->rmctx->pb);
@@ -426,6 +427,7 @@
     PayloadContext *rdt = av_mallocz(sizeof(PayloadContext));
 
     av_open_input_stream(&rdt->rmctx, NULL, "", &rdt_demuxer, NULL);
+    rdt->rmst[0] = ff_rm_alloc_rmstream();
 
     return rdt;
 }
@@ -433,6 +435,7 @@
 static void
 rdt_free_extradata (PayloadContext *rdt)
 {
+    ff_rm_free_rmstream(rdt->rmst[0]);
     if (rdt->rmctx)
         av_close_input_stream(rdt->rmctx);
     av_freep(&rdt->mlti_data);