summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-02-04 15:37:05 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-02-04 15:37:05 +0100
commit073e771c9c5330216bdb3def5bd3ab671930b27f (patch)
tree58140d37740badbf5e41340c595212a272139102 /libavformat
parent5144d919964f050d953b9dbe6910fb5388a1965d (diff)
parent33c859c142ef3f49b7a6227014ad92a680cf4d74 (diff)
Merge commit '33c859c142ef3f49b7a6227014ad92a680cf4d74'
* commit '33c859c142ef3f49b7a6227014ad92a680cf4d74': lavf: ignore attachment streams for interleaving purposes Conflicts: libavformat/avformat.h libavformat/internal.h libavformat/mux.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avformat.h8
-rw-r--r--libavformat/internal.h8
-rw-r--r--libavformat/mux.c7
-rw-r--r--libavformat/options.c8
-rw-r--r--libavformat/utils.c1
5 files changed, 30 insertions, 2 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 13f6524d85..fe3757a309 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -971,6 +971,8 @@ enum AVDurationEstimationMethod {
AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate)
};
+typedef struct AVFormatInternal AVFormatInternal;
+
/**
* Format I/O context.
* New fields can be added to the end with minor version bumps.
@@ -1332,6 +1334,12 @@ typedef struct AVFormatContext {
AVRational offset_timebase;
/**
+ * An opaque field for libavformat internal usage.
+ * Must not be accessed in any way by callers.
+ */
+ AVFormatInternal *internal;
+
+ /**
* IO repositioned flag.
* This is set by avformat when the underlaying IO context read pointer
* is repositioned, for example when doing byte based seeking.
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 59370565ca..a840f8af05 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -46,6 +46,14 @@ typedef struct CodecMime{
enum AVCodecID id;
} CodecMime;
+struct AVFormatInternal {
+ /**
+ * Number of streams relevant for interleaving.
+ * Muxing only.
+ */
+ int nb_interleaved_streams;
+};
+
#ifdef __GNUC__
#define dynarray_add(tab, nb_ptr, elem)\
do {\
diff --git a/libavformat/mux.c b/libavformat/mux.c
index aebfe2c8f7..71a099f643 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -320,6 +320,9 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
av_log(s, AV_LOG_WARNING,
"Codec for stream %d does not use global headers "
"but container format requires global headers\n", i);
+
+ if (codec->codec_type != AVMEDIA_TYPE_ATTACHMENT)
+ s->internal->nb_interleaved_streams++;
}
if (!s->priv_data && of->priv_data_size > 0) {
@@ -727,7 +730,7 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
}
}
- if (s->nb_streams == stream_count) {
+ if (s->internal->nb_interleaved_streams == stream_count) {
flush = 1;
} else if (!flush) {
for (i=0; i < s->nb_streams; i++) {
@@ -742,7 +745,7 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
delta_dts_max= FFMAX(delta_dts_max, delta_dts);
}
}
- if (s->nb_streams == stream_count+noninterleaved_count &&
+ if (s->internal->nb_interleaved_streams == stream_count+noninterleaved_count &&
delta_dts_max > 20*AV_TIME_BASE) {
av_log(s, AV_LOG_DEBUG, "flushing with %d noninterleaved\n", noninterleaved_count);
flush = 1;
diff --git a/libavformat/options.c b/libavformat/options.c
index 5218e5b92a..e0d6df6fbd 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -19,6 +19,7 @@
*/
#include "avformat.h"
#include "avio_internal.h"
+#include "internal.h"
#include "libavutil/opt.h"
/**
@@ -109,6 +110,13 @@ AVFormatContext *avformat_alloc_context(void)
ic = av_malloc(sizeof(AVFormatContext));
if (!ic) return ic;
avformat_get_context_defaults(ic);
+
+ ic->internal = av_mallocz(sizeof(*ic->internal));
+ if (!ic->internal) {
+ avformat_free_context(ic);
+ return NULL;
+ }
+
return ic;
}
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 56ce38bbcf..2be4279b45 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -3480,6 +3480,7 @@ void avformat_free_context(AVFormatContext *s)
av_freep(&s->chapters);
av_dict_free(&s->metadata);
av_freep(&s->streams);
+ av_freep(&s->internal);
av_free(s);
}