[FFmpeg-soc] [soc]: r4796 - in concat/libavformat: concatgen.c playlist.c playlist.h

gkovacs subversion at mplayerhq.hu
Fri Jul 24 02:03:10 CEST 2009


Author: gkovacs
Date: Fri Jul 24 02:03:09 2009
New Revision: 4796

Log:
removed PlayElem

Modified:
   concat/libavformat/concatgen.c
   concat/libavformat/playlist.c
   concat/libavformat/playlist.h

Modified: concat/libavformat/concatgen.c
==============================================================================
--- concat/libavformat/concatgen.c	Fri Jul 24 01:29:45 2009	(r4795)
+++ concat/libavformat/concatgen.c	Fri Jul 24 02:03:09 2009	(r4796)
@@ -43,11 +43,10 @@ int ff_concatgen_read_packet(AVFormatCon
     ctx = s->priv_data;
     stream_index = 0;
     retr:
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ic = ctx->icl[ctx->pe_curidx];
     ret = ic->iformat->read_packet(ic, pkt);
     if (pkt) {
         stream_index = pkt->stream_index;
-        ic = ctx->pelist[ctx->pe_curidx]->ic;
         pkt->stream = ic->streams[pkt->stream_index];
     }
     if (ret >= 0) {
@@ -83,7 +82,7 @@ int ff_concatgen_read_seek(AVFormatConte
     PlaylistContext *ctx;
     AVFormatContext *ic;
     ctx = s->priv_data;
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ic = ctx->icl[ctx->pe_curidx];
     return ic->iformat->read_seek(ic, stream_index, pts, flags);
 }
 
@@ -95,7 +94,7 @@ int ff_concatgen_read_timestamp(AVFormat
     PlaylistContext *ctx;
     AVFormatContext *ic;
     ctx = s->priv_data;
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ic = ctx->icl[ctx->pe_curidx];
     if (ic->iformat->read_timestamp)
         return ic->iformat->read_timestamp(ic, stream_index, pos, pos_limit);
     return 0;
@@ -106,7 +105,7 @@ int ff_concatgen_read_close(AVFormatCont
     PlaylistContext *ctx;
     AVFormatContext *ic;
     ctx = s->priv_data;
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ic = ctx->icl[ctx->pe_curidx];
     if (ic->iformat->read_close)
         return ic->iformat->read_close(ic);
     return 0;
@@ -117,7 +116,7 @@ int ff_concatgen_read_play(AVFormatConte
     PlaylistContext *ctx;
     AVFormatContext *ic;
     ctx = s->priv_data;
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ic = ctx->icl[ctx->pe_curidx];
     return av_read_play(ic);
 }
 
@@ -126,6 +125,6 @@ int ff_concatgen_read_pause(AVFormatCont
     PlaylistContext *ctx;
     AVFormatContext *ic;
     ctx = s->priv_data;
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ic = ctx->icl[ctx->pe_curidx];
     return av_read_pause(ic);
 }

Modified: concat/libavformat/playlist.c
==============================================================================
--- concat/libavformat/playlist.c	Fri Jul 24 01:29:45 2009	(r4795)
+++ concat/libavformat/playlist.c	Fri Jul 24 02:03:09 2009	(r4796)
@@ -34,16 +34,17 @@
 #include "playlist.h"
 #include "internal.h"
 
-void ff_playlist_init_playelem(PlayElem *pe)
+AVFormatContext *ff_playlist_alloc_formatcontext(char *filename)
 {
     int err;
-    pe->ic = av_mallocz(sizeof(*(pe->ic)));
-    err = av_open_input_file(&(pe->ic), pe->filename, pe->ic->iformat, 0, NULL);
+    AVFormatContext *ic = av_mallocz(sizeof(*ic));
+    err = av_open_input_file(&(ic), filename, ic->iformat, 0, NULL);
     if (err < 0)
-        av_log(pe->ic, AV_LOG_ERROR, "Error during av_open_input_file\n");
-    err = av_find_stream_info(pe->ic);
+        av_log(ic, AV_LOG_ERROR, "Error during av_open_input_file\n");
+    err = av_find_stream_info(ic);
     if (err < 0)
-        av_log(pe->ic, AV_LOG_ERROR, "Could not find stream info\n");
+        av_log(ic, AV_LOG_ERROR, "Could not find stream info\n");
+    return ic;
 }
 
 void ff_playlist_populate_context(AVFormatContext *s)
@@ -51,8 +52,8 @@ void ff_playlist_populate_context(AVForm
     int i;
     AVFormatContext *ic;
     PlaylistContext *ctx = s->priv_data;
-    ff_playlist_init_playelem(ctx->pelist[ctx->pe_curidx]);
-    ic = ctx->pelist[ctx->pe_curidx]->ic;
+    ctx->icl = av_realloc(ctx->icl, sizeof(*(ctx->icl)) * (ctx->pe_curidx+1));
+    ic = ctx->icl[ctx->pe_curidx] = ff_playlist_alloc_formatcontext(ctx->flist[ctx->pe_curidx]);
     ic->iformat->read_header(ic, 0);
     s->nb_streams = ic->nb_streams;
     for (i = 0; i < ic->nb_streams; ++i)
@@ -78,10 +79,10 @@ void ff_playlist_set_context(AVFormatCon
 
 AVStream *ff_playlist_get_stream(PlaylistContext *ctx, int pe_idx, int stream_index)
 {
-    if (ctx && pe_idx < ctx->pelist_size && ctx->pelist && ctx->pelist[pe_idx] &&
-        ctx->pelist[pe_idx]->ic && stream_index < ctx->pelist[pe_idx]->ic->nb_streams &&
-        ctx->pelist[pe_idx]->ic->streams && ctx->pelist[pe_idx]->ic->streams[stream_index])
-        return ctx->pelist[pe_idx]->ic->streams[stream_index];
+    if (ctx && pe_idx < ctx->pelist_size && ctx->icl && ctx->icl[pe_idx] &&
+        ctx->icl[pe_idx] && stream_index < ctx->icl[pe_idx]->nb_streams &&
+        ctx->icl[pe_idx]->streams && ctx->icl[pe_idx]->streams[stream_index])
+        return ctx->icl[pe_idx]->streams[stream_index];
     else
         return NULL;
 }
@@ -132,10 +133,8 @@ PlaylistContext *ff_playlist_from_encode
 
 void ff_playlist_add_path(PlaylistContext *ctx, char *itempath)
 {
-    ctx->pelist_size++;
-    ctx->pelist = av_realloc(ctx->pelist, ctx->pelist_size * sizeof(PlayElem*));
-    ctx->pelist[ctx->pelist_size-1] = av_mallocz(sizeof(*(ctx->pelist[ctx->pelist_size-1])));
-    ctx->pelist[ctx->pelist_size-1]->filename = itempath;
+    ctx->flist = av_realloc(ctx->flist, sizeof(*(ctx->flist)) * ++ctx->pelist_size);
+    ctx->flist[ctx->pelist_size-1] = itempath;
 }
 
 // converts list of mixed absolute and relative paths into all absolute paths

Modified: concat/libavformat/playlist.h
==============================================================================
--- concat/libavformat/playlist.h	Fri Jul 24 01:29:45 2009	(r4795)
+++ concat/libavformat/playlist.h	Fri Jul 24 02:03:09 2009	(r4796)
@@ -37,29 +37,22 @@
 #include "riff.h"
 #include <libgen.h>
 
-/** @struct PlayElem
- *  @brief Represents each input file on a playlist.
- */
-typedef struct PlayElem {
-    AVFormatContext *ic; /**< AVFormatContext for this playlist item */
-    char *filename; /**< Filename with absolute path of this playlist item */
-} PlayElem;
-
 /** @struct PlaylistContext
  *  @brief Represents the playlist and contains PlayElem for each playlist item.
  */
 typedef struct PlaylistContext {
-    PlayElem **pelist; /**< List of PlayElem, with each representing a playlist item */
+    char **flist; /**< List of file names for each playlist item */
+    AVFormatContext **icl; /**< List of FormatContext for each playlist items */
     int pelist_size; /**< Number of PlayElem stored in pelist */
     int pe_curidx; /**< Index of the PlayElem that packets are being read from */
     int64_t time_offset; /**< Time offset, in 10^-6 seconds, for all multimedia streams */
 } PlaylistContext;
 
-/** @fn int ff_playlist_init_playelem(PlayElem* pe)
- *  @brief Opens file, codecs, and streams associated with PlayElem.
- *  @param pe PlayElem to open. It should already be allocated.
+/** @fn int ff_playlist_alloc_playelem(PlayElem* pe)
+ *  @brief Allocates and opens file, codecs, and streams associated with filename.
+ *  @param filename Null-terminated string of file to open.
  */
-void ff_playlist_init_playelem(PlayElem* pe);
+AVFormatContext *ff_playlist_alloc_formatcontext(char *filename);
 
 /** @fn void ff_playlist_populate_context(PlaylistContext *playlc, AVFormatContext *s, int stream_index)
  *  @brief Opens the current PlayElem from the PlaylistContext.


More information about the FFmpeg-soc mailing list