1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-02-04 06:08:26 +02:00

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  Revert "swscale: use 15-bit intermediates for 9/10-bit scaling."
  swscale: use 15-bit intermediates for 9/10-bit scaling.
  dct32: Add SSE2 ASM optimizations
  Correct chroma vector calculation for RealVideo 3.
  lavf: Add an option to discard corrupted frames
  mpegts: Mark wrongly-sized packets as corrupted
  mpegts: Move scan test to handle_packets
  mpegts: Mark corrupted packets
  mpegts: Reset continuity counter on seek
  mpegts: Fix for continuity counter
  mpegts: Silence "can't seek" warning on unseekable
  apichange: add an entry for AV_PKT_FLAG_CORRUPT
  avpacket: signal possibly corrupted packets
  mpeg4videodec: remove dead code that would have detected erroneous encoding
  aac: Remove some suspicious illegal memcpy()s from LTP.
  bink: Eliminate unnecessary shadow declaration.

Conflicts:
	doc/APIchanges
	libavcodec/version.h
	libavformat/avformat.h
	libavformat/options.c
	libavformat/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2011-08-02 22:07:51 +02:00
commit 1d186e9e12
14 changed files with 141 additions and 74 deletions

View File

@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first: API changes, most recent first:
2011-08-02 - 9d39cbf - lavc 53.7.1
Add AV_PKT_FLAG_CORRUPT AVPacket flag.
2011-07-16 - xxxxxx - lavfi 2.27.0 2011-07-16 - xxxxxx - lavfi 2.27.0
Add audio packing negotiation fields and helper functions. Add audio packing negotiation fields and helper functions.

View File

@ -1791,12 +1791,10 @@ static void windowing_and_mdct_ltp(AACContext *ac, float *out,
} else { } else {
memset(in, 0, 448 * sizeof(float)); memset(in, 0, 448 * sizeof(float));
ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128); ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128);
memcpy(in + 576, in + 576, 448 * sizeof(float));
} }
if (ics->window_sequence[0] != LONG_START_SEQUENCE) { if (ics->window_sequence[0] != LONG_START_SEQUENCE) {
ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024); ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
} else { } else {
memcpy(in + 1024, in + 1024, 448 * sizeof(float));
ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128); ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
memset(in + 1024 + 576, 0, 448 * sizeof(float)); memset(in + 1024 + 576, 0, 448 * sizeof(float));
} }

View File

@ -800,6 +800,9 @@ typedef struct AVPacket {
uint8_t *data; uint8_t *data;
int size; int size;
int stream_index; int stream_index;
/**
* A combination of AV_PKT_FLAG values
*/
int flags; int flags;
/** /**
* Additional packet data that can be provided by the container. * Additional packet data that can be provided by the container.
@ -840,7 +843,8 @@ typedef struct AVPacket {
*/ */
int64_t convergence_duration; int64_t convergence_duration;
} AVPacket; } AVPacket;
#define AV_PKT_FLAG_KEY 0x0001 #define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
/** /**
* Audio Video Frame. * Audio Video Frame.

View File

@ -624,7 +624,6 @@ static int read_dct_coeffs(GetBitContext *gb, int32_t block[64], const uint8_t *
coef_list[--list_start] = ccoef; coef_list[--list_start] = ccoef;
mode_list[ list_start] = 3; mode_list[ list_start] = 3;
} else { } else {
int t;
if (!bits) { if (!bits) {
t = 1 - (get_bits1(gb) << 1); t = 1 - (get_bits1(gb) << 1);
} else { } else {

View File

@ -737,8 +737,8 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
my = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) / 3 - (1 << 24); my = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) / 3 - (1 << 24);
lx = (s->current_picture_ptr->f.motion_val[dir][mv_pos][0] + (3 << 24)) % 3; lx = (s->current_picture_ptr->f.motion_val[dir][mv_pos][0] + (3 << 24)) % 3;
ly = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) % 3; ly = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) % 3;
chroma_mx = (s->current_picture_ptr->f.motion_val[dir][mv_pos][0] + 1) >> 1; chroma_mx = s->current_picture_ptr->f.motion_val[dir][mv_pos][0] / 2;
chroma_my = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + 1) >> 1; chroma_my = s->current_picture_ptr->f.motion_val[dir][mv_pos][1] / 2;
umx = (chroma_mx + (3 << 24)) / 3 - (1 << 24); umx = (chroma_mx + (3 << 24)) / 3 - (1 << 24);
umy = (chroma_my + (3 << 24)) / 3 - (1 << 24); umy = (chroma_my + (3 << 24)) / 3 - (1 << 24);
uvmx = chroma_coeffs[(chroma_mx + (3 << 24)) % 3]; uvmx = chroma_coeffs[(chroma_mx + (3 << 24)) % 3];

View File

@ -22,7 +22,7 @@
#define LIBAVCODEC_VERSION_MAJOR 53 #define LIBAVCODEC_VERSION_MAJOR 53
#define LIBAVCODEC_VERSION_MINOR 9 #define LIBAVCODEC_VERSION_MINOR 9
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 1
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \

View File

@ -63,6 +63,13 @@ ps_p1p1m1m1: dd 0, 0, 0x80000000, 0x80000000, 0, 0, 0x80000000, 0x80000000
mulps %1, %3 mulps %1, %3
%endmacro %endmacro
%macro BUTTERFLY0_SSE2 5
pshufd %4, %1, %5
xorps %1, %2
addps %1, %4
mulps %1, %3
%endmacro
%macro BUTTERFLY0_AVX 5 %macro BUTTERFLY0_AVX 5
vshufps %4, %1, %1, %5 vshufps %4, %1, %1, %5
vxorps %1, %1, %2 vxorps %1, %1, %2
@ -405,18 +412,17 @@ INIT_XMM
INIT_XMM INIT_XMM
%macro DCT32_FUNC 1
; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in) ; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in)
cglobal dct32_float_sse, 2,3,16, out, in, tmp cglobal dct32_float_%1, 2,3,16, out, in, tmp
; pass 1 ; pass 1
movaps m0, [inq+0] movaps m0, [inq+0]
movaps m1, [inq+112] LOAD_INV m1, [inq+112]
shufps m1, m1, 0x1b
BUTTERFLY m0, m1, [ps_cos_vec], m3 BUTTERFLY m0, m1, [ps_cos_vec], m3
movaps m7, [inq+64] movaps m7, [inq+64]
movaps m4, [inq+48] LOAD_INV m4, [inq+48]
shufps m4, m4, 0x1b
BUTTERFLY m7, m4, [ps_cos_vec+32], m3 BUTTERFLY m7, m4, [ps_cos_vec+32], m3
; pass 2 ; pass 2
@ -427,13 +433,11 @@ cglobal dct32_float_sse, 2,3,16, out, in, tmp
; pass 1 ; pass 1
movaps m1, [inq+16] movaps m1, [inq+16]
movaps m6, [inq+96] LOAD_INV m6, [inq+96]
shufps m6, m6, 0x1b
BUTTERFLY m1, m6, [ps_cos_vec+16], m3 BUTTERFLY m1, m6, [ps_cos_vec+16], m3
movaps m4, [inq+80] movaps m4, [inq+80]
movaps m5, [inq+32] LOAD_INV m5, [inq+32]
shufps m5, m5, 0x1b
BUTTERFLY m4, m5, [ps_cos_vec+48], m3 BUTTERFLY m4, m5, [ps_cos_vec+48], m3
; pass 2 ; pass 2
@ -492,3 +496,20 @@ cglobal dct32_float_sse, 2,3,16, out, in, tmp
PASS5 PASS5
PASS6 PASS6
RET RET
%endmacro
%macro LOAD_INV_SSE 2
movaps %1, %2
shufps %1, %1, 0x1b
%endmacro
%define LOAD_INV LOAD_INV_SSE
DCT32_FUNC sse
%macro LOAD_INV_SSE2 2
pshufd %1, %2, 0x1b
%endmacro
%define LOAD_INV LOAD_INV_SSE2
%define BUTTERFLY0 BUTTERFLY0_SSE2
DCT32_FUNC sse2

View File

@ -60,6 +60,8 @@ av_cold void ff_dct_init_mmx(DCTContext *s)
int has_vectors = av_get_cpu_flags(); int has_vectors = av_get_cpu_flags();
if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX) if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX)
s->dct32 = ff_dct32_float_avx; s->dct32 = ff_dct32_float_avx;
else if (has_vectors & AV_CPU_FLAG_SSE2 && HAVE_SSE)
s->dct32 = ff_dct32_float_sse2;
else if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE) else if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE)
s->dct32 = ff_dct32_float_sse; s->dct32 = ff_dct32_float_sse;
#endif #endif

View File

@ -35,6 +35,7 @@ void ff_imdct_calc_sse(FFTContext *s, FFTSample *output, const FFTSample *input)
void ff_imdct_half_sse(FFTContext *s, FFTSample *output, const FFTSample *input); void ff_imdct_half_sse(FFTContext *s, FFTSample *output, const FFTSample *input);
void ff_imdct_half_avx(FFTContext *s, FFTSample *output, const FFTSample *input); void ff_imdct_half_avx(FFTContext *s, FFTSample *output, const FFTSample *input);
void ff_dct32_float_sse(FFTSample *out, const FFTSample *in); void ff_dct32_float_sse(FFTSample *out, const FFTSample *in);
void ff_dct32_float_sse2(FFTSample *out, const FFTSample *in);
void ff_dct32_float_avx(FFTSample *out, const FFTSample *in); void ff_dct32_float_avx(FFTSample *out, const FFTSample *in);
#endif /* AVCODEC_X86_FFT_H */ #endif /* AVCODEC_X86_FFT_H */

View File

@ -774,6 +774,7 @@ typedef struct AVFormatContext {
#define AVFMT_FLAG_RTP_HINT 0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead #define AVFMT_FLAG_RTP_HINT 0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead
#endif #endif
#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. #define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload #define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload
#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) #define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) #define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)

View File

@ -164,6 +164,7 @@ typedef struct PESContext {
enum MpegTSState state; enum MpegTSState state;
/* used to get the format */ /* used to get the format */
int data_index; int data_index;
int flags; /**< copied to the AVPacket flags */
int total_size; int total_size;
int pes_header_size; int pes_header_size;
int extended_stream_id; int extended_stream_id;
@ -636,6 +637,12 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
pkt->destruct = av_destruct_packet; pkt->destruct = av_destruct_packet;
pkt->data = pes->buffer; pkt->data = pes->buffer;
pkt->size = pes->data_index; pkt->size = pes->data_index;
if(pes->total_size != MAX_PES_PAYLOAD &&
pes->pes_header_size + pes->data_index != pes->total_size + 6) {
av_log(pes->ts, AV_LOG_WARNING, "PES packet size mismatch\n");
pes->flags |= AV_PKT_FLAG_CORRUPT;
}
memset(pkt->data+pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE); memset(pkt->data+pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
// Separate out the AC3 substream from an HDMV combined TrueHD/AC3 PID // Separate out the AC3 substream from an HDMV combined TrueHD/AC3 PID
@ -647,12 +654,14 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
pkt->dts = pes->dts; pkt->dts = pes->dts;
/* store position of first TS packet of this PES packet */ /* store position of first TS packet of this PES packet */
pkt->pos = pes->ts_packet_pos; pkt->pos = pes->ts_packet_pos;
pkt->flags = pes->flags;
/* reset pts values */ /* reset pts values */
pes->pts = AV_NOPTS_VALUE; pes->pts = AV_NOPTS_VALUE;
pes->dts = AV_NOPTS_VALUE; pes->dts = AV_NOPTS_VALUE;
pes->buffer = NULL; pes->buffer = NULL;
pes->data_index = 0; pes->data_index = 0;
pes->flags = 0;
} }
/* return non zero if a packet could be constructed */ /* return non zero if a packet could be constructed */
@ -1269,7 +1278,8 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
{ {
AVFormatContext *s = ts->stream; AVFormatContext *s = ts->stream;
MpegTSFilter *tss; MpegTSFilter *tss;
int len, pid, cc, expected_cc, cc_ok, afc, is_start; int len, pid, cc, expected_cc, cc_ok, afc, is_start, is_discontinuity,
has_adaptation, has_payload;
const uint8_t *p, *p_end; const uint8_t *p, *p_end;
int64_t pos; int64_t pos;
@ -1285,20 +1295,36 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
if (!tss) if (!tss)
return 0; return 0;
/* continuity check (currently not used) */
cc = (packet[3] & 0xf);
expected_cc = (packet[3] & 0x10) ? (tss->last_cc + 1) & 0x0f : tss->last_cc;
cc_ok = (tss->last_cc < 0) || (expected_cc == cc);
tss->last_cc = cc;
/* skip adaptation field */
afc = (packet[3] >> 4) & 3; afc = (packet[3] >> 4) & 3;
p = packet + 4;
if (afc == 0) /* reserved value */ if (afc == 0) /* reserved value */
return 0; return 0;
if (afc == 2) /* adaptation field only */ has_adaptation = afc & 2;
has_payload = afc & 1;
is_discontinuity = has_adaptation
&& packet[4] != 0 /* with length > 0 */
&& (packet[5] & 0x80); /* and discontinuity indicated */
/* continuity check (currently not used) */
cc = (packet[3] & 0xf);
expected_cc = has_payload ? (tss->last_cc + 1) & 0x0f : tss->last_cc;
cc_ok = pid == 0x1FFF // null packet PID
|| is_discontinuity
|| tss->last_cc < 0
|| expected_cc == cc;
tss->last_cc = cc;
if (!cc_ok) {
av_log(ts, AV_LOG_WARNING, "Continuity Check Failed\n");
if(tss->type == MPEGTS_PES) {
PESContext *pc = tss->u.pes_filter.opaque;
pc->flags |= AV_PKT_FLAG_CORRUPT;
}
}
if (!has_payload)
return 0; return 0;
if (afc == 3) { p = packet + 4;
if (has_adaptation) {
/* skip adapation field */ /* skip adapation field */
p += p[0] + 1; p += p[0] + 1;
} }
@ -1399,7 +1425,22 @@ static int handle_packets(MpegTSContext *ts, int nb_packets)
{ {
AVFormatContext *s = ts->stream; AVFormatContext *s = ts->stream;
uint8_t packet[TS_PACKET_SIZE]; uint8_t packet[TS_PACKET_SIZE];
int packet_num, ret; int packet_num, ret = 0;
if (avio_tell(s->pb) != ts->last_pos) {
int i;
// av_dlog("Skipping after seek\n");
/* seek detected, flush pes buffer */
for (i = 0; i < NB_PID_MAX; i++) {
if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {
PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
av_freep(&pes->buffer);
ts->pids[i]->last_cc = -1;
pes->data_index = 0;
pes->state = MPEGTS_SKIP; /* skip until pes header */
}
}
}
ts->stop_parse = 0; ts->stop_parse = 0;
packet_num = 0; packet_num = 0;
@ -1411,12 +1452,13 @@ static int handle_packets(MpegTSContext *ts, int nb_packets)
break; break;
ret = read_packet(s, packet, ts->raw_packet_size); ret = read_packet(s, packet, ts->raw_packet_size);
if (ret != 0) if (ret != 0)
return ret; break;
ret = handle_packet(ts, packet); ret = handle_packet(ts, packet);
if (ret != 0) if (ret != 0)
return ret; break;
} }
return 0; ts->last_pos = avio_tell(s->pb);
return ret;
} }
static int mpegts_probe(AVProbeData *p) static int mpegts_probe(AVProbeData *p)
@ -1511,7 +1553,7 @@ static int mpegts_read_header(AVFormatContext *s,
/* normal demux */ /* normal demux */
/* first do a scaning to get all the services */ /* first do a scaning to get all the services */
if (avio_seek(pb, pos, SEEK_SET) < 0) if (pb->seekable && avio_seek(pb, pos, SEEK_SET) < 0)
av_log(s, AV_LOG_ERROR, "Unable to seek back to the start\n"); av_log(s, AV_LOG_ERROR, "Unable to seek back to the start\n");
mpegts_open_section_filter(ts, SDT_PID, sdt_cb, ts, 1); mpegts_open_section_filter(ts, SDT_PID, sdt_cb, ts, 1);
@ -1632,18 +1674,6 @@ static int mpegts_read_packet(AVFormatContext *s,
MpegTSContext *ts = s->priv_data; MpegTSContext *ts = s->priv_data;
int ret, i; int ret, i;
if (avio_tell(s->pb) != ts->last_pos) {
/* seek detected, flush pes buffer */
for (i = 0; i < NB_PID_MAX; i++) {
if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {
PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
av_freep(&pes->buffer);
pes->data_index = 0;
pes->state = MPEGTS_SKIP; /* skip until pes header */
}
}
}
ts->pkt = pkt; ts->pkt = pkt;
ret = handle_packets(ts, 0); ret = handle_packets(ts, 0);
if (ret < 0) { if (ret < 0) {
@ -1661,8 +1691,6 @@ static int mpegts_read_packet(AVFormatContext *s,
} }
} }
ts->last_pos = avio_tell(s->pb);
return ret; return ret;
} }

View File

@ -79,6 +79,7 @@ static const AVOption options[]={
#if FF_API_FLAG_RTP_HINT #if FF_API_FLAG_RTP_HINT
{"rtphint", "add rtp hinting (deprecated, use the -movflags rtphint option instead)", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_RTP_HINT }, INT_MIN, INT_MAX, E, "fflags"}, {"rtphint", "add rtp hinting (deprecated, use the -movflags rtphint option instead)", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_RTP_HINT }, INT_MIN, INT_MAX, E, "fflags"},
#endif #endif
{"discardcorrupt", "discard corrupted frames", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"},
{"sortdts", "try to interleave outputted packets by dts", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"}, {"sortdts", "try to interleave outputted packets by dts", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},
{"keepside", "dont merge side data", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"}, {"keepside", "dont merge side data", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},
{"latm", "enable RTP MP4A-LATM payload", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"}, {"latm", "enable RTP MP4A-LATM payload", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},

View File

@ -738,8 +738,17 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
continue; continue;
} }
if ((s->flags & AVFMT_FLAG_DISCARD_CORRUPT) &&
(pkt->flags & AV_PKT_FLAG_CORRUPT)) {
av_log(s, AV_LOG_WARNING,
"Dropped corrupted packet (stream = %d)\n",
pkt->stream_index);
continue;
}
if(!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA)) if(!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
av_packet_merge_side_data(pkt); av_packet_merge_side_data(pkt);
st= s->streams[pkt->stream_index]; st= s->streams[pkt->stream_index];
switch(st->codec->codec_type){ switch(st->codec->codec_type){

View File

@ -16,31 +16,31 @@
0, 112500, 126720, 0xe572dfc9 0, 112500, 126720, 0xe572dfc9
0, 120000, 126720, 0xbc3cc34f 0, 120000, 126720, 0xbc3cc34f
0, 127500, 126720, 0xcf8cb0e2 0, 127500, 126720, 0xcf8cb0e2
0, 135000, 126720, 0x6d1c630d 0, 135000, 126720, 0x75ae61b6
0, 142500, 126720, 0x4338e469 0, 142500, 126720, 0x554fe3e4
0, 150000, 126720, 0x9d82ea38 0, 150000, 126720, 0x72ecea95
0, 157500, 126720, 0x55e0b559 0, 157500, 126720, 0x5d00b5fe
0, 165000, 126720, 0x5eefb5ef 0, 165000, 126720, 0xe39bba0d
0, 172500, 126720, 0x4b10b746 0, 172500, 126720, 0x9c21bad8
0, 180000, 126720, 0x8b07a1db 0, 180000, 126720, 0x72f2a47d
0, 187500, 126720, 0x8c639b34 0, 187500, 126720, 0x4f639ebe
0, 195000, 126720, 0x63eb0b9f 0, 195000, 126720, 0x534a10cc
0, 202500, 126720, 0x31c80c83 0, 202500, 126720, 0xfdca11d3
0, 210000, 126720, 0x78495352 0, 210000, 126720, 0x0c735615
0, 217500, 126720, 0x63d609c4 0, 217500, 126720, 0x0eaf0c1b
0, 225000, 126720, 0xcd2a62d8 0, 225000, 126720, 0xce5e6794
0, 232500, 126720, 0x4aea732d 0, 232500, 126720, 0x14cf7974
0, 240000, 126720, 0xe3bb352c 0, 240000, 126720, 0xbc513f2a
0, 247500, 126720, 0x4b9036ad 0, 247500, 126720, 0xbc303fae
0, 255000, 126720, 0x88b66e2d 0, 255000, 126720, 0xd9f67585
0, 262500, 126720, 0x4a8a1b16 0, 262500, 126720, 0x3378251f
0, 270000, 126720, 0x2e014eac 0, 270000, 126720, 0xb3ed5911
0, 277500, 126720, 0x83212c67 0, 277500, 126720, 0xc15a3577
0, 285000, 126720, 0x4937e897 0, 285000, 126720, 0x0a24f256
0, 292500, 126720, 0x2d38babe 0, 292500, 126720, 0xfab9c45d
0, 300000, 126720, 0xbcb43c09 0, 300000, 126720, 0x45464610
0, 307500, 126720, 0x955ffaf4 0, 307500, 126720, 0xfe2e057d
0, 315000, 126720, 0x3337d4a2 0, 315000, 126720, 0x23efdc35
0, 322500, 126720, 0xe8f58c33 0, 322500, 126720, 0x4d888b2e
0, 330000, 126720, 0x3a7f771f 0, 330000, 126720, 0xdd0d74df
0, 337500, 126720, 0xb67c39b9 0, 337500, 126720, 0x08382b8e