summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-12-20 03:14:43 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-12-20 03:14:43 +0200
commit1cf4802c1d53bb5e7c2d5604b52001afa8ca572f (patch)
tree69e87303c559b175ac244756b20bb68166faac07
parent042ab4feb5deece2535a081976fdf6b64faa3d05 (diff)
downloadmpv-1cf4802c1d53bb5e7c2d5604b52001afa8ca572f.tar.bz2
mpv-1cf4802c1d53bb5e7c2d5604b52001afa8ca572f.tar.xz
demux_mkv: remove old code for -nocorrect-pts support
There should be no reason for anyone to use demux_mkv in -nocorrect-pts mode any more, so delete the code used for that.
-rw-r--r--libmpdemux/demux_mkv.c131
1 files changed, 0 insertions, 131 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index 91fb4a2bf4..2414b01b4b 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -139,14 +139,6 @@ typedef struct mkv_track {
int subtitle_type;
- /* The timecodes of video frames might have to be reordered if they're
- in display order (the timecodes, not the frames themselves!). In this
- case demux packets have to be cached with the help of these variables. */
- int reorder_timecodes;
- demux_packet_t **cached_dps;
- int num_cached_dps, num_allocated_dps;
- double max_pts;
-
/* generic content encoding support */
mkv_content_encoding_t *encodings;
int num_encodings;
@@ -282,32 +274,6 @@ static int aac_get_sample_rate_index(uint32_t sample_rate)
return i;
}
-/** \brief Free cached demux packets
- *
- * Reordering the timecodes requires caching of demux packets. This function
- * frees all these cached packets and the memory for the cached pointers
- * itself.
- *
- * \param demuxer The demuxer for which the cache is to be freed.
- */
-static void free_cached_dps(demuxer_t *demuxer)
-{
- mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv;
- mkv_track_t *track;
- int i, k;
-
- for (k = 0; k < mkv_d->num_tracks; k++) {
- track = mkv_d->tracks[k];
- for (i = 0; i < track->num_cached_dps; i++)
- free_demux_packet(track->cached_dps[i]);
- free(track->cached_dps);
- track->cached_dps = NULL;
- track->num_cached_dps = 0;
- track->num_allocated_dps = 0;
- track->max_pts = 0;
- }
-}
-
static void demux_mkv_decode(mkv_track_t *track, uint8_t *src,
uint8_t **dest, uint32_t *size, uint32_t type)
{
@@ -1174,7 +1140,6 @@ static const videocodec_info_t vinfo[] = {
static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track,
int vid)
{
- struct MPOpts *opts = demuxer->opts;
BITMAPINFOHEADER *bih;
void *ImageDesc = NULL;
sh_video_t *sh_v;
@@ -1278,7 +1243,6 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track,
bih = realloc(bih, bih->biSize);
memcpy(bih + 1, track->private_data, track->private_size);
}
- track->reorder_timecodes = opts->user_correct_pts == 0;
if (!vi->id) {
mp_tmsg(MSGT_DEMUX, MSGL_WARN, "[mkv] Unknown/unsupported "
"CodecID (%s) or missing/bad CodecPrivate\n"
@@ -1800,7 +1764,6 @@ static void demux_close_mkv(demuxer_t *demuxer)
if (mkv_d) {
int i;
- free_cached_dps(demuxer);
if (mkv_d->tracks) {
for (i = 0; i < mkv_d->num_tracks; i++)
demux_mkv_free_trackentry(mkv_d->tracks[i]);
@@ -2057,96 +2020,6 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track,
}
}
-/** Reorder timecodes and add cached demux packets to the queues.
- *
- * Timecode reordering is needed if a video track contains B frames that
- * are timestamped in display order (e.g. MPEG-1, MPEG-2 or "native" MPEG-4).
- * MPlayer doesn't like timestamps in display order. This function adjusts
- * the timestamp of cached frames (which are exactly one I/P frame followed
- * by one or more B frames) so that they are in coding order again.
- *
- * Example: The track with 25 FPS contains four frames with the timecodes
- * I at 0ms, P at 120ms, B at 40ms and B at 80ms. As soon as the next I
- * or P frame arrives these timecodes can be changed to I at 0ms, P at 40ms,
- * B at 80ms and B at 120ms.
- *
- * This works for simple H.264 B-frame pyramids, but not for arbitrary orders.
- *
- * \param demuxer The Matroska demuxer struct for this instance.
- * \param track The track structure whose cache should be handled.
- */
-static void flush_cached_dps(demuxer_t *demuxer, mkv_track_t *track)
-{
- int i, ok;
-
- if (track->num_cached_dps == 0)
- return;
-
- do {
- ok = 1;
- for (i = 1; i < track->num_cached_dps; i++)
- if (track->cached_dps[i - 1]->pts > track->cached_dps[i]->pts) {
- double tmp_pts = track->cached_dps[i - 1]->pts;
- track->cached_dps[i - 1]->pts = track->cached_dps[i]->pts;
- track->cached_dps[i]->pts = tmp_pts;
- ok = 0;
- }
- } while (!ok);
-
- for (i = 0; i < track->num_cached_dps; i++)
- ds_add_packet(demuxer->video, track->cached_dps[i]);
- track->num_cached_dps = 0;
-}
-
-/** Cache video frames if timecodes have to be reordered.
- *
- * Timecode reordering is needed if a video track contains B frames that
- * are timestamped in display order (e.g. MPEG-1, MPEG-2 or "native" MPEG-4).
- * This function takes in a Matroska block read from the file, allocates a
- * demux packet for it, fills in its values, allocates space for storing
- * pointers to the cached demux packets and adds the packet to it. If
- * the packet contains an I or a P frame then ::flush_cached_dps is called
- * in order to send the old cached frames downstream.
- *
- * \param demuxer The Matroska demuxer struct for this instance.
- * \param track The packet is meant for this track.
- * \param buffer The actual frame contents.
- * \param size The frame size in bytes.
- * \param block_bref A relative timecode (backward reference). If it is \c 0
- * then the frame is an I frame.
- * \param block_fref A relative timecode (forward reference). If it is \c 0
- * then the frame is either an I frame or a P frame depending on the value
- * of \a block_bref. Otherwise it's a B frame.
- */
-static void handle_video_bframes(demuxer_t *demuxer, mkv_track_t *track,
- uint8_t *buffer, uint32_t size,
- int block_bref, int block_fref)
-{
- mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv;
- demux_packet_t *dp;
-
- dp = new_demux_packet(size);
- memcpy(dp->buffer, buffer, size);
- dp->pos = demuxer->filepos;
- dp->pts = mkv_d->last_pts;
- if ((track->num_cached_dps > 0) && (dp->pts < track->max_pts))
- block_fref = 1;
- if (block_fref == 0) /* I or P frame */
- flush_cached_dps(demuxer, track);
- if (block_bref != 0) /* I frame, don't cache it */
- dp->flags = 0x10;
- if ((track->num_cached_dps + 1) > track->num_allocated_dps) {
- track->cached_dps = (demux_packet_t **)
- realloc(track->cached_dps,
- (track->num_cached_dps + 10) * sizeof(demux_packet_t *));
- track->num_allocated_dps += 10;
- }
- track->cached_dps[track->num_cached_dps] = dp;
- track->num_cached_dps++;
- if (dp->pts > track->max_pts)
- track->max_pts = dp->pts;
-}
-
static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length,
uint64_t block_duration, int64_t block_bref,
int64_t block_fref, uint8_t simpleblock)
@@ -2254,9 +2127,6 @@ static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length,
else if (ds == demuxer->audio && track->realmedia)
handle_realaudio(demuxer, track, block, lace_size[i],
block_bref);
- else if (ds == demuxer->video && track->reorder_timecodes)
- handle_video_bframes(demuxer, track, block, lace_size[i],
- block_bref, block_fref);
else {
int size = lace_size[i];
demux_packet_t *dp;
@@ -2567,7 +2437,6 @@ static void demux_mkv_seek(demuxer_t *demuxer, float rel_seek_secs,
// specifies a keyframe with high, but not perfect, precision.
rel_seek_secs += flags & SEEK_FORWARD ? -0.005 : 0.005;
- free_cached_dps(demuxer);
if (!(flags & SEEK_FACTOR)) { /* time in secs */
mkv_index_t *index = NULL;