17
17
* You should have received a copy of the GNU Lesser General Public
18
18
* License along with this library; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
21
* Support for external huffman table, various fixes (AVID workaround),
22
22
* aspecting, new decode_frame mechanism and apple mjpeg-b support
54
54
/* JPEG marker codes */
56
56
/* start of frame */
57
SOF0 = 0xc0, /* baseline */
58
SOF1 = 0xc1, /* extended sequential, huffman */
59
SOF2 = 0xc2, /* progressive, huffman */
60
SOF3 = 0xc3, /* lossless, huffman */
62
SOF5 = 0xc5, /* differential sequential, huffman */
63
SOF6 = 0xc6, /* differential progressive, huffman */
64
SOF7 = 0xc7, /* differential lossless, huffman */
65
JPG = 0xc8, /* reserved for JPEG extension */
66
SOF9 = 0xc9, /* extended sequential, arithmetic */
67
SOF10 = 0xca, /* progressive, arithmetic */
68
SOF11 = 0xcb, /* lossless, arithmetic */
70
SOF13 = 0xcd, /* differential sequential, arithmetic */
71
SOF14 = 0xce, /* differential progressive, arithmetic */
72
SOF15 = 0xcf, /* differential lossless, arithmetic */
74
DHT = 0xc4, /* define huffman tables */
76
DAC = 0xcc, /* define arithmetic-coding conditioning */
57
SOF0 = 0xc0, /* baseline */
58
SOF1 = 0xc1, /* extended sequential, huffman */
59
SOF2 = 0xc2, /* progressive, huffman */
60
SOF3 = 0xc3, /* lossless, huffman */
62
SOF5 = 0xc5, /* differential sequential, huffman */
63
SOF6 = 0xc6, /* differential progressive, huffman */
64
SOF7 = 0xc7, /* differential lossless, huffman */
65
JPG = 0xc8, /* reserved for JPEG extension */
66
SOF9 = 0xc9, /* extended sequential, arithmetic */
67
SOF10 = 0xca, /* progressive, arithmetic */
68
SOF11 = 0xcb, /* lossless, arithmetic */
70
SOF13 = 0xcd, /* differential sequential, arithmetic */
71
SOF14 = 0xce, /* differential progressive, arithmetic */
72
SOF15 = 0xcf, /* differential lossless, arithmetic */
74
DHT = 0xc4, /* define huffman tables */
76
DAC = 0xcc, /* define arithmetic-coding conditioning */
78
78
/* restart with modulo 8 count "m" */
88
SOI = 0xd8, /* start of image */
89
EOI = 0xd9, /* end of image */
90
SOS = 0xda, /* start of scan */
91
DQT = 0xdb, /* define quantization tables */
92
DNL = 0xdc, /* define number of lines */
93
DRI = 0xdd, /* define restart interval */
94
DHP = 0xde, /* define hierarchical progression */
95
EXP = 0xdf, /* expand reference components */
88
SOI = 0xd8, /* start of image */
89
EOI = 0xd9, /* end of image */
90
SOS = 0xda, /* start of scan */
91
DQT = 0xdb, /* define quantization tables */
92
DNL = 0xdc, /* define number of lines */
93
DRI = 0xdd, /* define restart interval */
94
DHP = 0xde, /* define hierarchical progression */
95
EXP = 0xdf, /* expand reference components */
121
SOF48 = 0xf7, ///< JPEG-LS
122
LSE = 0xf8, ///< JPEG-LS extension parameters
129
COM = 0xfe, /* comment */
129
COM = 0xfe, /* comment */
131
TEM = 0x01, /* temporary private use for arithmetic coding */
131
TEM = 0x01, /* temporary private use for arithmetic coding */
133
133
/* 0x02 -> 0xbf reserved */
195
195
0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
196
196
0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
197
197
0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
201
201
static const uint8_t bits_ac_chrominance[17] =
222
222
0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
223
223
0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
224
224
0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
228
228
/* isn't this function nicer than the one in the libjpeg ? */
363
363
size += put_huffman_table(s, 0, 0, bits_dc_luminance, val_dc_luminance);
364
364
size += put_huffman_table(s, 0, 1, bits_dc_chrominance, val_dc_chrominance);
366
366
size += put_huffman_table(s, 1, 0, bits_ac_luminance, val_ac_luminance);
367
367
size += put_huffman_table(s, 1, 1, bits_ac_chrominance, val_ac_chrominance);
368
368
ptr[0] = size >> 8;
418
418
void mjpeg_picture_header(MpegEncContext *s)
420
const int lossless= s->avctx->codec_id == CODEC_ID_LJPEG;
420
const int lossless= s->avctx->codec_id != CODEC_ID_MJPEG;
421
const int ls = s->avctx->codec_id == CODEC_ID_JPEGLS;
423
assert(!(ls && s->mjpeg_write_tables));
422
425
put_marker(&s->pb, SOI);
424
427
if (!s->mjpeg_data_only_frames)
426
jpeg_put_comments(s);
429
jpeg_put_comments(s);
428
431
if (s->mjpeg_write_tables) jpeg_table_header(s);
430
put_marker(&s->pb, lossless ? SOF3 : SOF0);
433
switch(s->avctx->codec_id){
434
case CODEC_ID_MJPEG: put_marker(&s->pb, SOF0 ); break;
435
case CODEC_ID_LJPEG: put_marker(&s->pb, SOF3 ); break;
436
case CODEC_ID_JPEGLS: put_marker(&s->pb, SOF48); break;
432
440
put_bits(&s->pb, 16, 17);
433
441
if(lossless && s->avctx->pix_fmt == PIX_FMT_RGBA32)
437
445
put_bits(&s->pb, 16, s->height);
438
446
put_bits(&s->pb, 16, s->width);
439
447
put_bits(&s->pb, 8, 3); /* 3 components */
441
449
/* Y component */
442
450
put_bits(&s->pb, 8, 1); /* component number */
443
451
put_bits(&s->pb, 4, s->mjpeg_hsample[0]); /* H factor */
444
452
put_bits(&s->pb, 4, s->mjpeg_vsample[0]); /* V factor */
445
453
put_bits(&s->pb, 8, 0); /* select matrix */
447
455
/* Cb component */
448
456
put_bits(&s->pb, 8, 2); /* component number */
449
457
put_bits(&s->pb, 4, s->mjpeg_hsample[1]); /* H factor */
469
477
put_marker(&s->pb, SOS);
470
478
put_bits(&s->pb, 16, 12); /* length */
471
479
put_bits(&s->pb, 8, 3); /* 3 components */
473
481
/* Y component */
474
482
put_bits(&s->pb, 8, 1); /* index */
475
483
put_bits(&s->pb, 4, 0); /* DC huffman table index */
476
484
put_bits(&s->pb, 4, 0); /* AC huffman table index */
478
486
/* Cb component */
479
487
put_bits(&s->pb, 8, 2); /* index */
480
488
put_bits(&s->pb, 4, 1); /* DC huffman table index */
481
489
put_bits(&s->pb, 4, lossless ? 0 : 1); /* AC huffman table index */
483
491
/* Cr component */
484
492
put_bits(&s->pb, 8, 3); /* index */
485
493
put_bits(&s->pb, 4, 1); /* DC huffman table index */
486
494
put_bits(&s->pb, 4, lossless ? 0 : 1); /* AC huffman table index */
488
put_bits(&s->pb, 8, lossless ? s->avctx->prediction_method+1 : 0); /* Ss (not used) */
489
put_bits(&s->pb, 8, lossless ? 0 : 63); /* Se (not used) */
496
put_bits(&s->pb, 8, (lossless && !ls) ? s->avctx->prediction_method+1 : 0); /* Ss (not used) */
498
switch(s->avctx->codec_id){
499
case CODEC_ID_MJPEG: put_bits(&s->pb, 8, 63); break; /* Se (not used) */
500
case CODEC_ID_LJPEG: put_bits(&s->pb, 8, 0); break; /* not used */
501
case CODEC_ID_JPEGLS: put_bits(&s->pb, 8, 1); break; /* ILV = line interleaved */
490
505
put_bits(&s->pb, 8, 0); /* Ah/Al (not used) */
507
//FIXME DC/AC entropy table selectors stuff in jpegls
493
510
static void escape_FF(MpegEncContext *s, int start)
771
788
h = s->mjpeg_hsample[i];
772
789
v = s->mjpeg_vsample[i];
773
790
linesize= p->linesize[i];
775
792
for(y=0; y<v; y++){
776
793
for(x=0; x<h; x++){
779
796
ptr = p->data[i] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
780
//printf("%d %d %d %d %8X\n", mb_x, mb_y, x, y, ptr);
797
//printf("%d %d %d %d %8X\n", mb_x, mb_y, x, y, ptr);
781
798
PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
827
844
int interlaced; /* true if interlaced */
828
845
int bottom_field; /* true if bottom field */
831
int rct; /* standard rct */
832
int pegasus_rct; /* pegasus reversible colorspace transform */
849
int rct; /* standard rct */
850
int pegasus_rct; /* pegasus reversible colorspace transform */
833
851
int bits; /* bits per component */
854
int near; ///< near lossless bound (si 0 for lossless)
856
int reset; ///< context halfing intervall ?rename
835
858
int width, height;
836
859
int mb_width, mb_height;
837
860
int nb_components;
862
885
int interlace_polarity;
864
887
int mjpb_skiptosod;
889
int cur_scan; /* current scan, used by JPEG-LS */
865
890
} MJpegDecodeContext;
892
#include "jpeg_ls.c" //FIXME make jpeg-ls more independant
867
894
static int mjpeg_decode_dht(MJpegDecodeContext *s);
869
static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table,
896
static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table,
870
897
int nb_codes, int use_static)
872
899
uint8_t huff_size[256];
875
902
memset(huff_size, 0, sizeof(huff_size));
876
903
build_huffman_codes(huff_size, huff_code, bits_table, val_table);
878
905
return init_vlc(vlc, 9, nb_codes, huff_size, 1, 1, huff_code, 2, 2, use_static);
902
929
s->start_code = -1;
903
930
s->first_picture = 1;
904
931
s->org_height = avctx->coded_height;
906
933
build_vlc(&s->vlcs[0][0], bits_dc_luminance, val_dc_luminance, 12, 0);
907
934
build_vlc(&s->vlcs[0][1], bits_dc_chrominance, val_dc_chrominance, 12, 0);
908
935
build_vlc(&s->vlcs[1][0], bits_ac_luminance, val_ac_luminance, 251, 0);
911
938
if (avctx->flags & CODEC_FLAG_EXTERN_HUFF)
913
av_log(avctx, AV_LOG_INFO, "mjpeg: using external huffman table\n");
914
init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
916
/* should check for error - but dunno */
940
av_log(avctx, AV_LOG_INFO, "mjpeg: using external huffman table\n");
941
init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
943
/* should check for error - but dunno */
964
991
static int jpeg_parse(AVCodecParserContext *s,
965
992
AVCodecContext *avctx,
966
uint8_t **poutbuf, int *poutbuf_size,
993
uint8_t **poutbuf, int *poutbuf_size,
967
994
const uint8_t *buf, int buf_size)
969
996
ParseContext *pc = s->priv_data;
972
999
next= find_frame_end(pc, buf, buf_size);
974
1001
if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) {
1003
1030
/* read quant table */
1004
1031
for(i=0;i<64;i++) {
1005
1032
j = s->scantable.permutated[i];
1006
s->quant_matrixes[index][j] = get_bits(&s->gb, 8);
1033
s->quant_matrixes[index][j] = get_bits(&s->gb, 8);
1009
1036
//XXX FIXME finetune, and perhaps add dc too
1010
1037
s->qscale[index]= FFMAX(
1011
1038
s->quant_matrixes[index][s->scantable.permutated[1]],
1012
1039
s->quant_matrixes[index][s->scantable.permutated[8]]) >> 1;
1013
dprintf("qscale[%d]: %d\n", index, s->qscale[index]);
1040
dprintf("qscale[%d]: %d\n", index, s->qscale[index]);
1071
1098
/* XXX: verify len field validity */
1072
1099
len = get_bits(&s->gb, 16);
1073
1100
s->bits= get_bits(&s->gb, 8);
1075
if(s->pegasus_rct) s->bits=9;
1102
if(s->pegasus_rct) s->bits=9;
1076
1103
if(s->bits==9 && !s->pegasus_rct) s->rct=1; //FIXME ugly
1078
1105
if (s->bits != 8 && !s->lossless){
1079
1106
av_log(s->avctx, AV_LOG_ERROR, "only 8 bits/component accepted\n");
1109
if (s->bits > 8 && s->ls){
1110
av_log(s->avctx, AV_LOG_ERROR, "only <= 8 bits/component accepted for JPEG-LS\n");
1082
1114
height = get_bits(&s->gb, 16);
1083
1115
width = get_bits(&s->gb, 16);
1085
1117
dprintf("sof0: picture: %dx%d\n", width, height);
1086
1118
if(avcodec_check_dimensions(s->avctx, width, height))
1107
1139
if (s->quant_index[i] >= 4)
1109
1141
dprintf("component %d %d:%d id: %d quant:%d\n", i, s->h_count[i],
1110
s->v_count[i], s->component_id[i], s->quant_index[i]);
1142
s->v_count[i], s->component_id[i], s->quant_index[i]);
1145
if(s->ls && (s->h_max > 1 || s->v_max > 1)) {
1146
av_log(s->avctx, AV_LOG_ERROR, "Subsampling in JPEG-LS is not supported.\n");
1113
1150
if(s->v_max==1 && s->h_max==1 && s->lossless==1) s->rgb=1;
1115
1152
/* if different size, realloc/alloc picture */
1116
1153
/* XXX: also check h_count and v_count */
1117
1154
if (width != s->width || height != s->height) {
1118
1155
av_freep(&s->qscale_table);
1120
1157
s->width = width;
1121
1158
s->height = height;
1122
avcodec_set_dimensions(s->avctx, width, height);
1124
1160
/* test interlaced mode */
1125
1161
if (s->first_picture &&
1126
1162
s->org_height != 0 &&
1127
1163
s->height < ((s->org_height * 3) / 4)) {
1128
1164
s->interlaced = 1;
1129
// s->bottom_field = (s->interlace_polarity) ? 1 : 0;
1165
// s->bottom_field = (s->interlace_polarity) ? 1 : 0;
1130
1166
s->bottom_field = 0;
1131
s->avctx->height *= 2;
1170
avcodec_set_dimensions(s->avctx, width, height);
1134
1172
s->qscale_table= av_mallocz((s->width+15)/16);
1136
1174
s->first_picture = 0;
1139
1177
if(s->interlaced && s->bottom_field)
1142
1180
/* XXX: not complete test ! */
1143
1181
switch((s->h_count[0] << 4) | s->v_count[0]) {
1169
1213
s->picture.pict_type= I_TYPE;
1170
1214
s->picture.key_frame= 1;
1172
1216
for(i=0; i<3; i++){
1173
1217
s->linesize[i]= s->picture.linesize[i] << s->interlaced;
1176
1220
// printf("%d %d %d %d %d %d\n", s->width, s->height, s->linesize[0], s->linesize[1], s->interlaced, s->avctx->height);
1178
1222
if (len != (8+(3*nb_components)))
1180
dprintf("decode_sof0: error, len(%d) mismatch\n", len);
1224
dprintf("decode_sof0: error, len(%d) mismatch\n", len);
1203
1247
/* decode block and dequantize */
1204
static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
1248
static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
1205
1249
int component, int dc_index, int ac_index, int quant_index)
1207
1251
int code, i, j, level, val;
1422
1466
for(j=0;j<n;j++) {
1423
1467
memset(s->block, 0, sizeof(s->block));
1424
if (decode_block(s, s->block, i,
1425
s->dc_index[i], s->ac_index[i],
1468
if (decode_block(s, s->block, i,
1469
s->dc_index[i], s->ac_index[i],
1426
1470
s->quant_index[c]) < 0) {
1427
1471
dprintf("error y=%d x=%d\n", mb_y, mb_x);
1430
// dprintf("mb: %d %d processed\n", mb_y, mb_x);
1431
ptr = s->picture.data[c] +
1432
(((s->linesize[c] * (v * mb_y + y) * 8) +
1474
// dprintf("mb: %d %d processed\n", mb_y, mb_x);
1475
ptr = s->picture.data[c] +
1476
(((s->linesize[c] * (v * mb_y + y) * 8) +
1433
1477
(h * mb_x + x) * 8) >> s->avctx->lowres);
1434
1478
if (s->interlaced && s->bottom_field)
1435
1479
ptr += s->linesize[c] >> 1;
1459
1503
int len, nb_components, i, h, v, predictor, point_transform;
1460
1504
int vmax, hmax, index, id;
1461
1505
const int block_size= s->lossless ? 1 : 8;
1463
1508
/* XXX: verify len field validity */
1464
1509
len = get_bits(&s->gb, 16);
1465
1510
nb_components = get_bits(&s->gb, 8);
1466
1511
if (len != 6+2*nb_components)
1468
dprintf("decode_sos: invalid len (%d)\n", len);
1513
dprintf("decode_sos: invalid len (%d)\n", len);
1471
1516
/* XXX: only interleaved scan accepted */
1472
if (nb_components != s->nb_components)
1517
if ((nb_components != s->nb_components) && !s->ls)
1474
dprintf("decode_sos: components(%d) mismatch\n", nb_components);
1519
dprintf("decode_sos: components(%d) mismatch\n", nb_components);
1479
1524
for(i=0;i<nb_components;i++) {
1480
1525
id = get_bits(&s->gb, 8) - 1;
1481
dprintf("component: %d\n", id);
1526
dprintf("component: %d\n", id);
1482
1527
/* find component index */
1483
1528
for(index=0;index<s->nb_components;index++)
1484
1529
if (id == s->component_id[index])
1486
1531
if (index == s->nb_components)
1488
dprintf("decode_sos: index(%d) out of components\n", index);
1533
dprintf("decode_sos: index(%d) out of components\n", index);
1492
1537
s->comp_index[i] = index;
1498
1543
s->dc_index[i] = get_bits(&s->gb, 4);
1499
1544
s->ac_index[i] = get_bits(&s->gb, 4);
1501
if (s->dc_index[i] < 0 || s->ac_index[i] < 0 ||
1502
s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
1546
if (s->dc_index[i] < 0 || s->ac_index[i] < 0 ||
1547
s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
1505
switch(s->start_code)
1508
if (dc_index[i] > 1 || ac_index[i] > 1)
1513
if (dc_index[i] > 3 || ac_index[i] > 3)
1517
if (dc_index[i] > 3 || ac_index[i] != 0)
1550
switch(s->start_code)
1553
if (dc_index[i] > 1 || ac_index[i] > 1)
1558
if (dc_index[i] > 3 || ac_index[i] > 3)
1562
if (dc_index[i] > 3 || ac_index[i] != 0)
1524
predictor= get_bits(&s->gb, 8); /* lossless predictor or start of spectral (Ss) */
1525
skip_bits(&s->gb, 8); /* Se */
1569
predictor= get_bits(&s->gb, 8); /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
1570
ilv= get_bits(&s->gb, 8); /* JPEG Se / JPEG-LS ILV */
1526
1571
skip_bits(&s->gb, 4); /* Ah */
1527
1572
point_transform= get_bits(&s->gb, 4); /* Al */
1529
for(i=0;i<nb_components;i++)
1574
for(i=0;i<nb_components;i++)
1530
1575
s->last_dc[i] = 1024;
1532
1577
if (nb_components > 1) {
1533
1578
/* interleaved stream */
1534
1579
s->mb_width = (s->width + s->h_max * block_size - 1) / (s->h_max * block_size);
1535
1580
s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
1581
} else if(!s->ls) { /* skip this for JPEG-LS */
1537
1582
h = s->h_max / s->h_scount[s->comp_index[0]];
1538
1583
v = s->v_max / s->v_scount[s->comp_index[0]];
1539
1584
s->mb_width = (s->width + h * block_size - 1) / (h * block_size);
1546
1591
if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1547
av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "", predictor, point_transform);
1592
av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d %s\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "",
1593
predictor, point_transform, ilv, s->bits,
1594
s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""));
1549
1597
/* mjpeg-b can have padding bytes between sos and image data, skip them */
1550
1598
for (i = s->mjpb_skiptosod; i > 0; i--)
1551
1599
skip_bits(&s->gb, 8);
1553
1601
if(s->lossless){
1604
// reset_ls_coding_parameters(s, 0);
1606
ls_decode_picture(s, predictor, point_transform, ilv);
1555
1609
if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0)
1597
1652
if(s->avctx->debug & FF_DEBUG_STARTCODE){
1598
av_log(s->avctx, AV_LOG_DEBUG, "APPx %8X\n", id);
1653
av_log(s->avctx, AV_LOG_DEBUG, "APPx %8X\n", id);
1601
1656
/* buggy AVID, it puts EOI only at every 10th frame */
1602
1657
/* also this fourcc is used by non-avid files too, it holds some
1603
1658
informations, but it's always present in AVID creates files */
1604
1659
if (id == ff_get_fourcc("AVI1"))
1611
4bytes field_size_less_padding
1614
// if (s->first_picture)
1615
// printf("mjpeg: workarounding buggy AVID\n");
1616
s->interlace_polarity = get_bits(&s->gb, 8);
1666
4bytes field_size_less_padding
1669
// if (s->first_picture)
1670
// printf("mjpeg: workarounding buggy AVID\n");
1671
s->interlace_polarity = get_bits(&s->gb, 8);
1618
skip_bits(&s->gb, 8);
1619
skip_bits(&s->gb, 32);
1620
skip_bits(&s->gb, 32);
1673
skip_bits(&s->gb, 8);
1674
skip_bits(&s->gb, 32);
1675
skip_bits(&s->gb, 32);
1623
// if (s->interlace_polarity)
1624
// printf("mjpeg: interlace polarity: %d\n", s->interlace_polarity);
1678
// if (s->interlace_polarity)
1679
// printf("mjpeg: interlace polarity: %d\n", s->interlace_polarity);
1630
1685
if (id == ff_get_fourcc("JFIF"))
1632
int t_w, t_h, v1, v2;
1633
skip_bits(&s->gb, 8); /* the trailing zero-byte */
1634
v1= get_bits(&s->gb, 8);
1687
int t_w, t_h, v1, v2;
1688
skip_bits(&s->gb, 8); /* the trailing zero-byte */
1689
v1= get_bits(&s->gb, 8);
1635
1690
v2= get_bits(&s->gb, 8);
1636
1691
skip_bits(&s->gb, 8);
1645
1700
s->avctx->sample_aspect_ratio.den
1648
t_w = get_bits(&s->gb, 8);
1649
t_h = get_bits(&s->gb, 8);
1652
/* skip thumbnail */
1653
if (len-10-(t_w*t_h*3) > 0)
1703
t_w = get_bits(&s->gb, 8);
1704
t_h = get_bits(&s->gb, 8);
1707
/* skip thumbnail */
1708
if (len-10-(t_w*t_h*3) > 0)
1660
1715
if (id == ff_get_fourcc("Adob") && (get_bits(&s->gb, 8) == 'e'))
1662
1717
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1663
1718
av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found\n");
1664
skip_bits(&s->gb, 16); /* version */
1665
skip_bits(&s->gb, 16); /* flags0 */
1666
skip_bits(&s->gb, 16); /* flags1 */
1667
skip_bits(&s->gb, 8); /* transform */
1719
skip_bits(&s->gb, 16); /* version */
1720
skip_bits(&s->gb, 16); /* flags0 */
1721
skip_bits(&s->gb, 16); /* flags1 */
1722
skip_bits(&s->gb, 8); /* transform */
1672
1727
if (id == ff_get_fourcc("LJIF")){
1673
1728
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1674
1729
av_log(s->avctx, AV_LOG_INFO, "Pegasus lossless jpeg header found\n");
1675
skip_bits(&s->gb, 16); /* version ? */
1676
skip_bits(&s->gb, 16); /* unknwon always 0? */
1677
skip_bits(&s->gb, 16); /* unknwon always 0? */
1678
skip_bits(&s->gb, 16); /* unknwon always 0? */
1730
skip_bits(&s->gb, 16); /* version ? */
1731
skip_bits(&s->gb, 16); /* unknwon always 0? */
1732
skip_bits(&s->gb, 16); /* unknwon always 0? */
1733
skip_bits(&s->gb, 16); /* unknwon always 0? */
1679
1734
switch( get_bits(&s->gb, 8)){
1695
1750
/* Apple MJPEG-A */
1696
1751
if ((s->start_code == APP1) && (len > (0x28 - 8)))
1698
id = (get_bits(&s->gb, 16) << 16) | get_bits(&s->gb, 16);
1701
if (id == ff_get_fourcc("mjpg")) /* Apple MJPEG-A */
1753
id = (get_bits(&s->gb, 16) << 16) | get_bits(&s->gb, 16);
1756
if (id == ff_get_fourcc("mjpg")) /* Apple MJPEG-A */
1704
skip_bits(&s->gb, 32); /* field size */
1705
skip_bits(&s->gb, 32); /* pad field size */
1706
skip_bits(&s->gb, 32); /* next off */
1707
skip_bits(&s->gb, 32); /* quant off */
1708
skip_bits(&s->gb, 32); /* huff off */
1709
skip_bits(&s->gb, 32); /* image off */
1710
skip_bits(&s->gb, 32); /* scan off */
1711
skip_bits(&s->gb, 32); /* data off */
1759
skip_bits(&s->gb, 32); /* field size */
1760
skip_bits(&s->gb, 32); /* pad field size */
1761
skip_bits(&s->gb, 32); /* next off */
1762
skip_bits(&s->gb, 32); /* quant off */
1763
skip_bits(&s->gb, 32); /* huff off */
1764
skip_bits(&s->gb, 32); /* image off */
1765
skip_bits(&s->gb, 32); /* scan off */
1766
skip_bits(&s->gb, 32); /* data off */
1713
1768
if (s->avctx->debug & FF_DEBUG_PICT_INFO)
1714
av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
1769
av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
1719
1774
/* slow but needed for extreme adobe jpegs */
1721
av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error, decode_app parser read over the end\n");
1776
av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error, decode_app parser read over the end\n");
1722
1777
while(--len > 0)
1723
skip_bits(&s->gb, 8);
1778
skip_bits(&s->gb, 8);
1730
1785
int len = get_bits(&s->gb, 16);
1731
1786
if (len >= 2 && 8*len - 16 + get_bits_count(&s->gb) <= s->gb.size_in_bits) {
1732
uint8_t *cbuf = av_malloc(len - 1);
1735
for (i = 0; i < len - 2; i++)
1736
cbuf[i] = get_bits(&s->gb, 8);
1737
if (i > 0 && cbuf[i-1] == '\n')
1787
uint8_t *cbuf = av_malloc(len - 1);
1790
for (i = 0; i < len - 2; i++)
1791
cbuf[i] = get_bits(&s->gb, 8);
1792
if (i > 0 && cbuf[i-1] == '\n')
1742
1797
if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1743
1798
av_log(s->avctx, AV_LOG_INFO, "mjpeg comment: '%s'\n", cbuf);
1745
/* buggy avid, it puts EOI only at every 10th frame */
1746
if (!strcmp(cbuf, "AVID"))
1749
// if (s->first_picture)
1750
// printf("mjpeg: workarounding buggy AVID\n");
1800
/* buggy avid, it puts EOI only at every 10th frame */
1801
if (!strcmp(cbuf, "AVID"))
1804
// if (s->first_picture)
1805
// printf("mjpeg: workarounding buggy AVID\n");
1752
1807
else if(!strcmp(cbuf, "CS=ITU601")){
1753
1808
s->cs_itu601= 1;
1829
1884
while (buf_ptr < buf_end) {
1830
1885
/* find start next marker */
1831
1886
start_code = find_marker(&buf_ptr, buf_end);
1834
1889
if (start_code < 0) {
1837
1892
dprintf("marker=%x avail_size_in_buf=%d\n", start_code, buf_end - buf_ptr);
1839
if ((buf_end - buf_ptr) > s->buffer_size)
1842
s->buffer_size = buf_end-buf_ptr;
1894
if ((buf_end - buf_ptr) > s->buffer_size)
1897
s->buffer_size = buf_end-buf_ptr;
1843
1898
s->buffer = av_malloc(s->buffer_size + FF_INPUT_BUFFER_PADDING_SIZE);
1844
dprintf("buffer too small, expanding to %d bytes\n",
1848
/* unescape buffer of SOS */
1849
if (start_code == SOS)
1851
uint8_t *src = buf_ptr;
1852
uint8_t *dst = s->buffer;
1856
uint8_t x = *(src++);
1899
dprintf("buffer too small, expanding to %d bytes\n",
1903
/* unescape buffer of SOS, use special treatment for JPEG-LS */
1904
if (start_code == SOS && !s->ls)
1906
uint8_t *src = buf_ptr;
1907
uint8_t *dst = s->buffer;
1911
uint8_t x = *(src++);
1861
1916
while(src<buf_end && x == 0xff)
1864
if (x >= 0xd0 && x <= 0xd7)
1870
init_get_bits(&s->gb, s->buffer, (dst - s->buffer)*8);
1872
dprintf("escaping removed %d bytes\n",
1873
(buf_end - buf_ptr) - (dst - s->buffer));
1876
init_get_bits(&s->gb, buf_ptr, (buf_end - buf_ptr)*8);
1878
s->start_code = start_code;
1919
if (x >= 0xd0 && x <= 0xd7)
1925
init_get_bits(&s->gb, s->buffer, (dst - s->buffer)*8);
1927
dprintf("escaping removed %d bytes\n",
1928
(buf_end - buf_ptr) - (dst - s->buffer));
1930
else if(start_code == SOS && s->ls){
1931
uint8_t *src = buf_ptr;
1932
uint8_t *dst = s->buffer;
1940
while (src + t < buf_end){
1941
uint8_t x = src[t++];
1943
while((src + t < buf_end) && x == 0xff)
1953
init_put_bits(&pb, dst, t);
1955
/* unescape bitstream */
1957
uint8_t x = src[b++];
1958
put_bits(&pb, 8, x);
1961
put_bits(&pb, 7, x);
1965
flush_put_bits(&pb);
1967
init_get_bits(&s->gb, dst, bit_count);
1970
init_get_bits(&s->gb, buf_ptr, (buf_end - buf_ptr)*8);
1972
s->start_code = start_code;
1879
1973
if(s->avctx->debug & FF_DEBUG_STARTCODE){
1880
1974
av_log(s->avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
1883
/* process markers */
1884
if (start_code >= 0xd0 && start_code <= 0xd7) {
1885
dprintf("restart marker: %d\n", start_code&0x0f);
1887
} else if (start_code >= APP0 && start_code <= APP15) {
1888
mjpeg_decode_app(s);
1890
} else if (start_code == COM){
1891
mjpeg_decode_com(s);
1977
/* process markers */
1978
if (start_code >= 0xd0 && start_code <= 0xd7) {
1979
dprintf("restart marker: %d\n", start_code&0x0f);
1981
} else if (start_code >= APP0 && start_code <= APP15) {
1982
mjpeg_decode_app(s);
1984
} else if (start_code == COM){
1985
mjpeg_decode_com(s);
1894
1988
switch(start_code) {
1896
s->restart_interval = 0;
1897
s->restart_count = 0;
1990
s->restart_interval = 0;
1992
s->restart_count = 0;
1898
1993
/* nothing to do on SOI */
1911
if (mjpeg_decode_sof(s) < 0)
2006
if (mjpeg_decode_sof(s) < 0)
1916
if (mjpeg_decode_sof(s) < 0)
1920
if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
2011
if (mjpeg_decode_sof(s) < 0)
2017
if (mjpeg_decode_sof(s) < 0)
2021
if (decode_lse(s) < 0)
2025
if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
1924
2029
if (s->interlaced) {
1925
2030
s->bottom_field ^= 1;
1926
2031
/* if not bottom field, do not output image yet */
1939
2044
av_log(s->avctx, AV_LOG_DEBUG, "QP: %d\n", picture->quality);
1940
2045
picture->quality*= FF_QP2LAMBDA;
1947
2052
mjpeg_decode_sos(s);
1948
/* buggy avid puts EOI every 10-20th frame */
1949
/* if restart period is over process EOI */
1950
if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
1954
mjpeg_decode_dri(s);
1968
av_log(s->avctx, AV_LOG_ERROR, "mjpeg: unsupported coding type (%x)\n", start_code);
1971
// printf("mjpeg: unsupported marker (%x)\n", start_code);
2053
/* buggy avid puts EOI every 10-20th frame */
2054
/* if restart period is over process EOI */
2055
if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
2059
mjpeg_decode_dri(s);
2073
av_log(s->avctx, AV_LOG_ERROR, "mjpeg: unsupported coding type (%x)\n", start_code);
2076
// printf("mjpeg: unsupported marker (%x)\n", start_code);
1976
/* eof process start code */
1977
buf_ptr += (get_bits_count(&s->gb)+7)/8;
1978
dprintf("marker parser used %d bytes (%d bits)\n",
1979
(get_bits_count(&s->gb)+7)/8, get_bits_count(&s->gb));
2081
/* eof process start code */
2082
buf_ptr += (get_bits_count(&s->gb)+7)/8;
2083
dprintf("marker parser used %d bytes (%d bits)\n",
2084
(get_bits_count(&s->gb)+7)/8, get_bits_count(&s->gb));
2009
2114
init_get_bits(&hgb, buf_ptr, /*buf_size*/(buf_end - buf_ptr)*8);
2011
2116
skip_bits(&hgb, 32); /* reserved zeros */
2013
2118
if (get_bits_long(&hgb, 32) != be2me_32(ff_get_fourcc("mjpg")))
2015
dprintf("not mjpeg-b (bad fourcc)\n");
2120
dprintf("not mjpeg-b (bad fourcc)\n");
2019
2124
field_size = get_bits_long(&hgb, 32); /* field size */
2022
2127
second_field_offs = get_bits_long(&hgb, 32);
2023
2128
dprintf("second field offs: 0x%x\n", second_field_offs);
2024
2129
if (second_field_offs)
2027
2132
dqt_offs = get_bits_long(&hgb, 32);
2028
2133
dprintf("dqt offs: 0x%x\n", dqt_offs);
2031
init_get_bits(&s->gb, buf+dqt_offs, (buf_end - (buf+dqt_offs))*8);
2032
s->start_code = DQT;
2033
mjpeg_decode_dqt(s);
2136
init_get_bits(&s->gb, buf+dqt_offs, (buf_end - (buf+dqt_offs))*8);
2137
s->start_code = DQT;
2138
mjpeg_decode_dqt(s);
2036
2141
dht_offs = get_bits_long(&hgb, 32);
2037
2142
dprintf("dht offs: 0x%x\n", dht_offs);
2040
init_get_bits(&s->gb, buf+dht_offs, (buf_end - (buf+dht_offs))*8);
2041
s->start_code = DHT;
2042
mjpeg_decode_dht(s);
2145
init_get_bits(&s->gb, buf+dht_offs, (buf_end - (buf+dht_offs))*8);
2146
s->start_code = DHT;
2147
mjpeg_decode_dht(s);
2045
2150
sof_offs = get_bits_long(&hgb, 32);
2046
2151
dprintf("sof offs: 0x%x\n", sof_offs);
2049
init_get_bits(&s->gb, buf+sof_offs, (buf_end - (buf+sof_offs))*8);
2050
s->start_code = SOF0;
2051
if (mjpeg_decode_sof(s) < 0)
2154
init_get_bits(&s->gb, buf+sof_offs, (buf_end - (buf+sof_offs))*8);
2155
s->start_code = SOF0;
2156
if (mjpeg_decode_sof(s) < 0)
2055
2160
sos_offs = get_bits_long(&hgb, 32);
2058
2163
dprintf("sod offs: 0x%x\n", sod_offs);
2061
// init_get_bits(&s->gb, buf+sos_offs, (buf_end - (buf+sos_offs))*8);
2062
init_get_bits(&s->gb, buf+sos_offs, field_size*8);
2063
s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
2064
s->start_code = SOS;
2065
mjpeg_decode_sos(s);
2166
// init_get_bits(&s->gb, buf+sos_offs, (buf_end - (buf+sos_offs))*8);
2167
init_get_bits(&s->gb, buf+sos_offs, field_size*8);
2168
s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
2169
s->start_code = SOS;
2170
mjpeg_decode_sos(s);
2068
2173
if (s->interlaced) {
2069
2174
s->bottom_field ^= 1;
2070
2175
/* if not bottom field, do not output image yet */
2071
2176
if (s->bottom_field && second_field_offs)
2073
buf_ptr = buf + second_field_offs;
2074
second_field_offs = 0;
2178
buf_ptr = buf + second_field_offs;
2179
second_field_offs = 0;
2079
2184
//XXX FIXME factorize, this looks very similar to the EOI code
2081
2186
*picture= s->picture;
2082
2187
*data_size = sizeof(AVFrame);
2084
2189
if(!s->lossless){
2085
picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
2190
picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
2086
2191
picture->qstride= 0;
2087
2192
picture->qscale_table= s->qscale_table;
2088
2193
memset(picture->qscale_table, picture->quality, (s->width+15)/16);
2175
2280
s->quant_index[2] = 1;
2179
2284
s->qscale_table = av_mallocz((s->width+15)/16);
2180
2285
avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420;
2181
2286
s->interlaced = 0;
2183
2288
s->picture.reference = 0;
2184
2289
if (avctx->get_buffer(avctx, &s->picture) < 0)
2186
2291
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
2190
2295
s->picture.pict_type = I_TYPE;
2191
2296
s->picture.key_frame = 1;
2193
2298
for (i = 0; i < 3; i++)
2194
s->linesize[i] = s->picture.linesize[i] << s->interlaced;
2299
s->linesize[i] = s->picture.linesize[i] << s->interlaced;
2197
2302
for (i = 0; i < 64; i++)
2199
j = s->scantable.permutated[i];
2200
s->quant_matrixes[0][j] = sp5x_quant_table[(qscale * 2) + i];
2304
j = s->scantable.permutated[i];
2305
s->quant_matrixes[0][j] = sp5x_quant_table[(qscale * 2) + i];
2202
2307
s->qscale[0] = FFMAX(
2203
s->quant_matrixes[0][s->scantable.permutated[1]],
2204
s->quant_matrixes[0][s->scantable.permutated[8]]) >> 1;
2308
s->quant_matrixes[0][s->scantable.permutated[1]],
2309
s->quant_matrixes[0][s->scantable.permutated[8]]) >> 1;
2206
2311
for (i = 0; i < 64; i++)
2208
j = s->scantable.permutated[i];
2209
s->quant_matrixes[1][j] = sp5x_quant_table[(qscale * 2) + 1 + i];
2313
j = s->scantable.permutated[i];
2314
s->quant_matrixes[1][j] = sp5x_quant_table[(qscale * 2) + 1 + i];
2211
2316
s->qscale[1] = FFMAX(
2212
s->quant_matrixes[1][s->scantable.permutated[1]],
2213
s->quant_matrixes[1][s->scantable.permutated[8]]) >> 1;
2317
s->quant_matrixes[1][s->scantable.permutated[1]],
2318
s->quant_matrixes[1][s->scantable.permutated[8]]) >> 1;