[FFmpeg-cvslog] r9200 - trunk/libavformat/mpegts.c

michael subversion
Mon Jun 4 13:46:59 CEST 2007


Author: michael
Date: Mon Jun  4 13:46:59 2007
New Revision: 9200

Log:
make new_service() update existing info sanely


Modified:
   trunk/libavformat/mpegts.c

Modified: trunk/libavformat/mpegts.c
==============================================================================
--- trunk/libavformat/mpegts.c	(original)
+++ trunk/libavformat/mpegts.c	Mon Jun  4 13:46:59 2007
@@ -364,7 +364,8 @@ static int parse_section_header(SectionH
 static MpegTSService *new_service(MpegTSContext *ts, int sid,
                                   char *provider_name, char *name)
 {
-    MpegTSService *service;
+    MpegTSService *service=NULL;
+    int i;
 
 #ifdef DEBUG_SI
     av_log(ts->stream, AV_LOG_DEBUG, "new_service: "
@@ -372,13 +373,24 @@ static MpegTSService *new_service(MpegTS
            sid, provider_name, name);
 #endif
 
-    service = av_mallocz(sizeof(MpegTSService));
-    if (!service)
-        return NULL;
+    for(i=0; i<ts->nb_services; i++)
+        if(ts->services[i]->sid == sid)
+            service= ts->services[i];
+
+    if(!service){
+        service = av_mallocz(sizeof(MpegTSService));
+        if (!service)
+            return NULL;
+        dynarray_add(&ts->services, &ts->nb_services, service);
+    }
     service->sid = sid;
-    service->provider_name = provider_name;
-    service->name = name;
-    dynarray_add(&ts->services, &ts->nb_services, service);
+    assert((!provider_name) == (!name));
+    if(name){
+        av_free(service->provider_name);
+        av_free(service->         name);
+        service->provider_name = provider_name;
+        service->         name =          name;
+    }
     return service;
 }
 




More information about the ffmpeg-cvslog mailing list