--- libavformat/segment.c	2012-10-24 15:04:22.000000000 +0800
+++ /home/zcp/ffmpeg-1.0/libavformat/segment.c	2012-09-28 09:37:35.000000000 +0800
@@ -74,19 +74,6 @@
     double start_time, end_time;
 } SegmentContext;
 
-typedef struct _ListSeg {
-    int index;
-    float start;
-    float end;
-    char segname[64];
-    struct _ListSeg *next;
-} SegEntity; 
-
-SegEntity *SegList = NULL; /* buffered list */
-int SegNum = 0; /* buffered list objects number */
-int SeqOffset = 0; /* init value of EXT-X-MEDIA-SEQUENCE */
-char SegName[1024] = {0}; /* tmp list name */
-
 static void print_csv_escaped_str(AVIOContext *ctx, const char *str)
 {
     int needs_quoting = !!str[strcspn(str, "\",\n\r")];
@@ -103,143 +90,6 @@
         avio_w8(ctx, '"');
 }
 
-/* dump buffered list objects to play list */
-static int seg_dump(AVFormatContext *s)
-{
-    SegEntity *p;
-    SegmentContext *seg = s->priv_data;
-    int count = 0;
-    int ret = 0;
-
-    /* make there are at least 3 objects in the list */
-    if(SegNum < 3) {
-	av_log(s, AV_LOG_ERROR, "delay dump coz %d segments hold\n", SegNum);
-	return -1;
-    }
-    
-    ret = avio_open2(&seg->list_pb, &SegName[0], AVIO_FLAG_WRITE, &s->interrupt_callback, NULL); // open tmp list
-    if (ret < 0)
-        return ret;
-
-    p = SegList;
-    
-    if (seg->list_type == LIST_TYPE_FLAT) {
-	while(p) {
-	    avio_printf(seg->list_pb, "%s\n", p->segname);
-	    p = p->next;
-	    count++;
-	}
-    } else if (seg->list_type == LIST_TYPE_CSV || seg->list_type == LIST_TYPE_EXT) {
-	while(p) {
-	    print_csv_escaped_str(seg->list_pb, p->segname);
-	    avio_printf(seg->list_pb, ",%f,%f\n", p->start, p->end);
-	    p = p->next;
-	    count++;
-	}
-    } else if (seg->list_type == LIST_TYPE_M3U8) {
-        avio_printf(seg->list_pb, "#EXTM3U\n");
-        /*avio_printf(seg->list_pb, "#EXT-X-VERSION:3\n");*/
-	avio_printf(seg->list_pb, "#EXT-X-MEDIA-SEQUENCE:%d\n", p?SeqOffset:0);
-
-        /*avio_printf(seg->list_pb, "#EXT-X-ALLOWCACHE:%d\n",
-                    !!(seg->list_flags & SEGMENT_LIST_FLAG_CACHE));*/
-        if (seg->list_flags & SEGMENT_LIST_FLAG_LIVE)
-            avio_printf(seg->list_pb, "#EXT-X-TARGETDURATION:%"PRId64"\n", seg->time / 1000000);
-
-	while(p) {
-	    avio_printf(seg->list_pb, "#EXTINF:%d,\n%s\n", (int)(p->end - p->start), p->segname);
-	    av_log(s, AV_LOG_ERROR, "\tdump %s\n", p->segname);
-	    p = p->next;
-	    count++;
-	}
-
-        avio_flush(seg->list_pb);
-    }
-
-    avio_close(seg->list_pb);
-    if(count > 0) {
-	rename(SegName, seg->list);
-	av_log(s, AV_LOG_ERROR, "dump %d %d segments to list\n", count, SegNum);
-    }
-
-    if(count != SegNum) {
-	av_log(s, AV_LOG_ERROR, "seg queue is inconsistent %d %d\n", count, SegNum);
-    }
-}
-
-static int seg_enqueue(int cur_idx, float start, float end, char* name)
-{
-    SegEntity *tail;
-    SegEntity *p;
-    if (!name)
-	goto failed;
-    tail = SegList;
-    p = SegList;
-    while(p) {
-	tail = p;
-	p = p->next;
-    }
-    
-    p = (SegEntity*)av_malloc(sizeof(SegEntity));
-    if (!p)
-	goto failed;
-    p->next = NULL;
-    p->index = cur_idx - 1;
-    p->start = start;
-    p->end = end;
-    strcpy(p->segname, name);
-    
-    if (!SegList)
-	SegList = p;
-    else
-	tail->next = p;
-    
-    SegNum++;
-    return SegNum;
-failed:
-    return -1;
-}
-
-static SegEntity* seg_dequeue()
-{
-    SegEntity *p;
-    p = SegList;
-    if(p) {
-	SegList = p->next;
-	SegNum--;
-	return p;
-    }
-    return NULL;
-}
-
-/* prepare overlaped list, which is better for VLC */
-static int seg_shrink(int limit)
-{
-    SegEntity *p;
-    if(SegNum > limit) {
-	p = seg_dequeue();
-	if(p) {
-	    av_free(p);
-	    SeqOffset++;
-	}
-    }
-    return SegNum;
-}
-
-/* prepare non-overlaped list */
-static int seg_shrink2(int limit)
-{
-    SegEntity *p;
-    if(SegNum == limit) {
-	p = seg_dequeue();
-	while(p) {
-	    av_free(p);
-	    p = seg_dequeue();
-	}
-    }
-    return SegNum;
-}
-
 static int segment_start(AVFormatContext *s)
 {
     SegmentContext *seg = s->priv_data;
@@ -255,7 +105,6 @@
         return AVERROR(EINVAL);
     }
     seg->segment_count++;
-    av_log(s, AV_LOG_ERROR, "segment count %d index %d wrap %d filename %s\n", seg->segment_count, seg->segment_idx, seg->segment_idx_wrap, oc->filename);
 
     if ((err = avio_open2(&oc->pb, oc->filename, AVIO_FLAG_WRITE,
                           &s->interrupt_callback, NULL)) < 0)
@@ -293,7 +142,7 @@
     SegmentContext *seg = s->priv_data;
     int ret;
 
-    ret = avio_open2(&seg->list_pb, &SegName[0], AVIO_FLAG_WRITE,
+    ret = avio_open2(&seg->list_pb, seg->list, AVIO_FLAG_WRITE,
                      &s->interrupt_callback, NULL);
     if (ret < 0)
         return ret;
@@ -333,7 +182,6 @@
     SegmentContext *seg = s->priv_data;
     AVFormatContext *oc = seg->avf;
     int ret = 0;
-    int num = 0;
 
     if (oc->oformat->write_trailer)
         ret = oc->oformat->write_trailer(oc);
@@ -344,37 +192,22 @@
 
     if (seg->list) {
         if (seg->list_size && !(seg->segment_count % seg->list_size)) {
-            /*segment_list_close(s);
+            segment_list_close(s);
             if ((ret = segment_list_open(s)) < 0)
-                goto end;*/
-	    
+                goto end;
         }
 
-	num = seg_enqueue(seg->segment_idx, seg->start_time, seg->end_time, oc->filename);
         if (seg->list_type == LIST_TYPE_FLAT) {
-            /*avio_printf(seg->list_pb, "%s\n", oc->filename);*/
-	    if(num > 0) {
-		seg_dump(s);
-		seg_shrink2(seg->list_size);
-	    }
+            avio_printf(seg->list_pb, "%s\n", oc->filename);
         } else if (seg->list_type == LIST_TYPE_CSV || seg->list_type == LIST_TYPE_EXT) {
-            /*print_csv_escaped_str(seg->list_pb, oc->filename);
-            avio_printf(seg->list_pb, ",%f,%f\n", seg->start_time, seg->end_time);*/
-	    if(num > 0) {
-		seg_dump(s);
-		seg_shrink2(seg->list_size);
-	    }
+            print_csv_escaped_str(seg->list_pb, oc->filename);
+            avio_printf(seg->list_pb, ",%f,%f\n", seg->start_time, seg->end_time);
         } else if (seg->list_type == LIST_TYPE_M3U8) {
-            /*avio_printf(seg->list_pb, "#EXTINF:%f,\n%s\n",
-                        seg->end_time - seg->start_time, oc->filename);*/
-	    num = seg_shrink(seg->list_size);
-	    if(num > 0) {
-		seg_dump(s);
-		/*seg_shrink2(seg->list_size);*/
-	    }
+            avio_printf(seg->list_pb, "#EXTINF:%f,\n%s\n",
+                        seg->end_time - seg->start_time, oc->filename);
         }
         seg->list_max_segment_time = FFMAX(seg->end_time - seg->start_time, seg->list_max_segment_time);
-        /*avio_flush(seg->list_pb);*/
+        avio_flush(seg->list_pb);
     }
 
 end:
@@ -446,13 +279,6 @@
     int ret, i;
 
     seg->segment_count = 0;
-    /*tuohu: use timestamp as init segment index which is better for skip stale cache objects when restarting on CDN */
-    snprintf(SegName, "tmp_%s", seg->list, strlen(seg->list));
-    if (seg->segment_idx == 0) {
-	seg->segment_idx = ((int)(ff_ntp_time() / 100000));
-	SeqOffset = seg->segment_idx - 1000;
-	SeqOffset = SeqOffset > 0 ? SeqOffset : 0;
-    }
 
     if (seg->time_str && seg->times_str) {
         av_log(s, AV_LOG_ERROR,
@@ -503,8 +329,8 @@
             else if (av_match_ext(seg->list, "m3u8")) seg->list_type = LIST_TYPE_M3U8;
             else                                      seg->list_type = LIST_TYPE_FLAT;
         }
-        /*if ((ret = segment_list_open(s)) < 0)
-            goto fail;*/
+        if ((ret = segment_list_open(s)) < 0)
+            goto fail;
     }
     if (seg->list_type == LIST_TYPE_EXT)
         av_log(s, AV_LOG_WARNING, "'ext' list type option is deprecated in favor of 'csv'\n");
@@ -542,7 +368,6 @@
         goto fail;
     }
     seg->segment_count++;
-    av_log(s, AV_LOG_ERROR, "segment count %d index %d wrap %d filename %s (init)\n", seg->segment_count, seg->segment_idx, seg->segment_idx_wrap, oc->filename);
 
     if ((ret = avio_open2(&oc->pb, oc->filename, AVIO_FLAG_WRITE,
                           &s->interrupt_callback, NULL)) < 0)
