提交 ca6cae73 编写于 作者: S Sasi Inguva 提交者: Michael Niedermayer

lavf/mov: Add support for edit list parsing.

Signed-off-by: NSasi Inguva <isasi@google.com>
Signed-off-by: NMichael Niedermayer <michael@niedermayer.cc>
上级 a5320187
......@@ -34,6 +34,7 @@
#include "libavutil/intfloat.h"
#include "libavutil/mathematics.h"
#include "libavutil/time_internal.h"
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/dict.h"
#include "libavutil/display.h"
......@@ -2756,6 +2757,348 @@ static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
return pb->eof_reached ? AVERROR_EOF : 0;
}
/**
* Get ith edit list entry (media time, duration).
*/
static int get_edit_list_entry(const MOVStreamContext *msc,
unsigned int edit_list_index,
int64_t *edit_list_media_time,
int64_t *edit_list_duration,
int64_t global_timescale)
{
if (edit_list_index == msc->elst_count) {
return 0;
}
*edit_list_media_time = msc->elst_data[edit_list_index].time;
*edit_list_duration = msc->elst_data[edit_list_index].duration;
/* duration is in global timescale units;convert to msc timescale */
if (global_timescale == 0) {
avpriv_request_sample(msc, "Support for mvhd.timescale = 0 with editlists");
return 0;
}
*edit_list_duration = av_rescale(*edit_list_duration, msc->time_scale,
global_timescale);
return 1;
}
/**
* Find the closest previous keyframe to the timestamp, in e_old index
* entries.
* Returns the index of the entry in st->index_entries if successful,
* else returns -1.
*/
static int64_t find_prev_closest_keyframe_index(AVStream *st,
AVIndexEntry *e_old,
int nb_old,
int64_t timestamp,
int flag)
{
AVIndexEntry *e_keep = st->index_entries;
int nb_keep = st->nb_index_entries;
int64_t found = -1;
st->index_entries = e_old;
st->nb_index_entries = nb_old;
found = av_index_search_timestamp(st, timestamp, flag | AVSEEK_FLAG_BACKWARD);
/* restore AVStream state*/
st->index_entries = e_keep;
st->nb_index_entries = nb_keep;
return found;
}
/**
* Add index entry with the given values, to the end of st->index_entries.
* Returns the new size st->index_entries if successful, else returns -1.
*
* This function is similar to ff_add_index_entry in libavformat/utils.c
* except that here we are always unconditionally adding an index entry to
* the end, instead of searching the entries list and skipping the add if
* there is an existing entry with the same timestamp.
* This is needed because the mov_fix_index calls this func with the same
* unincremented timestamp for successive discarded frames.
*/
static int64_t add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
int size, int distance, int flags)
{
AVIndexEntry *entries, *ie;
int64_t index = -1;
const size_t min_size_needed = (st->nb_index_entries + 1) * sizeof(AVIndexEntry);
// Double the allocation each time, to lower memory fragmentation.
// Another difference from ff_add_index_entry function.
const size_t requested_size =
min_size_needed > st->index_entries_allocated_size ?
FFMAX(min_size_needed, 2 * st->index_entries_allocated_size) :
min_size_needed;
if((unsigned)st->nb_index_entries + 1 >= UINT_MAX / sizeof(AVIndexEntry))
return -1;
entries = av_fast_realloc(st->index_entries,
&st->index_entries_allocated_size,
requested_size);
if(!entries)
return -1;
st->index_entries= entries;
index= st->nb_index_entries++;
ie= &entries[index];
ie->pos = pos;
ie->timestamp = timestamp;
ie->min_distance= distance;
ie->size= size;
ie->flags = flags;
return index;
}
/**
* Append a new ctts entry to ctts_data.
* Returns the new ctts_count if successful, else returns -1.
*/
static int64_t add_ctts_entry(MOVStts** ctts_data, unsigned int* ctts_count, unsigned int* allocated_size,
int count, int duration)
{
MOVStts *ctts_buf_new;
const size_t min_size_needed = (*ctts_count + 1) * sizeof(MOVStts);
const size_t requested_size =
min_size_needed > *allocated_size ?
FFMAX(min_size_needed, 2 * (*allocated_size)) :
min_size_needed;
if((unsigned)(*ctts_count) + 1 >= UINT_MAX / sizeof(MOVStts))
return -1;
ctts_buf_new = av_fast_realloc(*ctts_data, allocated_size, requested_size);
if(!ctts_buf_new)
return -1;
*ctts_data = ctts_buf_new;
ctts_buf_new[*ctts_count].count = count;
ctts_buf_new[*ctts_count].duration = duration;
*ctts_count = (*ctts_count) + 1;
return *ctts_count;
}
/**
* Fix st->index_entries, so that it contains only the entries (and the entries
* which are needed to decode them) that fall in the edit list time ranges.
* Also fixes the timestamps of the index entries to match the timeline
* specified the edit lists.
*/
static void mov_fix_index(MOVContext *mov, AVStream *st)
{
MOVStreamContext *msc = st->priv_data;
AVIndexEntry *e_old = st->index_entries;
int nb_old = st->nb_index_entries;
const AVIndexEntry *e_old_end = e_old + nb_old;
const AVIndexEntry *current = NULL;
MOVStts *ctts_data_old = msc->ctts_data;
int64_t ctts_index_old = 0;
int64_t ctts_sample_old = 0;
int64_t ctts_count_old = msc->ctts_count;
int64_t edit_list_media_time = 0;
int64_t edit_list_duration = 0;
int64_t frame_duration = 0;
int64_t edit_list_dts_counter = 0;
int64_t edit_list_dts_entry_end = 0;
int64_t edit_list_start_ctts_sample = 0;
int64_t curr_cts;
int64_t edit_list_index = 0;
int64_t index;
int64_t index_ctts_count;
int flags;
unsigned int ctts_allocated_size = 0;
int64_t start_dts = 0;
int64_t edit_list_media_time_dts = 0;
int64_t edit_list_start_encountered = 0;
int64_t search_timestamp = 0;
if (!msc->elst_data || msc->elst_count <= 0) {
return;
}
// Clean AVStream from traces of old index
st->index_entries = NULL;
st->index_entries_allocated_size = 0;
st->nb_index_entries = 0;
// Clean ctts fields of MOVStreamContext
msc->ctts_data = NULL;
msc->ctts_count = 0;
msc->ctts_index = 0;
msc->ctts_sample = 0;
// If the dts_shift is positive (in case of negative ctts values in mov),
// then negate the DTS by dts_shift
if (msc->dts_shift > 0)
edit_list_dts_entry_end -= msc->dts_shift;
// Offset the DTS by ctts[0] to make the PTS of the first frame 0
if (ctts_data_old && ctts_count_old > 0) {
edit_list_dts_entry_end -= ctts_data_old[0].duration;
av_log(mov->fc, AV_LOG_DEBUG, "Offset DTS by ctts[%d].duration: %d\n", 0, ctts_data_old[0].duration);
}
start_dts = edit_list_dts_entry_end;
while (get_edit_list_entry(msc, edit_list_index, &edit_list_media_time,
&edit_list_duration, mov->time_scale)) {
av_log(mov->fc, AV_LOG_DEBUG, "Processing st: %d, edit list %"PRId64" - media time: %"PRId64", duration: %"PRId64"\n",
st->index, edit_list_index, edit_list_media_time, edit_list_duration);
edit_list_index++;
edit_list_dts_counter = edit_list_dts_entry_end;
edit_list_dts_entry_end += edit_list_duration;
if (edit_list_media_time == -1) {
continue;
}
// If we encounter a non-negative edit list reset the skip_samples/start_pad fields and set them
// according to the edit list below.
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
st->skip_samples = msc->start_pad = 0;
}
//find closest previous key frame
edit_list_media_time_dts = edit_list_media_time;
if (msc->dts_shift > 0) {
edit_list_media_time_dts -= msc->dts_shift;
}
// While reordering frame index according to edit list we must handle properly
// the scenario when edit list entry starts from none key frame.
// We find closest previous key frame and preserve it and consequent frames in index.
// All frames which are outside edit list entry time boundaries will be dropped after decoding.
search_timestamp = edit_list_media_time_dts;
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
// Audio decoders like AAC need need a decoder delay samples previous to the current sample,
// to correctly decode this frame. Hence for audio we seek to a frame 1 sec. before the
// edit_list_media_time to cover the decoder delay.
search_timestamp = FFMAX(search_timestamp - mov->time_scale, e_old[0].timestamp);
}
index = find_prev_closest_keyframe_index(st, e_old, nb_old, search_timestamp, 0);
if (index == -1) {
av_log(mov->fc, AV_LOG_ERROR, "Missing key frame while reordering index according to edit list\n");
continue;
}
current = e_old + index;
ctts_index_old = 0;
ctts_sample_old = 0;
// set ctts_index properly for the found key frame
for (index_ctts_count = 0; index_ctts_count < index; index_ctts_count++) {
if (ctts_data_old && ctts_index_old < ctts_count_old) {
ctts_sample_old++;
if (ctts_data_old[ctts_index_old].count == ctts_sample_old) {
ctts_index_old++;
ctts_sample_old = 0;
}
}
}
edit_list_start_ctts_sample = ctts_sample_old;
// Iterate over index and arrange it according to edit list
edit_list_start_encountered = 0;
for (; current < e_old_end; current++, index++) {
// check if frame outside edit list mark it for discard
frame_duration = (current + 1 < e_old_end) ?
((current + 1)->timestamp - current->timestamp) : edit_list_duration;
flags = current->flags;
// frames (pts) before or after edit list
curr_cts = current->timestamp + msc->dts_shift;
if (ctts_data_old && ctts_index_old < ctts_count_old) {
av_log(mov->fc, AV_LOG_DEBUG, "shifted frame pts, curr_cts: %"PRId64" @ %"PRId64", ctts: %d, ctts_count: %"PRId64"\n",
curr_cts, ctts_index_old, ctts_data_old[ctts_index_old].duration, ctts_count_old);
curr_cts += ctts_data_old[ctts_index_old].duration;
ctts_sample_old++;
if (ctts_sample_old == ctts_data_old[ctts_index_old].count) {
if (add_ctts_entry(&msc->ctts_data, &msc->ctts_count,
&ctts_allocated_size,
ctts_data_old[ctts_index_old].count - edit_list_start_ctts_sample,
ctts_data_old[ctts_index_old].duration) == -1) {
av_log(mov->fc, AV_LOG_ERROR, "Cannot add CTTS entry %"PRId64" - {%"PRId64", %d}\n",
ctts_index_old,
ctts_data_old[ctts_index_old].count - edit_list_start_ctts_sample,
ctts_data_old[ctts_index_old].duration);
break;
}
ctts_index_old++;
ctts_sample_old = 0;
edit_list_start_ctts_sample = 0;
}
}
if (curr_cts < edit_list_media_time || curr_cts >= (edit_list_duration + edit_list_media_time)) {
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && curr_cts < edit_list_media_time &&
curr_cts + frame_duration > edit_list_media_time &&
st->skip_samples == 0 && msc->start_pad == 0) {
st->skip_samples = msc->start_pad = edit_list_media_time - curr_cts;
// Shift the index entry timestamp by skip_samples to be correct.
edit_list_dts_counter -= st->skip_samples;
if (edit_list_start_encountered == 0) {
edit_list_start_encountered = 1;
}
av_log(mov->fc, AV_LOG_DEBUG, "skip %d audio samples from curr_cts: %"PRId64"\n", st->skip_samples, curr_cts);
} else {
flags |= AVINDEX_DISCARD_FRAME;
av_log(mov->fc, AV_LOG_DEBUG, "drop a frame at curr_cts: %"PRId64" @ %"PRId64"\n", curr_cts, index);
}
} else if (edit_list_start_encountered == 0) {
edit_list_start_encountered = 1;
}
if (add_index_entry(st, current->pos, edit_list_dts_counter, current->size,
current->min_distance, flags) == -1) {
av_log(mov->fc, AV_LOG_ERROR, "Cannot add index entry\n");
break;
}
// Only start incrementing DTS in frame_duration amounts, when we encounter a frame in edit list.
if (edit_list_start_encountered > 0) {
edit_list_dts_counter = edit_list_dts_counter + frame_duration;
}
// Break when found first key frame after edit entry completion
if (((curr_cts + frame_duration) >= (edit_list_duration + edit_list_media_time)) &&
((flags & AVINDEX_KEYFRAME) || ((st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)))) {
if (ctts_data_old && ctts_sample_old != 0) {
if (add_ctts_entry(&msc->ctts_data, &msc->ctts_count,
&ctts_allocated_size,
ctts_sample_old - edit_list_start_ctts_sample,
ctts_data_old[ctts_index_old].duration) == -1) {
av_log(mov->fc, AV_LOG_ERROR, "Cannot add CTTS entry %"PRId64" - {%"PRId64", %d}\n",
ctts_index_old, ctts_sample_old - edit_list_start_ctts_sample,
ctts_data_old[ctts_index_old].duration);
break;
}
}
break;
}
}
}
// Update av stream length
st->duration = edit_list_dts_entry_end - start_dts;
// Free the old index and the old CTTS structures
av_free(e_old);
av_free(ctts_data_old);
}
static void mov_build_index(MOVContext *mov, AVStream *st)
{
MOVStreamContext *sc = st->priv_data;
......@@ -2769,7 +3112,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
uint64_t stream_size = 0;
if (sc->elst_count) {
int i, edit_start_index = 0, unsupported = 0;
int i, edit_start_index = 0;
int64_t empty_duration = 0; // empty duration of the first edit list entry
int64_t start_time = 0; // start time of the media
......@@ -2782,23 +3125,15 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
edit_start_index = 1;
} else if (i == edit_start_index && e->time >= 0) {
start_time = e->time;
} else
unsupported = 1;
}
}
if (unsupported)
av_log(mov->fc, AV_LOG_WARNING, "multiple edit list entries, "
"a/v desync might occur, patch welcome\n");
/* adjust first dts according to edit list */
if ((empty_duration || start_time) && mov->time_scale > 0) {
if (empty_duration)
empty_duration = av_rescale(empty_duration, sc->time_scale, mov->time_scale);
sc->time_offset = start_time - empty_duration;
current_dts = -sc->time_offset;
}
if (!unsupported && st->codecpar->codec_id == AV_CODEC_ID_AAC && start_time > 0)
sc->start_pad = start_time;
}
/* only use old uncompressed audio chunk demuxing when stts specifies it */
......@@ -3031,6 +3366,9 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
}
}
}
// Fix index according to edit lists.
mov_fix_index(mov, st);
}
static int test_same_origin(const char *src, const char *ref) {
......@@ -5330,6 +5668,9 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
pkt->stream_index = sc->ffindex;
pkt->dts = sample->timestamp;
if (sample->flags & AVINDEX_DISCARD_FRAME) {
pkt->flags |= AV_PKT_FLAG_DISCARD;
}
if (sc->ctts_data && sc->ctts_index < sc->ctts_count) {
pkt->pts = pkt->dts + sc->dts_shift + sc->ctts_data[sc->ctts_index].duration;
/* update ctts context */
......
......@@ -32,7 +32,7 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 57
#define LIBAVFORMAT_VERSION_MINOR 49
#define LIBAVFORMAT_VERSION_MINOR 50
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
......
......@@ -149,6 +149,7 @@ include $(SRC_PATH)/tests/fate/lossless-video.mak
include $(SRC_PATH)/tests/fate/matroska.mak
include $(SRC_PATH)/tests/fate/microsoft.mak
include $(SRC_PATH)/tests/fate/monkeysaudio.mak
include $(SRC_PATH)/tests/fate/mov.mak
include $(SRC_PATH)/tests/fate/mp3.mak
include $(SRC_PATH)/tests/fate/mpc.mak
include $(SRC_PATH)/tests/fate/mpeg4.mak
......
FATE_MOV = fate-mov-3elist \
fate-mov-3elist-1ctts \
fate-mov-1elist-1ctts \
fate-mov-1elist-noctts \
fate-mov-elist-starts-ctts-2ndsample \
fate-mov-1elist-ends-last-bframe \
fate-mov-2elist-elist1-ends-bframe
FATE_SAMPLES_AVCONV += $(FATE_MOV)
fate-mov: $(FATE_MOV)
# Make sure we handle edit lists correctly in normal cases.
fate-mov-1elist-noctts: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-1elist-noctts.mov
fate-mov-1elist-1ctts: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-1elist-1ctts.mov
fate-mov-3elist: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-3elist.mov
fate-mov-3elist-1ctts: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-3elist-1ctts.mov
# Makes sure that the CTTS is also modified when we fix avindex in mov.c while parsing edit lists.
fate-mov-elist-starts-ctts-2ndsample: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-elist-starts-ctts-2ndsample.mov
# Makes sure that we handle edit lists ending on a B-frame correctly.
# The last frame in decoding order which is B-frame should be output, but the last but-one P-frame shouldn't be
# output.
fate-mov-1elist-ends-last-bframe: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-1elist-ends-last-bframe.mov
# Makes sure that we handle timestamps of packets in case of multiple edit lists with one of them ending on a B-frame correctly.
fate-mov-2elist-elist1-ends-bframe: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov-2elist-elist1-ends-bframe.mov
9b95afdb39b426a33bc962889f820aed *tests/data/fate/copy-trac236.mov
630802 tests/data/fate/copy-trac236.mov
d6e3d97b522ce881ed29c5da74cc7e63 *tests/data/fate/copy-trac236.mov
630810 tests/data/fate/copy-trac236.mov
#tb 0: 100/2997
#media_type 0: video
#codec_id 0: rawvideo
......
......@@ -91,4 +91,3 @@
0, 85, 85, 1, 30576, 0xd4150aad
0, 86, 86, 1, 30576, 0xd4150aad
0, 87, 87, 1, 30576, 0xd4150aad
0, 88, 88, 1, 30576, 0xd4150aad
[STREAM]
index=0
start_pts=0
duration_ts=104384
duration_ts=103326
[/STREAM]
[FORMAT]
start_time=0.000000
duration=2.367000
[/FORMAT]
packet|pts=-1024|dts=-1024|duration=1024
packet|pts=0|dts=0|duration=N/A
packet|pts=0|dts=0|duration=1024
packet|pts=1024|dts=1024|duration=1024
packet|pts=2048|dts=2048|duration=1024
......@@ -22,7 +22,7 @@ packet|pts=98304|dts=98304|duration=1024
packet|pts=99328|dts=99328|duration=1024
packet|pts=100352|dts=100352|duration=1024
packet|pts=101376|dts=101376|duration=1024
packet|pts=102400|dts=102400|duration=1984
packet|pts=102400|dts=102400|duration=926
stream|nb_read_packets=102
frame|pkt_pts=0|pkt_dts=0|best_effort_timestamp=0|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=1024|pkt_dts=1024|best_effort_timestamp=1024|pkt_duration=1024|nb_samples=1024
......@@ -39,5 +39,5 @@ frame|pkt_pts=98304|pkt_dts=98304|best_effort_timestamp=98304|pkt_duration=1024|
frame|pkt_pts=99328|pkt_dts=99328|best_effort_timestamp=99328|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=100352|pkt_dts=100352|best_effort_timestamp=100352|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=101376|pkt_dts=101376|best_effort_timestamp=101376|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=102400|pkt_dts=102400|best_effort_timestamp=102400|pkt_duration=1984|nb_samples=1024
frame|pkt_pts=102400|pkt_dts=102400|best_effort_timestamp=102400|pkt_duration=926|nb_samples=1024
stream|nb_read_frames=101
[STREAM]
index=0
start_pts=0
duration_ts=530224
duration_ts=529200
[/STREAM]
[FORMAT]
start_time=0.000000
duration=12.024000
[/FORMAT]
packet|pts=-1024|dts=-1024|duration=1024
packet|pts=0|dts=0|duration=N/A
packet|pts=0|dts=0|duration=1024
packet|pts=1024|dts=1024|duration=1024
packet|pts=2048|dts=2048|duration=1024
......@@ -22,7 +22,7 @@ packet|pts=524288|dts=524288|duration=1024
packet|pts=525312|dts=525312|duration=1024
packet|pts=526336|dts=526336|duration=1024
packet|pts=527360|dts=527360|duration=1024
packet|pts=528384|dts=528384|duration=1840
packet|pts=528384|dts=528384|duration=816
stream|nb_read_packets=518
frame|pkt_pts=0|pkt_dts=0|best_effort_timestamp=0|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=1024|pkt_dts=1024|best_effort_timestamp=1024|pkt_duration=1024|nb_samples=1024
......@@ -39,5 +39,5 @@ frame|pkt_pts=524288|pkt_dts=524288|best_effort_timestamp=524288|pkt_duration=10
frame|pkt_pts=525312|pkt_dts=525312|best_effort_timestamp=525312|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=526336|pkt_dts=526336|best_effort_timestamp=526336|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=527360|pkt_dts=527360|best_effort_timestamp=527360|pkt_duration=1024|nb_samples=1024
frame|pkt_pts=528384|pkt_dts=528384|best_effort_timestamp=528384|pkt_duration=1840|nb_samples=1024
frame|pkt_pts=528384|pkt_dts=528384|best_effort_timestamp=528384|pkt_duration=816|nb_samples=1024
stream|nb_read_frames=517
此差异已折叠。
......@@ -3,13 +3,13 @@
#codec_id 0: rawvideo
#dimensions 0: 1920x1080
#sar 0: 1/1
0, 1, 1, 1, 6220800, 0x89daa15e
0, 2, 2, 1, 6220800, 0xcf52e254
0, 3, 3, 1, 6220800, 0x91132c13
0, 4, 4, 1, 6220800, 0x37b8be91
0, 5, 5, 1, 6220800, 0x2b09bafa
0, 6, 6, 1, 6220800, 0x06d79d8d
0, 7, 7, 1, 6220800, 0x8e793c1d
0, 8, 8, 1, 6220800, 0xea0fd885
0, 9, 9, 1, 6220800, 0x7786a2ad
0, 10, 10, 1, 6220800, 0xed4f9dd9
0, 0, 0, 1, 6220800, 0x89daa15e
0, 1, 1, 1, 6220800, 0xcf52e254
0, 2, 2, 1, 6220800, 0x91132c13
0, 3, 3, 1, 6220800, 0x37b8be91
0, 4, 4, 1, 6220800, 0x2b09bafa
0, 5, 5, 1, 6220800, 0x06d79d8d
0, 6, 6, 1, 6220800, 0x8e793c1d
0, 7, 7, 1, 6220800, 0xea0fd885
0, 8, 8, 1, 6220800, 0x7786a2ad
0, 9, 9, 1, 6220800, 0xed4f9dd9
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, 3dd21395fc5d3429f9b08492f47af093
0, 1, 1, 1, 460800, 117009cceecc160c385dac3d344505c9
0, 2, 2, 1, 460800, c093aa6e8747287cfeb758f2da7476d1
0, 3, 3, 1, 460800, 6b7c94a3363f3381f7f930ac02b0c975
0, 4, 4, 1, 460800, 87c3824a0ef3566f1a384c3c3e2b0d96
0, 5, 5, 1, 460800, 3de48f3009a159e4737b5993102266de
0, 6, 6, 1, 460800, 2be0ed1afe921093645af2ff917281ab
0, 7, 7, 1, 460800, a89170c8413305fdba8d413a5080e57a
0, 8, 8, 1, 460800, 5a3be131222c223ef8eccd9636330839
0, 9, 9, 1, 460800, 01068b423526481b9732214c16b9e229
0, 10, 10, 1, 460800, f9ea60560154e82d77e2661c34dca143
0, 11, 11, 1, 460800, d77f5b82e34ea5a450076a85141a5618
0, 12, 12, 1, 460800, 91ff4efcfc3a2301fb2329139e0e71a2
0, 13, 13, 1, 460800, af8d914008f5f64f2ec1fadfae8bc697
0, 14, 14, 1, 460800, abb2c4fd1f1ce3c449236da246b62bef
0, 15, 15, 1, 460800, 66b0558f03dd5a472836fea045dd06ea
0, 16, 16, 1, 460800, 224207d3e5b93fc4e8c71b782aabca51
0, 17, 17, 1, 460800, ef975cfa7bc4de88f1333eb301f7ebdd
0, 18, 18, 1, 460800, d75bf790003d2b1ee56bea0cef068e8e
0, 19, 19, 1, 460800, d7a16935d7f808cca046db971e5b612a
0, 20, 20, 1, 460800, f49d06ca4995c267fdc8c674c992cdd1
0, 21, 21, 1, 460800, f53fd634154dec26ec85b6bef01ba890
0, 22, 22, 1, 460800, d2d36371e50ace43ae4d2bab092a24c3
0, 23, 23, 1, 460800, a4c08f4979e7dc914d69a170e198656c
0, 24, 24, 1, 460800, 0d128e33f156fcc228d92117d56a5f93
0, 25, 25, 1, 460800, 52fb8fc75c848ed9bc61d5129473f3fb
0, 26, 26, 1, 460800, 5517f79d2ccb4fc93ede061bfcd632ea
0, 27, 27, 1, 460800, c24fea9e8d02240328de3cb520904a6b
0, 28, 28, 1, 460800, 0cbe46a4b91a0bd235d5e74084058e61
0, 29, 29, 1, 460800, 355b17c2feb6b809c95bb71b333a670d
0, 30, 30, 1, 460800, 063643ba941293ba95e024da202267cb
0, 31, 31, 1, 460800, 8b31727d492fa9b25e025a1f45425b16
0, 32, 32, 1, 460800, 45c5901c24d2ae2304b3e82c075a96bf
0, 33, 33, 1, 460800, b7d4449d0e2157093727cb0f00648751
0, 34, 34, 1, 460800, 167642e702f645853c974531853987f8
0, 35, 35, 1, 460800, 2eb4596d675f099bab6c3b40ce30fd88
0, 36, 36, 1, 460800, 8dd1aec35b92610cb22bedd3c54cb26a
0, 37, 37, 1, 460800, 8eacf32e58d9a731467aba0f61d9e60f
0, 38, 38, 1, 460800, 6a735f86d18ebe265894f633071a25d7
0, 39, 39, 1, 460800, 843b0c938845b72e1c23bc39f7479cba
0, 40, 40, 1, 460800, ca2099b43141cb9131505ab40ac3959f
0, 41, 41, 1, 460800, e65322e1929def11f9985683365ab6bf
0, 42, 42, 1, 460800, 565410a8c2f4b50a192f9590e6ab32c0
0, 43, 43, 1, 460800, fa9a8ac625854cc279a07766ddad6e6f
0, 44, 44, 1, 460800, a46ac62886c48edef3dc58de34a2a004
0, 45, 45, 1, 460800, 414e01b6c24e71efc9c58f65dc0f4aca
0, 46, 46, 1, 460800, e0501b903f21b490da049e51e7a02bae
0, 47, 47, 1, 460800, 48b30eec1e9d862ee54b136045e1d90f
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, b3d774603a22dbf9e952465c0d295166
0, 1, 1, 1, 460800, d8f88e4269888dfadeb15bec662a3851
0, 2, 2, 1, 460800, 6d6e686070143f797f8f1eca43d9cf28
0, 3, 3, 1, 460800, a934f883968e71f22df044f043e61b14
0, 4, 4, 1, 460800, 83dc65c7703f43ce97c87eea7191f69e
0, 5, 5, 1, 460800, d633ab0dba64277b104ff5c2e1983424
0, 6, 6, 1, 460800, 6c7d2c7481bd11584d68dbb9262d8351
0, 7, 7, 1, 460800, 59b0bbc661b79ba82d726ca4d28255f2
0, 8, 8, 1, 460800, 821cd7ca0adc4d6a3f10419b6c4283a6
0, 9, 9, 1, 460800, 4655b1d6e8237b2e880f5b4140f7cf08
0, 10, 10, 1, 460800, 264858653f9ac0623ffc87ca5e4c9939
0, 11, 11, 1, 460800, b7129e91b9a6b4f8582747f12cafa52e
0, 12, 12, 1, 460800, 1f6596fba655e213fd5c2ea99a891138
0, 13, 13, 1, 460800, c8d67dc8fa8bdca263060ae542e55278
0, 14, 14, 1, 460800, 57aa680b64b140eaeaa7f4250c12b59e
0, 15, 15, 1, 460800, b87e8a9c0701cd8811dd38292b9994f7
0, 16, 16, 1, 460800, 2427eb2900c8e18da0f36e47799a5ed8
0, 17, 17, 1, 460800, 710a727a7ba51bc2938ca83376c6edd6
0, 18, 18, 1, 460800, 44d5ce80804d9ca470f9e5348c66e9b3
0, 19, 19, 1, 460800, 448e1fc3af42c4143e5fc4120090cdd6
0, 20, 20, 1, 460800, 7c2c4c61843cfdd033b8fa295766a524
0, 21, 21, 1, 460800, 20a197cb4e20857e135d4c10945987f6
0, 22, 22, 1, 460800, 7534b00e60f6920da7b767aef0876e65
0, 23, 23, 1, 460800, b88cedb84145f07226d5573aa57a1cce
0, 24, 24, 1, 460800, 620751271985df3728b6dbc627974183
0, 25, 25, 1, 460800, 643719b26ac93f93d1674fee97c58a35
0, 26, 26, 1, 460800, 5d3f8fa9abab0256afbf4285cd337804
0, 27, 27, 1, 460800, a6c302c54c6481088f9c27189ecda5a8
0, 28, 28, 1, 460800, 2851ad86c15a1dc7b6d4a0fe8f15de8f
0, 29, 29, 1, 460800, 42157005018908c810b1840856778482
0, 30, 30, 1, 460800, 2541042038568329922fd6f7187aad49
0, 31, 31, 1, 460800, 855b9ecfa9da66ef5971fcea7e515890
0, 32, 32, 1, 460800, 85df610183efce5de91946cb909019c9
0, 33, 33, 1, 460800, 369bce83d8aa0ac3cfb853b7e2886896
0, 34, 34, 1, 460800, b428e7b294e5ac0d316971e02a25b12a
0, 35, 35, 1, 460800, aa66321995b890e8dbd0d7b188ecb19c
0, 36, 36, 1, 460800, 1533e3c85fd9d1f6710442653b936ef0
0, 37, 37, 1, 460800, 99f3d38c95f1e4c0b442007a466f77cb
0, 38, 38, 1, 460800, 30e007d8a4c0f0cfa22c8b6051980b59
0, 39, 39, 1, 460800, fef21426b54048af617211234ee9b602
0, 40, 40, 1, 460800, ff9a482c793a8e9950c0aa7e2845ca0e
0, 41, 41, 1, 460800, ac0bb586786c35a51bdb6a5514ff54b9
0, 42, 42, 1, 460800, bb008ec74fe642d6350bb1b4c922a6b0
0, 43, 43, 1, 460800, 3e4255d1e817b9c6fa2cfbb0f198069d
0, 44, 44, 1, 460800, 0fe04242f0441fa5c90e69ca015f4b2d
0, 45, 45, 1, 460800, f14c12ec008a56c9aa99ef1be857ad23
0, 46, 46, 1, 460800, 43ac558397b699ac82f7e12810c7ade9
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, 3dd21395fc5d3429f9b08492f47af093
0, 1, 1, 1, 460800, 117009cceecc160c385dac3d344505c9
0, 2, 2, 1, 460800, c093aa6e8747287cfeb758f2da7476d1
0, 3, 3, 1, 460800, 6b7c94a3363f3381f7f930ac02b0c975
0, 4, 4, 1, 460800, 87c3824a0ef3566f1a384c3c3e2b0d96
0, 5, 5, 1, 460800, 3de48f3009a159e4737b5993102266de
0, 6, 6, 1, 460800, 2be0ed1afe921093645af2ff917281ab
0, 7, 7, 1, 460800, a89170c8413305fdba8d413a5080e57a
0, 8, 8, 1, 460800, 5a3be131222c223ef8eccd9636330839
0, 9, 9, 1, 460800, 01068b423526481b9732214c16b9e229
0, 10, 10, 1, 460800, f9ea60560154e82d77e2661c34dca143
0, 11, 11, 1, 460800, d77f5b82e34ea5a450076a85141a5618
0, 12, 12, 1, 460800, 91ff4efcfc3a2301fb2329139e0e71a2
0, 13, 13, 1, 460800, af8d914008f5f64f2ec1fadfae8bc697
0, 14, 14, 1, 460800, abb2c4fd1f1ce3c449236da246b62bef
0, 15, 15, 1, 460800, 66b0558f03dd5a472836fea045dd06ea
0, 16, 16, 1, 460800, 224207d3e5b93fc4e8c71b782aabca51
0, 17, 17, 1, 460800, ef975cfa7bc4de88f1333eb301f7ebdd
0, 18, 18, 1, 460800, d75bf790003d2b1ee56bea0cef068e8e
0, 19, 19, 1, 460800, d7a16935d7f808cca046db971e5b612a
0, 20, 20, 1, 460800, f49d06ca4995c267fdc8c674c992cdd1
0, 21, 21, 1, 460800, f53fd634154dec26ec85b6bef01ba890
0, 22, 22, 1, 460800, d2d36371e50ace43ae4d2bab092a24c3
0, 23, 23, 1, 460800, a4c08f4979e7dc914d69a170e198656c
0, 24, 24, 1, 460800, 0d128e33f156fcc228d92117d56a5f93
0, 25, 25, 1, 460800, 52fb8fc75c848ed9bc61d5129473f3fb
0, 26, 26, 1, 460800, 5517f79d2ccb4fc93ede061bfcd632ea
0, 27, 27, 1, 460800, c24fea9e8d02240328de3cb520904a6b
0, 28, 28, 1, 460800, 0cbe46a4b91a0bd235d5e74084058e61
0, 29, 29, 1, 460800, 355b17c2feb6b809c95bb71b333a670d
0, 30, 30, 1, 460800, 063643ba941293ba95e024da202267cb
0, 31, 31, 1, 460800, 8b31727d492fa9b25e025a1f45425b16
0, 32, 32, 1, 460800, 45c5901c24d2ae2304b3e82c075a96bf
0, 33, 33, 1, 460800, b7d4449d0e2157093727cb0f00648751
0, 34, 34, 1, 460800, 167642e702f645853c974531853987f8
0, 35, 35, 1, 460800, 2eb4596d675f099bab6c3b40ce30fd88
0, 36, 36, 1, 460800, 8dd1aec35b92610cb22bedd3c54cb26a
0, 37, 37, 1, 460800, 8eacf32e58d9a731467aba0f61d9e60f
0, 38, 38, 1, 460800, 6a735f86d18ebe265894f633071a25d7
0, 39, 39, 1, 460800, 843b0c938845b72e1c23bc39f7479cba
0, 40, 40, 1, 460800, ca2099b43141cb9131505ab40ac3959f
0, 41, 41, 1, 460800, e65322e1929def11f9985683365ab6bf
0, 42, 42, 1, 460800, 565410a8c2f4b50a192f9590e6ab32c0
0, 43, 43, 1, 460800, fa9a8ac625854cc279a07766ddad6e6f
0, 44, 44, 1, 460800, a46ac62886c48edef3dc58de34a2a004
0, 45, 45, 1, 460800, 414e01b6c24e71efc9c58f65dc0f4aca
0, 46, 46, 1, 460800, e0501b903f21b490da049e51e7a02bae
0, 47, 47, 1, 460800, 48b30eec1e9d862ee54b136045e1d90f
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, b3d774603a22dbf9e952465c0d295166
0, 1, 1, 1, 460800, d8f88e4269888dfadeb15bec662a3851
0, 2, 2, 1, 460800, 6d6e686070143f797f8f1eca43d9cf28
0, 3, 3, 1, 460800, a934f883968e71f22df044f043e61b14
0, 4, 4, 1, 460800, 83dc65c7703f43ce97c87eea7191f69e
0, 5, 5, 1, 460800, d633ab0dba64277b104ff5c2e1983424
0, 6, 6, 1, 460800, 6c7d2c7481bd11584d68dbb9262d8351
0, 7, 7, 1, 460800, 59b0bbc661b79ba82d726ca4d28255f2
0, 8, 8, 1, 460800, 821cd7ca0adc4d6a3f10419b6c4283a6
0, 9, 9, 1, 460800, 4655b1d6e8237b2e880f5b4140f7cf08
0, 10, 10, 1, 460800, 264858653f9ac0623ffc87ca5e4c9939
0, 11, 11, 1, 460800, b7129e91b9a6b4f8582747f12cafa52e
0, 12, 12, 1, 460800, 1f6596fba655e213fd5c2ea99a891138
0, 13, 13, 1, 460800, c8d67dc8fa8bdca263060ae542e55278
0, 14, 14, 1, 460800, 57aa680b64b140eaeaa7f4250c12b59e
0, 15, 15, 1, 460800, b87e8a9c0701cd8811dd38292b9994f7
0, 16, 16, 1, 460800, 2427eb2900c8e18da0f36e47799a5ed8
0, 17, 17, 1, 460800, 710a727a7ba51bc2938ca83376c6edd6
0, 18, 18, 1, 460800, 620751271985df3728b6dbc627974183
0, 19, 19, 1, 460800, 643719b26ac93f93d1674fee97c58a35
0, 20, 20, 1, 460800, 5d3f8fa9abab0256afbf4285cd337804
0, 21, 21, 1, 460800, a6c302c54c6481088f9c27189ecda5a8
0, 22, 22, 1, 460800, 2851ad86c15a1dc7b6d4a0fe8f15de8f
0, 23, 23, 1, 460800, 42157005018908c810b1840856778482
0, 24, 24, 1, 460800, 2541042038568329922fd6f7187aad49
0, 25, 25, 1, 460800, 855b9ecfa9da66ef5971fcea7e515890
0, 26, 26, 1, 460800, 85df610183efce5de91946cb909019c9
0, 27, 27, 1, 460800, 369bce83d8aa0ac3cfb853b7e2886896
0, 28, 28, 1, 460800, b428e7b294e5ac0d316971e02a25b12a
0, 29, 29, 1, 460800, aa66321995b890e8dbd0d7b188ecb19c
0, 30, 30, 1, 460800, 1533e3c85fd9d1f6710442653b936ef0
0, 31, 31, 1, 460800, 99f3d38c95f1e4c0b442007a466f77cb
0, 32, 32, 1, 460800, 30e007d8a4c0f0cfa22c8b6051980b59
0, 33, 33, 1, 460800, fef21426b54048af617211234ee9b602
0, 34, 34, 1, 460800, ff9a482c793a8e9950c0aa7e2845ca0e
0, 35, 35, 1, 460800, ac0bb586786c35a51bdb6a5514ff54b9
0, 36, 36, 1, 460800, bb008ec74fe642d6350bb1b4c922a6b0
0, 37, 37, 1, 460800, 3e4255d1e817b9c6fa2cfbb0f198069d
0, 38, 38, 1, 460800, 0fe04242f0441fa5c90e69ca015f4b2d
0, 39, 39, 1, 460800, f14c12ec008a56c9aa99ef1be857ad23
0, 40, 40, 1, 460800, 43ac558397b699ac82f7e12810c7ade9
0, 41, 41, 1, 460800, 35431eb1a8be4f05d08d23380655178c
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, 80fbbdec589e15e6c493b44d243f92a9
0, 1, 1, 1, 460800, f4b23293bb2ecf69cc3570853d8c56a1
0, 2, 2, 1, 460800, 0c03ce2c1c6ec405d7455465ecd559a3
0, 3, 3, 1, 460800, 7921791695537fba2c3c123da4834cb9
0, 4, 4, 1, 460800, 30c8e2903a561b84d4cbaf95c668d236
0, 5, 5, 1, 460800, 7ff42e998217c17592ddf6b584f26cef
0, 6, 6, 1, 460800, 5e402c48bf097db2d31b82bb4194a382
0, 7, 7, 1, 460800, 824c49e92c8ae6d99a0207b514dd756c
0, 8, 8, 1, 460800, 24f189216a1d9cf2313b2d6dbe3dbdd3
0, 9, 9, 1, 460800, 519179a8e74275d26b183374637e003f
0, 10, 10, 1, 460800, f18331ddcef0adf5b069bfa98baf8db4
0, 11, 11, 1, 460800, 081f61688690d47dbdddd5384e5d5a70
0, 12, 12, 1, 460800, 90dbf019b9035433371a8df41a9268b7
0, 13, 13, 1, 460800, bb5adfb9c66732898b34186eca1667ba
0, 14, 14, 1, 460800, cc08cfd64f37783ecddaf143f6ad78bc
0, 15, 15, 1, 460800, b8ae21d024fe4df903d56f4521993c72
0, 16, 16, 1, 460800, b45a99907f045dcadf0a2befc11555e3
0, 17, 17, 1, 460800, 603ba935845e65ab6cccbbec88bbf60d
0, 18, 18, 1, 460800, df80c8d3e6a77258a306903f17995a18
0, 19, 19, 1, 460800, 4b7e90c0a5fd0e0cd958d47f0afac636
0, 20, 20, 1, 460800, 9feb6e36182f1745be6387edea240eb6
0, 21, 21, 1, 460800, 86e6de4bd0a5ff7558f4cf6c1ec3930d
0, 22, 22, 1, 460800, 726b69df77edbe7b503d4698656d1320
0, 23, 23, 1, 460800, d282fb7a953ac205b0a43d00c2d60a33
0, 24, 24, 1, 460800, eece3daa70cc20208dd75d91ac84c8fd
0, 25, 25, 1, 460800, c86d23e73bcce351fc315fb1f13348da
0, 26, 26, 1, 460800, 93497b4f7c5ad9d61212239b7c9d2770
0, 27, 27, 1, 460800, eb217d2c12de67903835a8c58f620488
0, 28, 28, 1, 460800, d966480867bb54c8cd044f18388ed486
0, 29, 29, 1, 460800, 3ea6207942b3181fdd8e8aa6cae1062a
0, 30, 30, 1, 460800, 2620df54aca086ec0fb9527c6e6f5135
0, 31, 31, 1, 460800, 43bb7320f0bb583188dc965ddbfade90
0, 32, 32, 1, 460800, 0cddaa04645f804e02f65b0836412113
0, 33, 33, 1, 460800, 83b2dc95807289d7f4a4632bf18c2e97
0, 34, 34, 1, 460800, 98134d0e41e6dd12827049ccf33b4669
0, 35, 35, 1, 460800, 56f55631731fa39c7acbab0afeb2eb1b
0, 36, 36, 1, 460800, 379c1105be09d836a515dc909455ddf4
0, 37, 37, 1, 460800, 1df87c47e9d98731faf1c3885b77e5da
0, 38, 38, 1, 460800, 9a8734bcbfdb4d97e530683b8b556a26
0, 39, 39, 1, 460800, c7a7990d0cddc5adfbe27da7a42e025e
0, 40, 40, 1, 460800, 0c81e46011e03be410feaf056207fd55
0, 41, 41, 1, 460800, ca76e4e63016ff29d8aeeb9cb053bb6c
0, 42, 42, 1, 460800, cebfbe299c17c1f8fc1e6b189555c3c2
0, 43, 43, 1, 460800, 4f002c5feca5e75f07089e0df47507dd
0, 44, 44, 1, 460800, c5fd83fc4a745abee9b3d9a6eec9dd3e
0, 45, 45, 1, 460800, 57d9bad9b45aa2746de5d8bdc2c24969
0, 46, 46, 1, 460800, 9831673ad7dec167af4a959f64258949
0, 47, 47, 1, 460800, 77a1cb208f70f51bcb01e28d8cba73b4
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, 3dd21395fc5d3429f9b08492f47af093
0, 1, 1, 1, 460800, 117009cceecc160c385dac3d344505c9
0, 2, 2, 1, 460800, c093aa6e8747287cfeb758f2da7476d1
0, 3, 3, 1, 460800, 6b7c94a3363f3381f7f930ac02b0c975
0, 4, 4, 1, 460800, 87c3824a0ef3566f1a384c3c3e2b0d96
0, 5, 5, 1, 460800, 3de48f3009a159e4737b5993102266de
0, 6, 6, 1, 460800, 2be0ed1afe921093645af2ff917281ab
0, 7, 7, 1, 460800, a89170c8413305fdba8d413a5080e57a
0, 8, 8, 1, 460800, 5a3be131222c223ef8eccd9636330839
0, 9, 9, 1, 460800, 01068b423526481b9732214c16b9e229
0, 10, 10, 1, 460800, f9ea60560154e82d77e2661c34dca143
0, 11, 11, 1, 460800, d77f5b82e34ea5a450076a85141a5618
0, 12, 12, 1, 460800, 91ff4efcfc3a2301fb2329139e0e71a2
0, 13, 13, 1, 460800, af8d914008f5f64f2ec1fadfae8bc697
0, 14, 14, 1, 460800, abb2c4fd1f1ce3c449236da246b62bef
0, 15, 15, 1, 460800, 66b0558f03dd5a472836fea045dd06ea
0, 16, 16, 1, 460800, 224207d3e5b93fc4e8c71b782aabca51
0, 17, 17, 1, 460800, ef975cfa7bc4de88f1333eb301f7ebdd
0, 18, 18, 1, 460800, d75bf790003d2b1ee56bea0cef068e8e
0, 19, 19, 1, 460800, d7a16935d7f808cca046db971e5b612a
0, 20, 20, 1, 460800, f49d06ca4995c267fdc8c674c992cdd1
0, 21, 21, 1, 460800, f53fd634154dec26ec85b6bef01ba890
0, 22, 22, 1, 460800, d2d36371e50ace43ae4d2bab092a24c3
0, 23, 23, 1, 460800, a4c08f4979e7dc914d69a170e198656c
0, 24, 24, 1, 460800, 0d128e33f156fcc228d92117d56a5f93
0, 25, 25, 1, 460800, 52fb8fc75c848ed9bc61d5129473f3fb
0, 26, 26, 1, 460800, 5517f79d2ccb4fc93ede061bfcd632ea
0, 27, 27, 1, 460800, c24fea9e8d02240328de3cb520904a6b
0, 28, 28, 1, 460800, 0cbe46a4b91a0bd235d5e74084058e61
0, 29, 29, 1, 460800, 355b17c2feb6b809c95bb71b333a670d
0, 30, 30, 1, 460800, 063643ba941293ba95e024da202267cb
0, 31, 31, 1, 460800, 8b31727d492fa9b25e025a1f45425b16
0, 32, 32, 1, 460800, 45c5901c24d2ae2304b3e82c075a96bf
0, 33, 33, 1, 460800, b7d4449d0e2157093727cb0f00648751
0, 34, 34, 1, 460800, 167642e702f645853c974531853987f8
0, 35, 35, 1, 460800, 2eb4596d675f099bab6c3b40ce30fd88
0, 36, 36, 1, 460800, 8dd1aec35b92610cb22bedd3c54cb26a
0, 37, 37, 1, 460800, 8eacf32e58d9a731467aba0f61d9e60f
0, 38, 38, 1, 460800, 6a735f86d18ebe265894f633071a25d7
0, 39, 39, 1, 460800, 843b0c938845b72e1c23bc39f7479cba
0, 40, 40, 1, 460800, ca2099b43141cb9131505ab40ac3959f
0, 41, 41, 1, 460800, e65322e1929def11f9985683365ab6bf
0, 42, 42, 1, 460800, 565410a8c2f4b50a192f9590e6ab32c0
0, 43, 43, 1, 460800, fa9a8ac625854cc279a07766ddad6e6f
0, 44, 44, 1, 460800, a46ac62886c48edef3dc58de34a2a004
0, 45, 45, 1, 460800, 414e01b6c24e71efc9c58f65dc0f4aca
0, 46, 46, 1, 460800, e0501b903f21b490da049e51e7a02bae
0, 47, 47, 1, 460800, 48b30eec1e9d862ee54b136045e1d90f
#format: frame checksums
#version: 2
#hash: MD5
#tb 0: 1/24
#media_type 0: video
#codec_id 0: rawvideo
#dimensions 0: 640x480
#sar 0: 0/1
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 460800, e2ec4074e83dd4f9188915b6b08aa3a2
0, 1, 1, 1, 460800, 9ed1ba935bc22ef03e6f8fd5b0b37ee6
0, 2, 2, 1, 460800, 3f1c536514750de86571122046b5858f
0, 3, 3, 1, 460800, 4f7943cb6f7966d19d344081b0db0d71
0, 4, 4, 1, 460800, 0661f34eb45398f8cd158b5a1637bd96
0, 5, 5, 1, 460800, 177620fa17c4d6fddad1d31c1605e46e
0, 6, 6, 1, 460800, 8e22cde58a50e0279be01c23dfd7c032
0, 7, 7, 1, 460800, 8c74c4d8ceee929fded82eeb7a0a7c29
0, 8, 8, 1, 460800, a50d00a8868f0722be55fa5953bc6ebf
0, 9, 9, 1, 460800, f791233c8904da4e267bf7bcf5d6201e
0, 10, 10, 1, 460800, 4ff703ef573eb8e88639d3c700645bf8
0, 11, 11, 1, 460800, fd4c98487779aa7783e9fb3e874f9c8b
0, 12, 12, 1, 460800, e11fbc6c36ad086ea6e611ddd28b211c
0, 13, 13, 1, 460800, a63b8af666ee30a243cf9ea0d49834b5
0, 14, 14, 1, 460800, 1cec6499bfaf054bf581efdab72f5799
0, 15, 15, 1, 460800, 5cb8ea5a7158cac1112fc6453b2a577f
0, 16, 16, 1, 460800, 2df256cb311f97f4648cdeee41ba20d1
0, 17, 17, 1, 460800, afb2c133204a99fe434767340f50c2b9
0, 18, 18, 1, 460800, 27c802932fa873af8663a6b8733391d7
0, 19, 19, 1, 460800, c53872c43baf56d496811d2809ebcd9b
0, 20, 20, 1, 460800, d3ca26ecb6bec6bfa508f07e2a66fa3a
0, 21, 21, 1, 460800, 2d44e18ccf734fe0ed98a7ce1e361fe7
0, 22, 22, 1, 460800, ac4078b5426e4664029923ccf6ea3377
0, 23, 23, 1, 460800, 60d4460a8b97e58e72c12d0c7334b4e4
0, 24, 24, 1, 460800, 95bceab68b4ecf5df261ff9d3743041a
0, 25, 25, 1, 460800, 0b80ad5bf2afbfbe512b83af797afd84
0, 26, 26, 1, 460800, fbc70468f9331a0538e8c09ec3ead20e
0, 27, 27, 1, 460800, de0578b4a114235250b7e93e9f9bf6de
0, 28, 28, 1, 460800, 72f50490650b718e394822f8873ad071
0, 29, 29, 1, 460800, b26594051d313892823eef711a08dc00
0, 30, 30, 1, 460800, 1122641658f6b433e82080e092fe6943
0, 31, 31, 1, 460800, aae4ddc51bcbdf9428f68069f5881090
0, 32, 32, 1, 460800, 018047addf7fd2ef4f1d231d69187bf5
0, 33, 33, 1, 460800, bd03ace29c974b64e2a7a4cc815ec582
0, 34, 34, 1, 460800, 7fddacb17f01d8facfb09df44ff8bdfd
0, 35, 35, 1, 460800, e8d84d6b3406404900b8342183f6ada7
0, 36, 36, 1, 460800, 5b24faed4fdd21bf9a1218658a113009
0, 37, 37, 1, 460800, 8d82775c56b6b0ab31db0c522999b0a1
0, 38, 38, 1, 460800, 282e5e03295c80b2a7b472b82c57483d
0, 39, 39, 1, 460800, 0ad41f5975c2466fc3166ea20bde6842
0, 40, 40, 1, 460800, 1439ad336ceafda0ad62355a7d0b6e50
0, 41, 41, 1, 460800, d3a97471ad64ac2378591d4f6eadba1c
0, 42, 42, 1, 460800, a40c32a1e589b103f639f2068b71bf02
0, 43, 43, 1, 460800, a339b2bedc7ef46961f8502089abfb87
0, 44, 44, 1, 460800, 2ccde43c94259682ea72188b08489e92
0, 45, 45, 1, 460800, fc47cca1f029d44ec92d95853e9c46b4
0, 46, 46, 1, 460800, 6c4d3b63dc1d4291ec88a4bb8c35aecd
0, 47, 47, 1, 460800, 7a9be67aca439dd2a7ff17447b478974
f0c0fd7615cdef66fa72f5816632ca9b
759cf5d12a4b2fb653e61f5219331f14
......@@ -4,4 +4,14 @@
#dimensions 0: 640x480
#sar 0: 0/1
0, 0, 0, 1, 921600, 0xc0e68764
0, 2, 2, 1, 921600, 0x01a16629
0, 1, 1, 1, 921600, 0xc0e68764
0, 2, 2, 1, 921600, 0xc0e68764
0, 3, 3, 1, 921600, 0xc0e68764
0, 4, 4, 1, 921600, 0xc0e68764
0, 5, 5, 1, 921600, 0xc0e68764
0, 7, 7, 1, 921600, 0x01a16629
0, 9, 9, 1, 921600, 0x01a16629
0, 10, 10, 1, 921600, 0x01a16629
0, 11, 11, 1, 921600, 0x01a16629
0, 12, 12, 1, 921600, 0x01a16629
0, 13, 13, 1, 921600, 0x01a16629
......@@ -3,18 +3,8 @@
#codec_id 0: rawvideo
#dimensions 0: 892x441
#sar 0: 0/1
0, 0, 0, 1, 1180116, 0x01d01336
0, 1, 1, 1, 1180116, 0x01d01336
0, 2, 2, 1, 1180116, 0x01d01336
0, 3, 3, 1, 1180116, 0x01d01336
0, 4, 4, 1, 1180116, 0x01d01336
0, 5, 5, 1, 1180116, 0x01d01336
0, 6, 6, 1, 1180116, 0x01d01336
0, 7, 7, 1, 1180116, 0x01d01336
0, 8, 8, 1, 1180116, 0x01d01336
0, 9, 9, 1, 1180116, 0x01d01336
0, 10, 10, 1, 1180116, 0x056fdadd
0, 11, 11, 1, 1180116, 0x6f73e080
0, 12, 12, 1, 1180116, 0x5244d9e5
0, 13, 13, 1, 1180116, 0x629bf10f
0, 14, 14, 1, 1180116, 0x97c726cb
0, 0, 0, 1, 1180116, 0x056fdadd
0, 1, 1, 1, 1180116, 0x6f73e080
0, 2, 2, 1, 1180116, 0x5244d9e5
0, 3, 3, 1, 1180116, 0x629bf10f
0, 4, 4, 1, 1180116, 0x97c726cb
db3e70328340fcb3cd0e06c215fadaa3 *./tests/data/lavf-fate/lavf.mov
dcc9c4c182a5809dee9a9366f4533797 *./tests/data/lavf-fate/lavf.mov
1270387 ./tests/data/lavf-fate/lavf.mov
./tests/data/lavf-fate/lavf.mov CRC=0x5ec66f68
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册