Skip to content
Browse files

Move myth libavformat/utils.c mods into libavformat/utils-myth.c

Try to keep all our modifications localised, so the original libavformat/utils.c has the minimum amount of differences as possible. Hoping to simplify future resync
  • Loading branch information...
1 parent 5243960 commit 3d1260bdb773c8eaebbedc57d56fccecc896b144 @jyavenard jyavenard committed May 23, 2012
View
1 mythtv/external/FFmpeg/libavformat/Makefile
@@ -18,6 +18,7 @@ OBJS = allformats.o \
sdp.o \
seek.o \
utils.o \
+ utils-myth.o \
OBJS-$(CONFIG_NETWORK) += network.o
View
16 mythtv/external/FFmpeg/libavformat/avformat.h
@@ -1102,7 +1102,6 @@ typedef struct AVPacketList {
struct AVPacketList *next;
} AVPacketList;
-#define MAX_STREAMS 100
/**
* @defgroup lavf_core Core functions
@@ -1563,10 +1562,6 @@ void av_set_pts_info(AVStream *s, int pts_wrap_bits,
unsigned int pts_num, unsigned int pts_den);
#endif
-void av_estimate_timings(AVFormatContext *ic, int64_t old_offset);
-AVStream *av_add_stream(AVFormatContext *s, AVStream *st, int id);
-void av_remove_stream(AVFormatContext *s, int id, int remove_ts);
-
#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward
#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes
#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes
@@ -1924,6 +1919,17 @@ const struct AVCodecTag *avformat_get_riff_audio_tags(void);
* @}
*/
+/* MythTV changes */
+
+#define MAX_STREAMS 100
+
+void estimate_timings(AVFormatContext *ic, int64_t old_offset);
+void av_estimate_timings(AVFormatContext *ic, int64_t old_offset);
+AVStream *av_add_stream(AVFormatContext *s, AVStream *st, int id);
+void av_remove_stream(AVFormatContext *s, int id, int remove_ts);
+void flush_packet_queue(AVFormatContext *s);
+/* End MythTV changes */
+
/**
* @}
*/
View
160 mythtv/external/FFmpeg/libavformat/utils-myth.c
@@ -0,0 +1,160 @@
+/*
+ * MPEG2 transport utilities
+ * Copyright (c) 2002-2012 The MythTV Team
+ *
+ * This file is part of MythTV.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "avformat.h"
+#include "mpegts-mythtv.h"
+
+#ifdef _WIN32
+#define gmtime_r(X, Y) (memcpy(Y, gmtime(X), sizeof(struct tm)), Y)
+#define localtime_r(X, Y) (memcpy(Y, localtime(X), sizeof(struct tm)), Y)
+#endif
+
+
+/**
+ * @brief Add a stream to an MPEG media stream.
+ *
+ * This is used by mpegts instead of av_new_stream, so we can
+ * track new streams as indicated by the PMT.
+ *
+ * @param s MPEG media stream handle
+ * @param st new media stream
+ * @param id file format dependent stream id
+ */
+AVStream *av_add_stream(AVFormatContext *s, AVStream *st, int id)
+{
+ int i;
+
+ if (!st)
+ {
+ av_log(s, AV_LOG_ERROR, "av_add_stream: Error, AVStream is NULL");
+ return NULL;
+ }
+
+ av_remove_stream(s, id, 0);
+
+ if (s->nb_streams >= MAX_STREAMS)
+ {
+ av_log(s, AV_LOG_ERROR, "av_add_stream: Error, (s->nb_streams >= MAX_STREAMS)");
+ return NULL;
+ }
+
+ if (s->iformat) {
+ /* no default bitrate if decoding */
+ st->codec->bit_rate = 0;
+ }
+ st->index = s->nb_streams;
+ st->id = id;
+ st->start_time = AV_NOPTS_VALUE;
+ st->duration = AV_NOPTS_VALUE;
+ st->cur_dts = AV_NOPTS_VALUE;
+ st->first_dts = AV_NOPTS_VALUE;
+
+ /* default pts settings is MPEG like */
+ av_set_pts_info(st, 33, 1, 90000);
+ st->last_IP_pts = AV_NOPTS_VALUE;
+ for(i=0; i<MAX_REORDER_DELAY+1; i++)
+ st->pts_buffer[i]= AV_NOPTS_VALUE;
+
+ s->streams[s->nb_streams++] = st;
+ return st;
+}
+
+
+/**
+ * @brief Remove a stream from a media stream.
+ *
+ * This is used by mpegts, so we can track streams as indicated by the PMT.
+ *
+ * @param s MPEG media stream handle
+ * @param id stream id of stream to remove
+ * @param remove_ts if true, remove any matching MPEG-TS filter as well
+ */
+void av_remove_stream(AVFormatContext *s, int id, int remove_ts) {
+ int i;
+ int changes = 0;
+
+ for (i=0; i<s->nb_streams; i++) {
+ if (s->streams[i]->id != id)
+ continue;
+
+ av_log(NULL, AV_LOG_DEBUG, "av_remove_stream 0x%x\n", id);
+
+ /* close codec context */
+ AVCodecContext *codec_ctx = s->streams[i]->codec;
+ if (codec_ctx->codec) {
+ avcodec_close(codec_ctx);
+ av_free(codec_ctx);
+ }
+#if 0
+ /* make sure format context is not using the codec context */
+ if (&s->streams[i] == s->cur_st) {
+ av_log(NULL, AV_LOG_DEBUG, "av_remove_stream cur_st = NULL\n");
+ s->cur_st = NULL;
+ }
+#endif
+ /* else if (s->cur_st > &s->streams[i]) {
+ av_log(NULL, AV_LOG_DEBUG, "av_remove_stream cur_st -= 1\n");
+ s->cur_st -= sizeof(AVFormatContext *);
+ } */
+ else {
+ av_log(NULL, AV_LOG_DEBUG,
+ "av_remove_stream: no change to cur_st\n");
+ }
+
+ av_log(NULL, AV_LOG_DEBUG, "av_remove_stream: removing... "
+ "s->nb_streams=%d i=%d\n", s->nb_streams, i);
+ /* actually remove av stream */
+ s->nb_streams--;
+ if ((s->nb_streams - i) > 0) {
+ memmove(&s->streams[i], &s->streams[i+1],
+ (s->nb_streams-i)*sizeof(AVFormatContext *));
+ }
+ else
+ s->streams[i] = NULL;
+
+ /* remove ts filter if remove ts is true and
+ * the format decoder is the "mpegts" decoder
+ */
+ if (remove_ts && s->iformat && s->priv_data &&
+ (0 == strncmp(s->iformat->name, "mpegts", 6))) {
+ av_log(NULL, AV_LOG_DEBUG,
+ "av_remove_stream: mpegts_remove_stream\n");
+ MpegTSContext *context = (MpegTSContext*) s->priv_data;
+ mpegts_remove_stream(context, id);
+ }
+ changes = 1;
+ }
+ if (changes)
+ {
+ // flush queued packets after a stream change (might need to make smarter)
+ flush_packet_queue(s);
+
+ /* renumber the streams */
+ av_log(NULL, AV_LOG_DEBUG, "av_remove_stream: renumbering streams\n");
+ for (i=0; i<s->nb_streams; i++)
+ s->streams[i]->index=i;
+ }
+}
+
+void av_estimate_timings(AVFormatContext *ic, int64_t old_offset)
+{
+ return estimate_timings(ic, old_offset);
+}
View
142 mythtv/external/FFmpeg/libavformat/utils.c
@@ -39,7 +39,6 @@
#include "libavutil/parseutils.h"
#include "riff.h"
#include "audiointerleave.h"
-#include "mpegts-mythtv.h"
#include "url.h"
#include <sys/time.h>
#include <time.h>
@@ -48,11 +47,6 @@
#include "network.h"
#endif
-#ifdef _WIN32
-#define gmtime_r(X, Y) (memcpy(Y, gmtime(X), sizeof(struct tm)), Y)
-#define localtime_r(X, Y) (memcpy(Y, localtime(X), sizeof(struct tm)), Y)
-#endif
-
#undef NDEBUG
#include <assert.h>
@@ -1438,7 +1432,7 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
}
/* XXX: suppress the packet queue */
-static void flush_packet_queue(AVFormatContext *s)
+void flush_packet_queue(AVFormatContext *s)
{
free_packet_buffer(&s->parse_queue, &s->parse_queue_end);
free_packet_buffer(&s->packet_buffer, &s->packet_buffer_end);
@@ -2254,11 +2248,6 @@ void estimate_timings(AVFormatContext *ic, int64_t old_offset)
}
}
-void av_estimate_timings(AVFormatContext *ic, int64_t old_offset)
-{
- return estimate_timings(ic, old_offset);
-}
-
static int has_codec_parameters(AVStream *st)
{
AVCodecContext *avctx = st->codec;
@@ -2463,13 +2452,13 @@ int av_find_stream_info(AVFormatContext *ic)
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
{
- int i, count, ret, read_size, j, read_packets = 0;
+ int i, count, ret, read_size, j;
AVStream *st;
AVPacket pkt1, *pkt;
int64_t old_offset = avio_tell(ic->pb);
int orig_nb_streams = ic->nb_streams; // new streams might appear, no options for those
int flush_codecs = 1;
- int hasaudio = 0, hasvideo = 0;
+ int hasaudio = 0, hasvideo = 0, read_packets = 0;
for(i=0;i<ic->nb_streams;i++) {
AVCodec *codec;
@@ -3012,54 +3001,6 @@ AVStream *avformat_new_stream(AVFormatContext *s, AVCodec *c)
st->reference_dts = AV_NOPTS_VALUE;
st->sample_aspect_ratio = (AVRational){0,1};
- s->streams[s->nb_streams++] = st;
- return st;
-}
-
-/**
- * @brief Add a stream to an MPEG media stream.
- *
- * This is used by mpegts instead of av_new_stream, so we can
- * track new streams as indicated by the PMT.
- *
- * @param s MPEG media stream handle
- * @param st new media stream
- * @param id file format dependent stream id
- */
-AVStream *av_add_stream(AVFormatContext *s, AVStream *st, int id)
-{
- int i;
-
- if (!st)
- {
- av_log(s, AV_LOG_ERROR, "av_add_stream: Error, AVStream is NULL");
- return NULL;
- }
-
- av_remove_stream(s, id, 0);
-
- if (s->nb_streams >= MAX_STREAMS)
- {
- av_log(s, AV_LOG_ERROR, "av_add_stream: Error, (s->nb_streams >= MAX_STREAMS)");
- return NULL;
- }
-
- if (s->iformat) {
- /* no default bitrate if decoding */
- st->codec->bit_rate = 0;
- }
- st->index = s->nb_streams;
- st->id = id;
- st->start_time = AV_NOPTS_VALUE;
- st->duration = AV_NOPTS_VALUE;
- st->cur_dts = AV_NOPTS_VALUE;
- st->first_dts = AV_NOPTS_VALUE;
-
- /* default pts settings is MPEG like */
- av_set_pts_info(st, 33, 1, 90000);
- st->last_IP_pts = AV_NOPTS_VALUE;
- for(i=0; i<MAX_REORDER_DELAY+1; i++)
- st->pts_buffer[i]= AV_NOPTS_VALUE;
s->streams[s->nb_streams++] = st;
return st;
@@ -3112,83 +3053,6 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base,
return chapter;
}
-
-/**
- * @brief Remove a stream from a media stream.
- *
- * This is used by mpegts, so we can track streams as indicated by the PMT.
- *
- * @param s MPEG media stream handle
- * @param id stream id of stream to remove
- * @param remove_ts if true, remove any matching MPEG-TS filter as well
- */
-void av_remove_stream(AVFormatContext *s, int id, int remove_ts) {
- int i;
- int changes = 0;
-
- for (i=0; i<s->nb_streams; i++) {
- if (s->streams[i]->id != id)
- continue;
-
- av_log(NULL, AV_LOG_DEBUG, "av_remove_stream 0x%x\n", id);
-
- /* close codec context */
- AVCodecContext *codec_ctx = s->streams[i]->codec;
- if (codec_ctx->codec) {
- avcodec_close(codec_ctx);
- av_free(codec_ctx);
- }
-#if 0
- /* make sure format context is not using the codec context */
- if (&s->streams[i] == s->cur_st) {
- av_log(NULL, AV_LOG_DEBUG, "av_remove_stream cur_st = NULL\n");
- s->cur_st = NULL;
- }
-#endif
- /* else if (s->cur_st > &s->streams[i]) {
- av_log(NULL, AV_LOG_DEBUG, "av_remove_stream cur_st -= 1\n");
- s->cur_st -= sizeof(AVFormatContext *);
- } */
- else {
- av_log(NULL, AV_LOG_DEBUG,
- "av_remove_stream: no change to cur_st\n");
- }
-
- av_log(NULL, AV_LOG_DEBUG, "av_remove_stream: removing... "
- "s->nb_streams=%d i=%d\n", s->nb_streams, i);
- /* actually remove av stream */
- s->nb_streams--;
- if ((s->nb_streams - i) > 0) {
- memmove(&s->streams[i], &s->streams[i+1],
- (s->nb_streams-i)*sizeof(AVFormatContext *));
- }
- else
- s->streams[i] = NULL;
-
- /* remove ts filter if remove ts is true and
- * the format decoder is the "mpegts" decoder
- */
- if (remove_ts && s->iformat && s->priv_data &&
- (0 == strncmp(s->iformat->name, "mpegts", 6))) {
- av_log(NULL, AV_LOG_DEBUG,
- "av_remove_stream: mpegts_remove_stream\n");
- MpegTSContext *context = (MpegTSContext*) s->priv_data;
- mpegts_remove_stream(context, id);
- }
- changes = 1;
- }
- if (changes)
- {
- // flush queued packets after a stream change (might need to make smarter)
- flush_packet_queue(s);
-
- /* renumber the streams */
- av_log(NULL, AV_LOG_DEBUG, "av_remove_stream: renumbering streams\n");
- for (i=0; i<s->nb_streams; i++)
- s->streams[i]->index=i;
- }
-}
-
/************************************************************/
/* output media file */

0 comments on commit 3d1260b

Please sign in to comment.
Something went wrong with that request. Please try again.