forked from len0rd/rockbox
Bring libmpeg2 portions that we use up to date with the latest libmpeg2 CVS. Fix up some file headers and add a revision history to the libmpeg2 files detailing to which CVS file revisions things were synced. This makes it easier to start in the right place by hand in the future. Hopefully no mistakes and everything works. :-)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17904 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b81271ed3e
commit
f3d9b1791b
16 changed files with 368 additions and 189 deletions
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.13
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.5
|
||||
*/
|
||||
|
||||
/* use gcc attribs to align critical data structures */
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.114
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
@ -155,16 +159,14 @@ static inline mpeg2_state_t seek_chunk (mpeg2dec_t * mpeg2dec)
|
|||
mpeg2dec->bytes_since_tag += skipped;
|
||||
mpeg2dec->code = mpeg2dec->buf_start[-1];
|
||||
|
||||
return (mpeg2_state_t)-1;
|
||||
return STATE_INTERNAL_NORETURN;
|
||||
}
|
||||
|
||||
mpeg2_state_t mpeg2_seek_header (mpeg2dec_t * mpeg2dec)
|
||||
{
|
||||
while (mpeg2dec->code != 0xb3 &&
|
||||
((mpeg2dec->code != 0xb7 &&
|
||||
mpeg2dec->code != 0xb8 &&
|
||||
mpeg2dec->code) ||
|
||||
mpeg2dec->sequence.width == (unsigned)-1))
|
||||
while (!(mpeg2dec->code == 0xb3 ||
|
||||
((mpeg2dec->code == 0xb7 || mpeg2dec->code == 0xb8 ||
|
||||
!mpeg2dec->code) && mpeg2dec->sequence.width != (unsigned)-1)))
|
||||
{
|
||||
if (seek_chunk (mpeg2dec) == STATE_BUFFER)
|
||||
return STATE_BUFFER;
|
||||
|
@ -175,9 +177,8 @@ mpeg2_state_t mpeg2_seek_header (mpeg2dec_t * mpeg2dec)
|
|||
|
||||
mpeg2dec->user_data_len = 0;
|
||||
|
||||
return mpeg2dec->code ?
|
||||
mpeg2_parse_header(mpeg2dec) :
|
||||
mpeg2_header_picture_start(mpeg2dec);
|
||||
return ((mpeg2dec->code == 0xb7) ?
|
||||
mpeg2_header_end(mpeg2dec) : mpeg2_parse_header(mpeg2dec));
|
||||
}
|
||||
|
||||
#define RECEIVED(code,state) (((state) << 8) + (code))
|
||||
|
@ -192,7 +193,7 @@ mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec)
|
|||
|
||||
state = mpeg2dec->action (mpeg2dec);
|
||||
|
||||
if ((int)state >= 0)
|
||||
if ((int)state > (int)STATE_INTERNAL_NORETURN)
|
||||
return state;
|
||||
}
|
||||
|
||||
|
@ -244,24 +245,20 @@ mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec)
|
|||
return STATE_BUFFER;
|
||||
}
|
||||
|
||||
mpeg2dec->action = mpeg2_seek_header;
|
||||
|
||||
switch (mpeg2dec->code)
|
||||
{
|
||||
case 0x00:
|
||||
mpeg2dec->action = mpeg2_header_picture_start;
|
||||
return mpeg2dec->state;
|
||||
case 0xb7:
|
||||
mpeg2dec->action = mpeg2_header_end;
|
||||
break;
|
||||
case 0xb3:
|
||||
case 0xb7:
|
||||
case 0xb8:
|
||||
mpeg2dec->action = mpeg2_parse_header;
|
||||
break;
|
||||
return (mpeg2dec->state == STATE_SLICE) ? STATE_SLICE : STATE_INVALID;
|
||||
default:
|
||||
mpeg2dec->action = seek_chunk;
|
||||
return STATE_INVALID;
|
||||
}
|
||||
|
||||
return (mpeg2dec->state == STATE_SLICE) ? STATE_SLICE : STATE_INVALID;
|
||||
}
|
||||
|
||||
mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
|
||||
|
@ -331,7 +328,6 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
|
|||
{
|
||||
/* state transition after a sequence header */
|
||||
case RECEIVED (0x00, STATE_SEQUENCE):
|
||||
mpeg2dec->action = mpeg2_header_picture_start;
|
||||
case RECEIVED (0xb8, STATE_SEQUENCE):
|
||||
mpeg2_header_sequence_finalize (mpeg2dec);
|
||||
break;
|
||||
|
@ -339,7 +335,6 @@ mpeg2_state_t mpeg2_parse_header (mpeg2dec_t * mpeg2dec)
|
|||
/* other legal state transitions */
|
||||
case RECEIVED (0x00, STATE_GOP):
|
||||
mpeg2_header_gop_finalize (mpeg2dec);
|
||||
mpeg2dec->action = mpeg2_header_picture_start;
|
||||
break;
|
||||
case RECEIVED (0x01, STATE_PICTURE):
|
||||
case RECEIVED (0x01, STATE_PICTURE_2ND):
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.101
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
@ -325,14 +329,14 @@ static int sequence_display_ext (mpeg2dec_t * mpeg2dec)
|
|||
{
|
||||
uint8_t * buffer = mpeg2dec->chunk_start;
|
||||
mpeg2_sequence_t * sequence = &mpeg2dec->new_sequence;
|
||||
uint32_t flags;
|
||||
int x;
|
||||
|
||||
flags = (sequence->flags & ~SEQ_MASK_VIDEO_FORMAT) |
|
||||
sequence->flags = (sequence->flags & ~SEQ_MASK_VIDEO_FORMAT) |
|
||||
((buffer[0] << 4) & SEQ_MASK_VIDEO_FORMAT);
|
||||
|
||||
if (buffer[0] & 1)
|
||||
{
|
||||
flags |= SEQ_FLAG_COLOUR_DESCRIPTION;
|
||||
sequence->flags |= SEQ_FLAG_COLOUR_DESCRIPTION;
|
||||
sequence->colour_primaries = buffer[1];
|
||||
sequence->transfer_characteristics = buffer[2];
|
||||
sequence->matrix_coefficients = buffer[3];
|
||||
|
@ -342,15 +346,36 @@ static int sequence_display_ext (mpeg2dec_t * mpeg2dec)
|
|||
if (!(buffer[2] & 2)) /* missing marker_bit */
|
||||
return 1;
|
||||
|
||||
sequence->display_width =
|
||||
(buffer[1] << 6) | (buffer[2] >> 2);
|
||||
x = (buffer[1] << 6) | (buffer[2] >> 2);
|
||||
if (x)
|
||||
sequence->display_width = x;
|
||||
|
||||
sequence->display_height =
|
||||
((buffer[2] & 1) << 13) | (buffer[3] << 5) | (buffer[4] >> 3);
|
||||
x = ((buffer[2] & 1) << 13) | (buffer[3] << 5) | (buffer[4] >> 3);
|
||||
if (x)
|
||||
sequence->display_height = x;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void simplify (unsigned int * u, unsigned int * v)
|
||||
{
|
||||
unsigned int a, b, tmp;
|
||||
|
||||
a = *u;
|
||||
b = *v;
|
||||
|
||||
/* find greatest common divisor */
|
||||
while (a)
|
||||
{
|
||||
tmp = a;
|
||||
a = b % tmp;
|
||||
b = tmp;
|
||||
}
|
||||
|
||||
*u /= b;
|
||||
*v /= b;
|
||||
}
|
||||
|
||||
static inline void finalize_sequence (mpeg2_sequence_t * sequence)
|
||||
{
|
||||
int width;
|
||||
|
@ -411,9 +436,13 @@ static inline void finalize_sequence (mpeg2_sequence_t * sequence)
|
|||
sequence->pixel_width = 32;
|
||||
sequence->pixel_height = 27;
|
||||
return;
|
||||
case 12: /* 720*480 4:3 */
|
||||
sequence->pixel_width = 8;
|
||||
sequence->pixel_height = 9;
|
||||
case 8: /* BT.601 625 lines 4:3 */
|
||||
sequence->pixel_width = 59;
|
||||
sequence->pixel_height = 54;
|
||||
return;
|
||||
case 12: /* BT.601 525 lines 4:3 */
|
||||
sequence->pixel_width = 10;
|
||||
sequence->pixel_height = 11;
|
||||
return;
|
||||
default:
|
||||
height = 88 * sequence->pixel_width + 1171;
|
||||
|
@ -424,16 +453,112 @@ static inline void finalize_sequence (mpeg2_sequence_t * sequence)
|
|||
sequence->pixel_width = width;
|
||||
sequence->pixel_height = height;
|
||||
|
||||
/* find greatest common divisor */
|
||||
while (width)
|
||||
simplify(&sequence->pixel_width, &sequence->pixel_height);
|
||||
}
|
||||
|
||||
int mpeg2_guess_aspect (const mpeg2_sequence_t * sequence,
|
||||
unsigned int * pixel_width,
|
||||
unsigned int * pixel_height)
|
||||
{
|
||||
static const struct
|
||||
{
|
||||
int tmp = width;
|
||||
width = height % tmp;
|
||||
height = tmp;
|
||||
unsigned int width, height;
|
||||
} video_modes[] =
|
||||
{
|
||||
{720, 576}, /* 625 lines, 13.5 MHz (D1, DV, DVB, DVD) */
|
||||
{704, 576}, /* 625 lines, 13.5 MHz (1/1 D1, DVB, DVD, 4CIF) */
|
||||
{544, 576}, /* 625 lines, 10.125 MHz (DVB, laserdisc) */
|
||||
{528, 576}, /* 625 lines, 10.125 MHz (3/4 D1, DVB, laserdisc) */
|
||||
{480, 576}, /* 625 lines, 9 MHz (2/3 D1, DVB, SVCD) */
|
||||
{352, 576}, /* 625 lines, 6.75 MHz (D2, 1/2 D1, CVD, DVB, DVD) */
|
||||
{352, 288}, /* 625 lines, 6.75 MHz, 1 field (D4, VCD, DVB, DVD, CIF) */
|
||||
{176, 144}, /* 625 lines, 3.375 MHz, half field (QCIF) */
|
||||
{720, 486}, /* 525 lines, 13.5 MHz (D1) */
|
||||
{704, 486}, /* 525 lines, 13.5 MHz */
|
||||
{720, 480}, /* 525 lines, 13.5 MHz (DV, DSS, DVD) */
|
||||
{704, 480}, /* 525 lines, 13.5 MHz (1/1 D1, ATSC, DVD) */
|
||||
{544, 480}, /* 525 lines. 10.125 MHz (DSS, laserdisc) */
|
||||
{528, 480}, /* 525 lines. 10.125 MHz (3/4 D1, laserdisc) */
|
||||
{480, 480}, /* 525 lines, 9 MHz (2/3 D1, SVCD) */
|
||||
{352, 480}, /* 525 lines, 6.75 MHz (D2, 1/2 D1, CVD, DVD) */
|
||||
{352, 240} /* 525 lines. 6.75 MHz, 1 field (D4, VCD, DSS, DVD) */
|
||||
};
|
||||
unsigned int width, height, pix_width, pix_height, i, DAR_16_9;
|
||||
|
||||
*pixel_width = sequence->pixel_width;
|
||||
*pixel_height = sequence->pixel_height;
|
||||
width = sequence->picture_width;
|
||||
height = sequence->picture_height;
|
||||
|
||||
for (i = 0; i < sizeof (video_modes) / sizeof (video_modes[0]); i++)
|
||||
{
|
||||
if (width == video_modes[i].width && height == video_modes[i].height)
|
||||
break;
|
||||
}
|
||||
|
||||
sequence->pixel_width /= height;
|
||||
sequence->pixel_height /= height;
|
||||
if (i == ARRAYLEN(video_modes) ||
|
||||
(sequence->pixel_width == 1 && sequence->pixel_height == 1) ||
|
||||
width != sequence->display_width || height != sequence->display_height)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (pix_height = 1; height * pix_height < 480; pix_height <<= 1);
|
||||
height *= pix_height;
|
||||
|
||||
for (pix_width = 1; width * pix_width <= 352; pix_width <<= 1);
|
||||
width *= pix_width;
|
||||
|
||||
if (!(sequence->flags & SEQ_FLAG_MPEG2))
|
||||
{
|
||||
static unsigned int mpeg1_check[2][2] = {{11, 54}, {27, 45}};
|
||||
DAR_16_9 = (sequence->pixel_height == 27 ||
|
||||
sequence->pixel_height == 45);
|
||||
if (width < 704 ||
|
||||
sequence->pixel_height != mpeg1_check[DAR_16_9][height == 576])
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
DAR_16_9 = (3 * sequence->picture_width * sequence->pixel_width >
|
||||
4 * sequence->picture_height * sequence->pixel_height);
|
||||
switch (width)
|
||||
{
|
||||
case 528:
|
||||
case 544:
|
||||
pix_width *= 4;
|
||||
pix_height *= 3;
|
||||
break;
|
||||
case 480:
|
||||
pix_width *= 3;
|
||||
pix_height *= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (DAR_16_9)
|
||||
{
|
||||
pix_width *= 4;
|
||||
pix_height *= 3;
|
||||
}
|
||||
|
||||
if (height == 576)
|
||||
{
|
||||
pix_width *= 59;
|
||||
pix_height *= 54;
|
||||
}
|
||||
else
|
||||
{
|
||||
pix_width *= 10;
|
||||
pix_height *= 11;
|
||||
}
|
||||
|
||||
*pixel_width = pix_width;
|
||||
*pixel_height = pix_height;
|
||||
|
||||
simplify (pixel_width, pixel_height);
|
||||
|
||||
return (height == 576) ? 1 : 2;
|
||||
}
|
||||
|
||||
static void copy_matrix (mpeg2dec_t * mpeg2dec, int index)
|
||||
|
@ -506,36 +631,33 @@ void mpeg2_header_sequence_finalize (mpeg2dec_t * mpeg2dec)
|
|||
|
||||
if (mpeg2dec->sequence.width != (unsigned)-1)
|
||||
{
|
||||
unsigned int new_byte_rate;
|
||||
|
||||
/*
|
||||
* According to 6.1.1.6, repeat sequence headers should be
|
||||
* identical to the original. However some DVDs dont respect
|
||||
* that and have different bitrates in the repeat sequence
|
||||
* headers. So we'll ignore that in the comparison and still
|
||||
* consider these as repeat sequence headers.
|
||||
*
|
||||
* However, be careful not to alter the current sequence when
|
||||
* returning STATE_INVALID_END.
|
||||
* identical to the original. However some encoders don't
|
||||
* respect that and change various fields (including bitrate
|
||||
* and aspect ratio) in the repeat sequence headers. So we
|
||||
* choose to be as conservative as possible and only restart
|
||||
* the decoder if the width, height, chroma_width,
|
||||
* chroma_height or low_delay flag are modified.
|
||||
*/
|
||||
new_byte_rate = sequence->byte_rate;
|
||||
sequence->byte_rate = mpeg2dec->sequence.byte_rate;
|
||||
|
||||
if (rb->memcmp(&mpeg2dec->sequence, sequence,
|
||||
sizeof (mpeg2_sequence_t)))
|
||||
if (sequence->width != mpeg2dec->sequence.width ||
|
||||
sequence->height != mpeg2dec->sequence.height ||
|
||||
sequence->chroma_width != mpeg2dec->sequence.chroma_width ||
|
||||
sequence->chroma_height != mpeg2dec->sequence.chroma_height ||
|
||||
((sequence->flags ^ mpeg2dec->sequence.flags) &
|
||||
SEQ_FLAG_LOW_DELAY))
|
||||
{
|
||||
decoder->stride_frame = sequence->width;
|
||||
sequence->byte_rate = new_byte_rate;
|
||||
|
||||
mpeg2_header_end (mpeg2dec);
|
||||
|
||||
mpeg2dec->action = invalid_end_action;
|
||||
mpeg2dec->state = STATE_INVALID_END;
|
||||
return;
|
||||
}
|
||||
|
||||
sequence->byte_rate = new_byte_rate;
|
||||
mpeg2dec->state = STATE_SEQUENCE_REPEATED;
|
||||
mpeg2dec->state = rb->memcmp(&mpeg2dec->sequence, sequence,
|
||||
sizeof (mpeg2_sequence_t)) ?
|
||||
STATE_SEQUENCE_MODIFIED :
|
||||
STATE_SEQUENCE_REPEATED;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -601,42 +723,6 @@ void mpeg2_set_fbuf (mpeg2dec_t * mpeg2dec, int b_type)
|
|||
}
|
||||
}
|
||||
|
||||
mpeg2_state_t mpeg2_header_picture_start (mpeg2dec_t * mpeg2dec)
|
||||
{
|
||||
mpeg2_picture_t * picture = &mpeg2dec->new_picture;
|
||||
|
||||
mpeg2dec->state = (mpeg2dec->state != STATE_SLICE_1ST) ?
|
||||
STATE_PICTURE : STATE_PICTURE_2ND;
|
||||
picture->flags = 0;
|
||||
picture->tag = picture->tag2 = 0;
|
||||
|
||||
if (mpeg2dec->num_tags)
|
||||
{
|
||||
if (mpeg2dec->bytes_since_tag >= 4)
|
||||
{
|
||||
mpeg2dec->num_tags = 0;
|
||||
picture->tag = mpeg2dec->tag_current;
|
||||
picture->tag2 = mpeg2dec->tag2_current;
|
||||
picture->flags = PIC_FLAG_TAGS;
|
||||
}
|
||||
else if (mpeg2dec->num_tags > 1)
|
||||
{
|
||||
mpeg2dec->num_tags = 1;
|
||||
picture->tag = mpeg2dec->tag_previous;
|
||||
picture->tag2 = mpeg2dec->tag2_previous;
|
||||
picture->flags = PIC_FLAG_TAGS;
|
||||
}
|
||||
}
|
||||
|
||||
picture->display_offset[0].x = picture->display_offset[1].x =
|
||||
picture->display_offset[2].x = mpeg2dec->display_offset_x;
|
||||
|
||||
picture->display_offset[0].y = picture->display_offset[1].y =
|
||||
picture->display_offset[2].y = mpeg2dec->display_offset_y;
|
||||
|
||||
return mpeg2_parse_header (mpeg2dec);
|
||||
}
|
||||
|
||||
int mpeg2_header_picture (mpeg2dec_t * mpeg2dec)
|
||||
{
|
||||
uint8_t * buffer = mpeg2dec->chunk_start;
|
||||
|
@ -644,12 +730,13 @@ int mpeg2_header_picture (mpeg2dec_t * mpeg2dec)
|
|||
mpeg2_decoder_t * decoder = &mpeg2dec->decoder;
|
||||
int type;
|
||||
|
||||
type = (buffer [1] >> 3) & 7;
|
||||
mpeg2dec->state = (mpeg2dec->state != STATE_SLICE_1ST) ?
|
||||
STATE_PICTURE : STATE_PICTURE_2ND;
|
||||
mpeg2dec->ext_state = PIC_CODING_EXT;
|
||||
|
||||
picture->temporal_reference = (buffer[0] << 2) | (buffer[1] >> 6);
|
||||
|
||||
picture->flags |= type;
|
||||
type = (buffer [1] >> 3) & 7;
|
||||
|
||||
if (type == PIC_FLAG_CODING_TYPE_P || type == PIC_FLAG_CODING_TYPE_B)
|
||||
{
|
||||
|
@ -661,9 +748,35 @@ int mpeg2_header_picture (mpeg2dec_t * mpeg2dec)
|
|||
decoder->b_motion.f_code[0] = ((buffer[4] >> 3) & 7) - 1;
|
||||
}
|
||||
|
||||
/* XXXXXX decode extra_information_picture as well */
|
||||
picture->flags = PIC_FLAG_PROGRESSIVE_FRAME | type;
|
||||
picture->tag = picture->tag2 = 0;
|
||||
|
||||
if (mpeg2dec->num_tags)
|
||||
{
|
||||
if (mpeg2dec->bytes_since_tag >= mpeg2dec->chunk_ptr - buffer + 4)
|
||||
{
|
||||
mpeg2dec->num_tags = 0;
|
||||
picture->tag = mpeg2dec->tag_current;
|
||||
picture->tag2 = mpeg2dec->tag2_current;
|
||||
picture->flags |= PIC_FLAG_TAGS;
|
||||
}
|
||||
else if (mpeg2dec->num_tags > 1)
|
||||
{
|
||||
mpeg2dec->num_tags = 1;
|
||||
picture->tag = mpeg2dec->tag_previous;
|
||||
picture->tag2 = mpeg2dec->tag2_previous;
|
||||
picture->flags |= PIC_FLAG_TAGS;
|
||||
}
|
||||
}
|
||||
|
||||
picture->nb_fields = 2;
|
||||
picture->display_offset[0].x = picture->display_offset[1].x =
|
||||
picture->display_offset[2].x = mpeg2dec->display_offset_x;
|
||||
|
||||
picture->display_offset[0].y = picture->display_offset[1].y =
|
||||
picture->display_offset[2].y = mpeg2dec->display_offset_y;
|
||||
|
||||
/* XXXXXX decode extra_information_picture as well */
|
||||
|
||||
mpeg2dec->q_scale_type = 0;
|
||||
decoder->intra_dc_precision = 7;
|
||||
|
@ -722,7 +835,9 @@ static int picture_coding_ext (mpeg2dec_t * mpeg2dec)
|
|||
mpeg2dec->q_scale_type = buffer[3] & 16;
|
||||
decoder->intra_vlc_format = (buffer[3] >> 3) & 1;
|
||||
decoder->scan = (buffer[3] & 4) ? mpeg2_scan_alt : mpeg2_scan_norm;
|
||||
flags |= (buffer[4] & 0x80) ? PIC_FLAG_PROGRESSIVE_FRAME : 0;
|
||||
|
||||
if (!(buffer[4] & 0x80))
|
||||
flags &= ~PIC_FLAG_PROGRESSIVE_FRAME;
|
||||
|
||||
if (buffer[4] & 0x40)
|
||||
{
|
||||
|
@ -1120,7 +1235,7 @@ mpeg2_state_t mpeg2_header_slice_start (mpeg2dec_t * mpeg2dec)
|
|||
|
||||
mpeg2dec->action = NULL;
|
||||
|
||||
return (mpeg2_state_t)-1;
|
||||
return STATE_INTERNAL_NORETURN;
|
||||
}
|
||||
|
||||
static mpeg2_state_t seek_sequence (mpeg2dec_t * mpeg2dec)
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.36
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.17 - lost compatibility previously to
|
||||
* provide simplified and CPU-optimized motion compensation.
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
#include "mpeg2.h"
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
@ You should have received a copy of the GNU General Public License
|
||||
@ along with this program; if not, write to the Free Software
|
||||
@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
@
|
||||
@ $Id$
|
||||
|
||||
.text
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
#include "mpeg2.h"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* mpeg2.h
|
||||
* Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
|
||||
* Copyright (C) 2000-2004 Michel Lespinasse <walken@zoy.org>
|
||||
* Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
|
||||
*
|
||||
* This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
|
||||
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.67
|
||||
*/
|
||||
|
||||
#ifndef MPEG2_H
|
||||
|
@ -27,7 +31,7 @@
|
|||
#include "mpeg2dec_config.h"
|
||||
|
||||
#define MPEG2_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c))
|
||||
#define MPEG2_RELEASE MPEG2_VERSION (0, 4, 0) /* 0.4.0 */
|
||||
#define MPEG2_RELEASE MPEG2_VERSION (0, 5, 0) /* 0.5.0 */
|
||||
|
||||
#define SEQ_FLAG_MPEG2 1
|
||||
#define SEQ_FLAG_CONSTRAINED_PARAMETERS 2
|
||||
|
@ -129,14 +133,15 @@ typedef enum
|
|||
STATE_BUFFER = 0,
|
||||
STATE_SEQUENCE = 1,
|
||||
STATE_SEQUENCE_REPEATED = 2,
|
||||
STATE_GOP = 3,
|
||||
STATE_PICTURE = 4,
|
||||
STATE_SLICE_1ST = 5,
|
||||
STATE_PICTURE_2ND = 6,
|
||||
STATE_SLICE = 7,
|
||||
STATE_END = 8,
|
||||
STATE_INVALID = 9,
|
||||
STATE_INVALID_END = 10
|
||||
STATE_SEQUENCE_MODIFIED = 3,
|
||||
STATE_GOP = 4,
|
||||
STATE_PICTURE = 5,
|
||||
STATE_SLICE_1ST = 6,
|
||||
STATE_PICTURE_2ND = 7,
|
||||
STATE_SLICE = 8,
|
||||
STATE_END = 9,
|
||||
STATE_INVALID = 10,
|
||||
STATE_INVALID_END = 11,
|
||||
} mpeg2_state_t;
|
||||
|
||||
typedef struct mpeg2_convert_init_s
|
||||
|
@ -184,6 +189,10 @@ void mpeg2_init_fbuf (mpeg2_decoder_t * decoder,
|
|||
uint8_t * backward_fbuf[MPEG2_COMPONENTS]);
|
||||
void mpeg2_slice (mpeg2_decoder_t * decoder, int code, const uint8_t * buffer);
|
||||
|
||||
int mpeg2_guess_aspect (const mpeg2_sequence_t * sequence,
|
||||
unsigned int * pixel_width,
|
||||
unsigned int * pixel_height);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MPEG2_ALLOC_MPEG2DEC = 0,
|
||||
|
|
|
@ -19,12 +19,18 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.89
|
||||
*/
|
||||
#ifndef MPEG2_INTERNAL_H
|
||||
#define MPEG2_INTERNAL_H
|
||||
|
||||
#include "config.h" /* for Rockbox CPU_ #defines */
|
||||
|
||||
#define STATE_INTERNAL_NORETURN ((mpeg2_state_t)-1)
|
||||
|
||||
/* macroblock modes */
|
||||
#define MACROBLOCK_INTRA 1
|
||||
#define MACROBLOCK_PATTERN 2
|
||||
|
@ -233,7 +239,6 @@ void mpeg2_header_state_init (mpeg2dec_t * mpeg2dec);
|
|||
void mpeg2_reset_info (mpeg2_info_t * info);
|
||||
int mpeg2_header_sequence (mpeg2dec_t * mpeg2dec);
|
||||
int mpeg2_header_gop (mpeg2dec_t * mpeg2dec);
|
||||
mpeg2_state_t mpeg2_header_picture_start (mpeg2dec_t * mpeg2dec);
|
||||
int mpeg2_header_picture (mpeg2dec_t * mpeg2dec);
|
||||
int mpeg2_header_extension (mpeg2dec_t * mpeg2dec);
|
||||
int mpeg2_header_user_data (mpeg2dec_t * mpeg2dec);
|
||||
|
|
|
@ -1,3 +1,23 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2007 by Michael Sevakis
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#ifndef MPEG_ALLOC_H
|
||||
#define MPEG_ALLOC_H
|
||||
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.55
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
@ -488,7 +492,7 @@ static void get_intra_block_B14 (mpeg2_decoder_t * const decoder,
|
|||
}
|
||||
|
||||
dest[63] ^= mismatch & 16;
|
||||
DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
|
||||
DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */
|
||||
decoder->bitstream_buf = bit_buf;
|
||||
decoder->bitstream_bits = bits;
|
||||
decoder->bitstream_ptr = bit_ptr;
|
||||
|
@ -601,7 +605,7 @@ static void get_intra_block_B15 (mpeg2_decoder_t * const decoder,
|
|||
}
|
||||
|
||||
dest[63] ^= mismatch & 16;
|
||||
DUMPBITS (bit_buf, bits, 4); /* dump end of block code */
|
||||
DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */
|
||||
decoder->bitstream_buf = bit_buf;
|
||||
decoder->bitstream_bits = bits;
|
||||
decoder->bitstream_ptr = bit_ptr;
|
||||
|
@ -728,7 +732,7 @@ static int get_non_intra_block (mpeg2_decoder_t * const decoder,
|
|||
}
|
||||
|
||||
dest[63] ^= mismatch & 16;
|
||||
DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
|
||||
DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */
|
||||
decoder->bitstream_buf = bit_buf;
|
||||
decoder->bitstream_bits = bits;
|
||||
decoder->bitstream_ptr = bit_ptr;
|
||||
|
@ -852,7 +856,7 @@ static void get_mpeg1_intra_block (mpeg2_decoder_t * const decoder)
|
|||
break; /* illegal, check needed to avoid buffer overflow */
|
||||
}
|
||||
|
||||
DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
|
||||
DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */
|
||||
decoder->bitstream_buf = bit_buf;
|
||||
decoder->bitstream_bits = bits;
|
||||
decoder->bitstream_ptr = bit_ptr;
|
||||
|
@ -989,7 +993,7 @@ static int get_mpeg1_non_intra_block (mpeg2_decoder_t * const decoder)
|
|||
break; /* illegal, check needed to avoid buffer overflow */
|
||||
}
|
||||
|
||||
DUMPBITS (bit_buf, bits, 2); /* dump end of block code */
|
||||
DUMPBITS (bit_buf, bits, tab->len); /* dump end of block code */
|
||||
decoder->bitstream_buf = bit_buf;
|
||||
decoder->bitstream_bits = bits;
|
||||
decoder->bitstream_ptr = bit_ptr;
|
||||
|
@ -1924,7 +1928,7 @@ static void skip_chroma_intra (mpeg2_decoder_t * const decoder)
|
|||
{ \
|
||||
table[4] (decoder->dest[1] + decoder->offset, \
|
||||
ref[1] + offset, decoder->stride, 16); \
|
||||
table[4] (decoder->dest[2] + (decoder->offset >> 1), \
|
||||
table[4] (decoder->dest[2] + decoder->offset, \
|
||||
ref[2] + offset, decoder->stride, 16); \
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.22
|
||||
*/
|
||||
|
||||
#ifndef VIDEO_OUT_H
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* $Id$
|
||||
* libmpeg2 sync history:
|
||||
* 2008-07-01 - CVS revision 1.12
|
||||
*/
|
||||
|
||||
#define GETWORD(bit_buf, shift, bit_ptr) \
|
||||
|
@ -121,7 +125,7 @@ static const MBtab MB_P [] ICONST_ATTR = {
|
|||
#define INTER MACROBLOCK_MOTION_FORWARD|MACROBLOCK_MOTION_BACKWARD
|
||||
|
||||
static const MBtab MB_B [] ICONST_ATTR = {
|
||||
{0, 0}, {INTRA|QUANT, 6},
|
||||
{0, 6}, {INTRA|QUANT, 6},
|
||||
{BWD|CODED|QUANT, 6}, {FWD|CODED|QUANT, 6},
|
||||
{INTER|CODED|QUANT, 5}, {INTER|CODED|QUANT, 5},
|
||||
{INTRA, 5}, {INTRA, 5},
|
||||
|
@ -201,7 +205,7 @@ static const CBPtab CBP_7 [] ICONST_ATTR = {
|
|||
};
|
||||
|
||||
static const CBPtab CBP_9 [] ICONST_ATTR = {
|
||||
{0, 0}, {0x00, 9}, {0x39, 9}, {0x36, 9},
|
||||
{0, 9}, {0x00, 9}, {0x39, 9}, {0x36, 9},
|
||||
{0x37, 9}, {0x3b, 9}, {0x3d, 9}, {0x3e, 9},
|
||||
{0x17, 8}, {0x17, 8}, {0x1b, 8}, {0x1b, 8},
|
||||
{0x1d, 8}, {0x1d, 8}, {0x1e, 8}, {0x1e, 8},
|
||||
|
@ -289,15 +293,15 @@ static const DCTtab DCT_B14_10 [] ICONST_ATTR = {
|
|||
};
|
||||
|
||||
static const DCTtab DCT_B14_8 [] ICONST_ATTR = {
|
||||
{ 65, 0, 6}, { 65, 0, 6}, { 65, 0, 6}, { 65, 0, 6},
|
||||
{ 3, 2, 7}, { 3, 2, 7}, { 10, 1, 7}, { 10, 1, 7},
|
||||
{ 1, 4, 7}, { 1, 4, 7}, { 9, 1, 7}, { 9, 1, 7},
|
||||
{ 8, 1, 6}, { 8, 1, 6}, { 8, 1, 6}, { 8, 1, 6},
|
||||
{ 7, 1, 6}, { 7, 1, 6}, { 7, 1, 6}, { 7, 1, 6},
|
||||
{ 2, 2, 6}, { 2, 2, 6}, { 2, 2, 6}, { 2, 2, 6},
|
||||
{ 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6},
|
||||
{ 14, 1, 8}, { 1, 6, 8}, { 13, 1, 8}, { 12, 1, 8},
|
||||
{ 4, 2, 8}, { 2, 3, 8}, { 1, 5, 8}, { 11, 1, 8}
|
||||
{ 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12},
|
||||
{ 3, 2, 7}, { 3, 2, 7}, { 10, 1, 7}, { 10, 1, 7},
|
||||
{ 1, 4, 7}, { 1, 4, 7}, { 9, 1, 7}, { 9, 1, 7},
|
||||
{ 8, 1, 6}, { 8, 1, 6}, { 8, 1, 6}, { 8, 1, 6},
|
||||
{ 7, 1, 6}, { 7, 1, 6}, { 7, 1, 6}, { 7, 1, 6},
|
||||
{ 2, 2, 6}, { 2, 2, 6}, { 2, 2, 6}, { 2, 2, 6},
|
||||
{ 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6},
|
||||
{ 14, 1, 8}, { 1, 6, 8}, { 13, 1, 8}, { 12, 1, 8},
|
||||
{ 4, 2, 8}, { 2, 3, 8}, { 1, 5, 8}, { 11, 1, 8}
|
||||
};
|
||||
|
||||
static const DCTtab DCT_B14AC_5 [] ICONST_ATTR = {
|
||||
|
@ -326,69 +330,69 @@ static const DCTtab DCT_B15_10 [] ICONST_ATTR = {
|
|||
};
|
||||
|
||||
static const DCTtab DCT_B15_8 [] ICONST_ATTR = {
|
||||
{ 65, 0, 6}, { 65, 0, 6}, { 65, 0, 6}, { 65, 0, 6},
|
||||
{ 8, 1, 7}, { 8, 1, 7}, { 9, 1, 7}, { 9, 1, 7},
|
||||
{ 7, 1, 7}, { 7, 1, 7}, { 3, 2, 7}, { 3, 2, 7},
|
||||
{ 1, 7, 6}, { 1, 7, 6}, { 1, 7, 6}, { 1, 7, 6},
|
||||
{ 1, 6, 6}, { 1, 6, 6}, { 1, 6, 6}, { 1, 6, 6},
|
||||
{ 5, 1, 6}, { 5, 1, 6}, { 5, 1, 6}, { 5, 1, 6},
|
||||
{ 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6},
|
||||
{ 2, 5, 8}, { 12, 1, 8}, { 1,11, 8}, { 1,10, 8},
|
||||
{ 14, 1, 8}, { 13, 1, 8}, { 4, 2, 8}, { 2, 4, 8},
|
||||
{ 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5},
|
||||
{ 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5},
|
||||
{ 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5},
|
||||
{ 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5},
|
||||
{ 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5},
|
||||
{ 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5},
|
||||
{ 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5},
|
||||
{ 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5},
|
||||
{ 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5},
|
||||
{ 10, 1, 7}, { 10, 1, 7}, { 2, 3, 7}, { 2, 3, 7},
|
||||
{ 11, 1, 7}, { 11, 1, 7}, { 1, 8, 7}, { 1, 8, 7},
|
||||
{ 1, 9, 7}, { 1, 9, 7}, { 1,12, 8}, { 1,13, 8},
|
||||
{ 3, 3, 8}, { 5, 2, 8}, { 1,14, 8}, { 1,15, 8}
|
||||
{ 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12}, { 65, 0, 12},
|
||||
{ 8, 1, 7}, { 8, 1, 7}, { 9, 1, 7}, { 9, 1, 7},
|
||||
{ 7, 1, 7}, { 7, 1, 7}, { 3, 2, 7}, { 3, 2, 7},
|
||||
{ 1, 7, 6}, { 1, 7, 6}, { 1, 7, 6}, { 1, 7, 6},
|
||||
{ 1, 6, 6}, { 1, 6, 6}, { 1, 6, 6}, { 1, 6, 6},
|
||||
{ 5, 1, 6}, { 5, 1, 6}, { 5, 1, 6}, { 5, 1, 6},
|
||||
{ 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6}, { 6, 1, 6},
|
||||
{ 2, 5, 8}, { 12, 1, 8}, { 1,11, 8}, { 1,10, 8},
|
||||
{ 14, 1, 8}, { 13, 1, 8}, { 4, 2, 8}, { 2, 4, 8},
|
||||
{ 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5},
|
||||
{ 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5}, { 3, 1, 5},
|
||||
{ 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5},
|
||||
{ 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5}, { 2, 2, 5},
|
||||
{ 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5},
|
||||
{ 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5}, { 4, 1, 5},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{ 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3}, { 2, 1, 3},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{129, 0, 4}, {129, 0, 4}, {129, 0, 4}, {129, 0, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4}, { 1, 3, 4},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2}, { 1, 1, 2},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3}, { 1, 2, 3},
|
||||
{ 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5},
|
||||
{ 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5}, { 1, 4, 5},
|
||||
{ 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5},
|
||||
{ 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5}, { 1, 5, 5},
|
||||
{ 10, 1, 7}, { 10, 1, 7}, { 2, 3, 7}, { 2, 3, 7},
|
||||
{ 11, 1, 7}, { 11, 1, 7}, { 1, 8, 7}, { 1, 8, 7},
|
||||
{ 1, 9, 7}, { 1, 9, 7}, { 1,12, 8}, { 1,13, 8},
|
||||
{ 3, 3, 8}, { 5, 2, 8}, { 1,14, 8}, { 1,15, 8}
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue