You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2600 lines
92KB

  1. /*
  2. * MJPEG decoder
  3. * Copyright (c) 2000, 2001 Fabrice Bellard
  4. * Copyright (c) 2003 Alex Beregszaszi
  5. * Copyright (c) 2003-2004 Michael Niedermayer
  6. *
  7. * Support for external huffman table, various fixes (AVID workaround),
  8. * aspecting, new decode_frame mechanism and apple mjpeg-b support
  9. * by Alex Beregszaszi
  10. *
  11. * This file is part of FFmpeg.
  12. *
  13. * FFmpeg is free software; you can redistribute it and/or
  14. * modify it under the terms of the GNU Lesser General Public
  15. * License as published by the Free Software Foundation; either
  16. * version 2.1 of the License, or (at your option) any later version.
  17. *
  18. * FFmpeg is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  21. * Lesser General Public License for more details.
  22. *
  23. * You should have received a copy of the GNU Lesser General Public
  24. * License along with FFmpeg; if not, write to the Free Software
  25. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  26. */
  27. /**
  28. * @file
  29. * MJPEG decoder.
  30. */
  31. #include "libavutil/imgutils.h"
  32. #include "libavutil/avassert.h"
  33. #include "libavutil/opt.h"
  34. #include "avcodec.h"
  35. #include "blockdsp.h"
  36. #include "copy_block.h"
  37. #include "idctdsp.h"
  38. #include "internal.h"
  39. #include "jpegtables.h"
  40. #include "mjpeg.h"
  41. #include "mjpegdec.h"
  42. #include "jpeglsdec.h"
  43. #include "put_bits.h"
  44. #include "tiff.h"
  45. #include "exif.h"
  46. #include "bytestream.h"
  47. static int build_vlc(VLC *vlc, const uint8_t *bits_table,
  48. const uint8_t *val_table, int nb_codes,
  49. int use_static, int is_ac)
  50. {
  51. uint8_t huff_size[256] = { 0 };
  52. uint16_t huff_code[256];
  53. uint16_t huff_sym[256];
  54. int i;
  55. av_assert0(nb_codes <= 256);
  56. ff_mjpeg_build_huffman_codes(huff_size, huff_code, bits_table, val_table);
  57. for (i = 0; i < 256; i++)
  58. huff_sym[i] = i + 16 * is_ac;
  59. if (is_ac)
  60. huff_sym[0] = 16 * 256;
  61. return ff_init_vlc_sparse(vlc, 9, nb_codes, huff_size, 1, 1,
  62. huff_code, 2, 2, huff_sym, 2, 2, use_static);
  63. }
  64. static int build_basic_mjpeg_vlc(MJpegDecodeContext *s)
  65. {
  66. int ret;
  67. if ((ret = build_vlc(&s->vlcs[0][0], avpriv_mjpeg_bits_dc_luminance,
  68. avpriv_mjpeg_val_dc, 12, 0, 0)) < 0)
  69. return ret;
  70. if ((ret = build_vlc(&s->vlcs[0][1], avpriv_mjpeg_bits_dc_chrominance,
  71. avpriv_mjpeg_val_dc, 12, 0, 0)) < 0)
  72. return ret;
  73. if ((ret = build_vlc(&s->vlcs[1][0], avpriv_mjpeg_bits_ac_luminance,
  74. avpriv_mjpeg_val_ac_luminance, 251, 0, 1)) < 0)
  75. return ret;
  76. if ((ret = build_vlc(&s->vlcs[1][1], avpriv_mjpeg_bits_ac_chrominance,
  77. avpriv_mjpeg_val_ac_chrominance, 251, 0, 1)) < 0)
  78. return ret;
  79. if ((ret = build_vlc(&s->vlcs[2][0], avpriv_mjpeg_bits_ac_luminance,
  80. avpriv_mjpeg_val_ac_luminance, 251, 0, 0)) < 0)
  81. return ret;
  82. if ((ret = build_vlc(&s->vlcs[2][1], avpriv_mjpeg_bits_ac_chrominance,
  83. avpriv_mjpeg_val_ac_chrominance, 251, 0, 0)) < 0)
  84. return ret;
  85. return 0;
  86. }
  87. static void parse_avid(MJpegDecodeContext *s, uint8_t *buf, int len)
  88. {
  89. s->buggy_avid = 1;
  90. if (len > 14 && buf[12] == 1) /* 1 - NTSC */
  91. s->interlace_polarity = 1;
  92. if (len > 14 && buf[12] == 2) /* 2 - PAL */
  93. s->interlace_polarity = 0;
  94. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  95. av_log(s->avctx, AV_LOG_INFO, "AVID: len:%d %d\n", len, len > 14 ? buf[12] : -1);
  96. }
  97. static void init_idct(AVCodecContext *avctx)
  98. {
  99. MJpegDecodeContext *s = avctx->priv_data;
  100. ff_idctdsp_init(&s->idsp, avctx);
  101. ff_init_scantable(s->idsp.idct_permutation, &s->scantable,
  102. ff_zigzag_direct);
  103. }
  104. av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
  105. {
  106. MJpegDecodeContext *s = avctx->priv_data;
  107. int ret;
  108. if (!s->picture_ptr) {
  109. s->picture = av_frame_alloc();
  110. if (!s->picture)
  111. return AVERROR(ENOMEM);
  112. s->picture_ptr = s->picture;
  113. }
  114. s->avctx = avctx;
  115. ff_blockdsp_init(&s->bdsp, avctx);
  116. ff_hpeldsp_init(&s->hdsp, avctx->flags);
  117. init_idct(avctx);
  118. s->buffer_size = 0;
  119. s->buffer = NULL;
  120. s->start_code = -1;
  121. s->first_picture = 1;
  122. s->got_picture = 0;
  123. s->org_height = avctx->coded_height;
  124. avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
  125. avctx->colorspace = AVCOL_SPC_BT470BG;
  126. if ((ret = build_basic_mjpeg_vlc(s)) < 0)
  127. return ret;
  128. if (s->extern_huff) {
  129. av_log(avctx, AV_LOG_INFO, "using external huffman table\n");
  130. if ((ret = init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size * 8)) < 0)
  131. return ret;
  132. if (ff_mjpeg_decode_dht(s)) {
  133. av_log(avctx, AV_LOG_ERROR,
  134. "error using external huffman table, switching back to internal\n");
  135. build_basic_mjpeg_vlc(s);
  136. }
  137. }
  138. if (avctx->field_order == AV_FIELD_BB) { /* quicktime icefloe 019 */
  139. s->interlace_polarity = 1; /* bottom field first */
  140. av_log(avctx, AV_LOG_DEBUG, "bottom field first\n");
  141. } else if (avctx->field_order == AV_FIELD_UNKNOWN) {
  142. if (avctx->codec_tag == AV_RL32("MJPG"))
  143. s->interlace_polarity = 1;
  144. }
  145. if ( avctx->extradata_size > 8
  146. && AV_RL32(avctx->extradata) == 0x2C
  147. && AV_RL32(avctx->extradata+4) == 0x18) {
  148. parse_avid(s, avctx->extradata, avctx->extradata_size);
  149. }
  150. if (avctx->codec->id == AV_CODEC_ID_AMV)
  151. s->flipped = 1;
  152. return 0;
  153. }
  154. /* quantize tables */
  155. int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
  156. {
  157. int len, index, i;
  158. len = get_bits(&s->gb, 16) - 2;
  159. if (8*len > get_bits_left(&s->gb)) {
  160. av_log(s->avctx, AV_LOG_ERROR, "dqt: len %d is too large\n", len);
  161. return AVERROR_INVALIDDATA;
  162. }
  163. while (len >= 65) {
  164. int pr = get_bits(&s->gb, 4);
  165. if (pr > 1) {
  166. av_log(s->avctx, AV_LOG_ERROR, "dqt: invalid precision\n");
  167. return AVERROR_INVALIDDATA;
  168. }
  169. index = get_bits(&s->gb, 4);
  170. if (index >= 4)
  171. return -1;
  172. av_log(s->avctx, AV_LOG_DEBUG, "index=%d\n", index);
  173. /* read quant table */
  174. for (i = 0; i < 64; i++) {
  175. s->quant_matrixes[index][i] = get_bits(&s->gb, pr ? 16 : 8);
  176. if (s->quant_matrixes[index][i] == 0) {
  177. av_log(s->avctx, AV_LOG_ERROR, "dqt: 0 quant value\n");
  178. return AVERROR_INVALIDDATA;
  179. }
  180. }
  181. // XXX FIXME fine-tune, and perhaps add dc too
  182. s->qscale[index] = FFMAX(s->quant_matrixes[index][1],
  183. s->quant_matrixes[index][8]) >> 1;
  184. av_log(s->avctx, AV_LOG_DEBUG, "qscale[%d]: %d\n",
  185. index, s->qscale[index]);
  186. len -= 1 + 64 * (1+pr);
  187. }
  188. return 0;
  189. }
  190. /* decode huffman tables and build VLC decoders */
  191. int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
  192. {
  193. int len, index, i, class, n, v, code_max;
  194. uint8_t bits_table[17];
  195. uint8_t val_table[256];
  196. int ret = 0;
  197. len = get_bits(&s->gb, 16) - 2;
  198. if (8*len > get_bits_left(&s->gb)) {
  199. av_log(s->avctx, AV_LOG_ERROR, "dht: len %d is too large\n", len);
  200. return AVERROR_INVALIDDATA;
  201. }
  202. while (len > 0) {
  203. if (len < 17)
  204. return AVERROR_INVALIDDATA;
  205. class = get_bits(&s->gb, 4);
  206. if (class >= 2)
  207. return AVERROR_INVALIDDATA;
  208. index = get_bits(&s->gb, 4);
  209. if (index >= 4)
  210. return AVERROR_INVALIDDATA;
  211. n = 0;
  212. for (i = 1; i <= 16; i++) {
  213. bits_table[i] = get_bits(&s->gb, 8);
  214. n += bits_table[i];
  215. }
  216. len -= 17;
  217. if (len < n || n > 256)
  218. return AVERROR_INVALIDDATA;
  219. code_max = 0;
  220. for (i = 0; i < n; i++) {
  221. v = get_bits(&s->gb, 8);
  222. if (v > code_max)
  223. code_max = v;
  224. val_table[i] = v;
  225. }
  226. len -= n;
  227. /* build VLC and flush previous vlc if present */
  228. ff_free_vlc(&s->vlcs[class][index]);
  229. av_log(s->avctx, AV_LOG_DEBUG, "class=%d index=%d nb_codes=%d\n",
  230. class, index, code_max + 1);
  231. if ((ret = build_vlc(&s->vlcs[class][index], bits_table, val_table,
  232. code_max + 1, 0, class > 0)) < 0)
  233. return ret;
  234. if (class > 0) {
  235. ff_free_vlc(&s->vlcs[2][index]);
  236. if ((ret = build_vlc(&s->vlcs[2][index], bits_table, val_table,
  237. code_max + 1, 0, 0)) < 0)
  238. return ret;
  239. }
  240. }
  241. return 0;
  242. }
  243. int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
  244. {
  245. int len, nb_components, i, width, height, bits, ret;
  246. unsigned pix_fmt_id;
  247. int h_count[MAX_COMPONENTS] = { 0 };
  248. int v_count[MAX_COMPONENTS] = { 0 };
  249. s->cur_scan = 0;
  250. memset(s->upscale_h, 0, sizeof(s->upscale_h));
  251. memset(s->upscale_v, 0, sizeof(s->upscale_v));
  252. /* XXX: verify len field validity */
  253. len = get_bits(&s->gb, 16);
  254. bits = get_bits(&s->gb, 8);
  255. if (bits > 16 || bits < 1) {
  256. av_log(s->avctx, AV_LOG_ERROR, "bits %d is invalid\n", bits);
  257. return AVERROR_INVALIDDATA;
  258. }
  259. if (s->avctx->bits_per_raw_sample != bits) {
  260. av_log(s->avctx, s->avctx->bits_per_raw_sample > 0 ? AV_LOG_INFO : AV_LOG_DEBUG, "Changing bps from %d to %d\n", s->avctx->bits_per_raw_sample, bits);
  261. s->avctx->bits_per_raw_sample = bits;
  262. init_idct(s->avctx);
  263. }
  264. if (s->pegasus_rct)
  265. bits = 9;
  266. if (bits == 9 && !s->pegasus_rct)
  267. s->rct = 1; // FIXME ugly
  268. if(s->lossless && s->avctx->lowres){
  269. av_log(s->avctx, AV_LOG_ERROR, "lowres is not possible with lossless jpeg\n");
  270. return -1;
  271. }
  272. height = get_bits(&s->gb, 16);
  273. width = get_bits(&s->gb, 16);
  274. // HACK for odd_height.mov
  275. if (s->interlaced && s->width == width && s->height == height + 1)
  276. height= s->height;
  277. av_log(s->avctx, AV_LOG_DEBUG, "sof0: picture: %dx%d\n", width, height);
  278. if (av_image_check_size(width, height, 0, s->avctx) < 0)
  279. return AVERROR_INVALIDDATA;
  280. nb_components = get_bits(&s->gb, 8);
  281. if (nb_components <= 0 ||
  282. nb_components > MAX_COMPONENTS)
  283. return -1;
  284. if (s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
  285. if (nb_components != s->nb_components) {
  286. av_log(s->avctx, AV_LOG_ERROR,
  287. "nb_components changing in interlaced picture\n");
  288. return AVERROR_INVALIDDATA;
  289. }
  290. }
  291. if (s->ls && !(bits <= 8 || nb_components == 1)) {
  292. avpriv_report_missing_feature(s->avctx,
  293. "JPEG-LS that is not <= 8 "
  294. "bits/component or 16-bit gray");
  295. return AVERROR_PATCHWELCOME;
  296. }
  297. s->nb_components = nb_components;
  298. s->h_max = 1;
  299. s->v_max = 1;
  300. for (i = 0; i < nb_components; i++) {
  301. /* component id */
  302. s->component_id[i] = get_bits(&s->gb, 8) - 1;
  303. h_count[i] = get_bits(&s->gb, 4);
  304. v_count[i] = get_bits(&s->gb, 4);
  305. /* compute hmax and vmax (only used in interleaved case) */
  306. if (h_count[i] > s->h_max)
  307. s->h_max = h_count[i];
  308. if (v_count[i] > s->v_max)
  309. s->v_max = v_count[i];
  310. s->quant_index[i] = get_bits(&s->gb, 8);
  311. if (s->quant_index[i] >= 4) {
  312. av_log(s->avctx, AV_LOG_ERROR, "quant_index is invalid\n");
  313. return AVERROR_INVALIDDATA;
  314. }
  315. if (!h_count[i] || !v_count[i]) {
  316. av_log(s->avctx, AV_LOG_ERROR,
  317. "Invalid sampling factor in component %d %d:%d\n",
  318. i, h_count[i], v_count[i]);
  319. return AVERROR_INVALIDDATA;
  320. }
  321. av_log(s->avctx, AV_LOG_DEBUG, "component %d %d:%d id: %d quant:%d\n",
  322. i, h_count[i], v_count[i],
  323. s->component_id[i], s->quant_index[i]);
  324. }
  325. if ( nb_components == 4
  326. && s->component_id[0] == 'C' - 1
  327. && s->component_id[1] == 'M' - 1
  328. && s->component_id[2] == 'Y' - 1
  329. && s->component_id[3] == 'K' - 1)
  330. s->adobe_transform = 0;
  331. if (s->ls && (s->h_max > 1 || s->v_max > 1)) {
  332. avpriv_report_missing_feature(s->avctx, "Subsampling in JPEG-LS");
  333. return AVERROR_PATCHWELCOME;
  334. }
  335. /* if different size, realloc/alloc picture */
  336. if (width != s->width || height != s->height || bits != s->bits ||
  337. memcmp(s->h_count, h_count, sizeof(h_count)) ||
  338. memcmp(s->v_count, v_count, sizeof(v_count))) {
  339. s->width = width;
  340. s->height = height;
  341. s->bits = bits;
  342. memcpy(s->h_count, h_count, sizeof(h_count));
  343. memcpy(s->v_count, v_count, sizeof(v_count));
  344. s->interlaced = 0;
  345. s->got_picture = 0;
  346. /* test interlaced mode */
  347. if (s->first_picture &&
  348. (s->multiscope != 2 || s->avctx->time_base.den >= 25 * s->avctx->time_base.num) &&
  349. s->org_height != 0 &&
  350. s->height < ((s->org_height * 3) / 4)) {
  351. s->interlaced = 1;
  352. s->bottom_field = s->interlace_polarity;
  353. s->picture_ptr->interlaced_frame = 1;
  354. s->picture_ptr->top_field_first = !s->interlace_polarity;
  355. height *= 2;
  356. }
  357. ret = ff_set_dimensions(s->avctx, width, height);
  358. if (ret < 0)
  359. return ret;
  360. s->first_picture = 0;
  361. }
  362. if (s->got_picture && s->interlaced && (s->bottom_field == !s->interlace_polarity)) {
  363. if (s->progressive) {
  364. avpriv_request_sample(s->avctx, "progressively coded interlaced picture");
  365. return AVERROR_INVALIDDATA;
  366. }
  367. } else{
  368. if (s->v_max == 1 && s->h_max == 1 && s->lossless==1 && (nb_components==3 || nb_components==4))
  369. s->rgb = 1;
  370. else if (!s->lossless)
  371. s->rgb = 0;
  372. /* XXX: not complete test ! */
  373. pix_fmt_id = ((unsigned)s->h_count[0] << 28) | (s->v_count[0] << 24) |
  374. (s->h_count[1] << 20) | (s->v_count[1] << 16) |
  375. (s->h_count[2] << 12) | (s->v_count[2] << 8) |
  376. (s->h_count[3] << 4) | s->v_count[3];
  377. av_log(s->avctx, AV_LOG_DEBUG, "pix fmt id %x\n", pix_fmt_id);
  378. /* NOTE we do not allocate pictures large enough for the possible
  379. * padding of h/v_count being 4 */
  380. if (!(pix_fmt_id & 0xD0D0D0D0))
  381. pix_fmt_id -= (pix_fmt_id & 0xF0F0F0F0) >> 1;
  382. if (!(pix_fmt_id & 0x0D0D0D0D))
  383. pix_fmt_id -= (pix_fmt_id & 0x0F0F0F0F) >> 1;
  384. for (i = 0; i < 8; i++) {
  385. int j = 6 + (i&1) - (i&6);
  386. int is = (pix_fmt_id >> (4*i)) & 0xF;
  387. int js = (pix_fmt_id >> (4*j)) & 0xF;
  388. if (is == 1 && js != 2 && (i < 2 || i > 5))
  389. js = (pix_fmt_id >> ( 8 + 4*(i&1))) & 0xF;
  390. if (is == 1 && js != 2 && (i < 2 || i > 5))
  391. js = (pix_fmt_id >> (16 + 4*(i&1))) & 0xF;
  392. if (is == 1 && js == 2) {
  393. if (i & 1) s->upscale_h[j/2] = 1;
  394. else s->upscale_v[j/2] = 1;
  395. }
  396. }
  397. switch (pix_fmt_id) {
  398. case 0x11111100:
  399. if (s->rgb)
  400. s->avctx->pix_fmt = s->bits <= 9 ? AV_PIX_FMT_BGR24 : AV_PIX_FMT_BGR48;
  401. else {
  402. if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
  403. s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_GBRP : AV_PIX_FMT_GBRP16;
  404. } else {
  405. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
  406. else s->avctx->pix_fmt = AV_PIX_FMT_YUV444P16;
  407. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  408. }
  409. }
  410. av_assert0(s->nb_components == 3);
  411. break;
  412. case 0x11111111:
  413. if (s->rgb)
  414. s->avctx->pix_fmt = s->bits <= 9 ? AV_PIX_FMT_ABGR : AV_PIX_FMT_RGBA64;
  415. else {
  416. if (s->adobe_transform == 0 && s->bits <= 8) {
  417. s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
  418. } else {
  419. s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_YUVA444P : AV_PIX_FMT_YUVA444P16;
  420. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  421. }
  422. }
  423. av_assert0(s->nb_components == 4);
  424. break;
  425. case 0x22111122:
  426. case 0x22111111:
  427. if (s->adobe_transform == 0 && s->bits <= 8) {
  428. s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
  429. s->upscale_v[1] = s->upscale_v[2] = 1;
  430. s->upscale_h[1] = s->upscale_h[2] = 1;
  431. } else if (s->adobe_transform == 2 && s->bits <= 8) {
  432. s->avctx->pix_fmt = AV_PIX_FMT_YUVA444P;
  433. s->upscale_v[1] = s->upscale_v[2] = 1;
  434. s->upscale_h[1] = s->upscale_h[2] = 1;
  435. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  436. } else {
  437. if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUVA420P;
  438. else s->avctx->pix_fmt = AV_PIX_FMT_YUVA420P16;
  439. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  440. }
  441. av_assert0(s->nb_components == 4);
  442. break;
  443. case 0x12121100:
  444. case 0x22122100:
  445. case 0x21211100:
  446. case 0x22211200:
  447. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
  448. else
  449. goto unk_pixfmt;
  450. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  451. break;
  452. case 0x22221100:
  453. case 0x22112200:
  454. case 0x11222200:
  455. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
  456. else
  457. goto unk_pixfmt;
  458. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  459. break;
  460. case 0x11000000:
  461. case 0x13000000:
  462. case 0x14000000:
  463. case 0x31000000:
  464. case 0x33000000:
  465. case 0x34000000:
  466. case 0x41000000:
  467. case 0x43000000:
  468. case 0x44000000:
  469. if(s->bits <= 8)
  470. s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
  471. else
  472. s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
  473. break;
  474. case 0x12111100:
  475. case 0x14121200:
  476. case 0x14111100:
  477. case 0x22211100:
  478. case 0x22112100:
  479. if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
  480. if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
  481. else
  482. goto unk_pixfmt;
  483. s->upscale_v[0] = s->upscale_v[1] = 1;
  484. } else {
  485. if (pix_fmt_id == 0x14111100)
  486. s->upscale_v[1] = s->upscale_v[2] = 1;
  487. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV440P : AV_PIX_FMT_YUVJ440P;
  488. else
  489. goto unk_pixfmt;
  490. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  491. }
  492. break;
  493. case 0x21111100:
  494. if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
  495. if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
  496. else
  497. goto unk_pixfmt;
  498. s->upscale_h[0] = s->upscale_h[1] = 1;
  499. } else {
  500. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
  501. else s->avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
  502. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  503. }
  504. break;
  505. case 0x31111100:
  506. if (s->bits > 8)
  507. goto unk_pixfmt;
  508. s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
  509. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  510. s->upscale_h[1] = s->upscale_h[2] = 2;
  511. break;
  512. case 0x22121100:
  513. case 0x22111200:
  514. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
  515. else
  516. goto unk_pixfmt;
  517. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  518. break;
  519. case 0x22111100:
  520. case 0x42111100:
  521. case 0x24111100:
  522. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUVJ420P;
  523. else s->avctx->pix_fmt = AV_PIX_FMT_YUV420P16;
  524. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  525. if (pix_fmt_id == 0x42111100) {
  526. if (s->bits > 8)
  527. goto unk_pixfmt;
  528. s->upscale_h[1] = s->upscale_h[2] = 1;
  529. } else if (pix_fmt_id == 0x24111100) {
  530. if (s->bits > 8)
  531. goto unk_pixfmt;
  532. s->upscale_v[1] = s->upscale_v[2] = 1;
  533. }
  534. break;
  535. case 0x41111100:
  536. if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV411P : AV_PIX_FMT_YUVJ411P;
  537. else
  538. goto unk_pixfmt;
  539. s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
  540. break;
  541. default:
  542. unk_pixfmt:
  543. avpriv_report_missing_feature(s->avctx, "Pixel format 0x%x bits:%d", pix_fmt_id, s->bits);
  544. memset(s->upscale_h, 0, sizeof(s->upscale_h));
  545. memset(s->upscale_v, 0, sizeof(s->upscale_v));
  546. return AVERROR_PATCHWELCOME;
  547. }
  548. if ((AV_RB32(s->upscale_h) || AV_RB32(s->upscale_v)) && s->avctx->lowres) {
  549. avpriv_report_missing_feature(s->avctx, "Lowres for weird subsampling");
  550. return AVERROR_PATCHWELCOME;
  551. }
  552. if (s->ls) {
  553. memset(s->upscale_h, 0, sizeof(s->upscale_h));
  554. memset(s->upscale_v, 0, sizeof(s->upscale_v));
  555. if (s->nb_components == 3) {
  556. s->avctx->pix_fmt = AV_PIX_FMT_RGB24;
  557. } else if (s->nb_components != 1) {
  558. av_log(s->avctx, AV_LOG_ERROR, "Unsupported number of components %d\n", s->nb_components);
  559. return AVERROR_PATCHWELCOME;
  560. } else if (s->palette_index && s->bits <= 8)
  561. s->avctx->pix_fmt = AV_PIX_FMT_PAL8;
  562. else if (s->bits <= 8)
  563. s->avctx->pix_fmt = AV_PIX_FMT_GRAY8;
  564. else
  565. s->avctx->pix_fmt = AV_PIX_FMT_GRAY16;
  566. }
  567. s->pix_desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
  568. if (!s->pix_desc) {
  569. av_log(s->avctx, AV_LOG_ERROR, "Could not get a pixel format descriptor.\n");
  570. return AVERROR_BUG;
  571. }
  572. if (s->avctx->skip_frame == AVDISCARD_ALL) {
  573. s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
  574. s->picture_ptr->key_frame = 1;
  575. s->got_picture = 1;
  576. return 0;
  577. }
  578. av_frame_unref(s->picture_ptr);
  579. if (ff_get_buffer(s->avctx, s->picture_ptr, AV_GET_BUFFER_FLAG_REF) < 0)
  580. return -1;
  581. s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
  582. s->picture_ptr->key_frame = 1;
  583. s->got_picture = 1;
  584. for (i = 0; i < 4; i++)
  585. s->linesize[i] = s->picture_ptr->linesize[i] << s->interlaced;
  586. ff_dlog(s->avctx, "%d %d %d %d %d %d\n",
  587. s->width, s->height, s->linesize[0], s->linesize[1],
  588. s->interlaced, s->avctx->height);
  589. if (len != (8 + (3 * nb_components)))
  590. av_log(s->avctx, AV_LOG_DEBUG, "decode_sof0: error, len(%d) mismatch\n", len);
  591. }
  592. if ((s->rgb && !s->lossless && !s->ls) ||
  593. (!s->rgb && s->ls && s->nb_components > 1)) {
  594. av_log(s->avctx, AV_LOG_ERROR, "Unsupported coding and pixel format combination\n");
  595. return AVERROR_PATCHWELCOME;
  596. }
  597. /* totally blank picture as progressive JPEG will only add details to it */
  598. if (s->progressive) {
  599. int bw = (width + s->h_max * 8 - 1) / (s->h_max * 8);
  600. int bh = (height + s->v_max * 8 - 1) / (s->v_max * 8);
  601. for (i = 0; i < s->nb_components; i++) {
  602. int size = bw * bh * s->h_count[i] * s->v_count[i];
  603. av_freep(&s->blocks[i]);
  604. av_freep(&s->last_nnz[i]);
  605. s->blocks[i] = av_mallocz_array(size, sizeof(**s->blocks));
  606. s->last_nnz[i] = av_mallocz_array(size, sizeof(**s->last_nnz));
  607. if (!s->blocks[i] || !s->last_nnz[i])
  608. return AVERROR(ENOMEM);
  609. s->block_stride[i] = bw * s->h_count[i];
  610. }
  611. memset(s->coefs_finished, 0, sizeof(s->coefs_finished));
  612. }
  613. return 0;
  614. }
  615. static inline int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
  616. {
  617. int code;
  618. code = get_vlc2(&s->gb, s->vlcs[0][dc_index].table, 9, 2);
  619. if (code < 0 || code > 16) {
  620. av_log(s->avctx, AV_LOG_WARNING,
  621. "mjpeg_decode_dc: bad vlc: %d:%d (%p)\n",
  622. 0, dc_index, &s->vlcs[0][dc_index]);
  623. return 0xfffff;
  624. }
  625. if (code)
  626. return get_xbits(&s->gb, code);
  627. else
  628. return 0;
  629. }
  630. /* decode block and dequantize */
  631. static int decode_block(MJpegDecodeContext *s, int16_t *block, int component,
  632. int dc_index, int ac_index, uint16_t *quant_matrix)
  633. {
  634. int code, i, j, level, val;
  635. /* DC coef */
  636. val = mjpeg_decode_dc(s, dc_index);
  637. if (val == 0xfffff) {
  638. av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
  639. return AVERROR_INVALIDDATA;
  640. }
  641. val = val * quant_matrix[0] + s->last_dc[component];
  642. val = FFMIN(val, 32767);
  643. s->last_dc[component] = val;
  644. block[0] = val;
  645. /* AC coefs */
  646. i = 0;
  647. {OPEN_READER(re, &s->gb);
  648. do {
  649. UPDATE_CACHE(re, &s->gb);
  650. GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2);
  651. i += ((unsigned)code) >> 4;
  652. code &= 0xf;
  653. if (code) {
  654. if (code > MIN_CACHE_BITS - 16)
  655. UPDATE_CACHE(re, &s->gb);
  656. {
  657. int cache = GET_CACHE(re, &s->gb);
  658. int sign = (~cache) >> 31;
  659. level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
  660. }
  661. LAST_SKIP_BITS(re, &s->gb, code);
  662. if (i > 63) {
  663. av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
  664. return AVERROR_INVALIDDATA;
  665. }
  666. j = s->scantable.permutated[i];
  667. block[j] = level * quant_matrix[i];
  668. }
  669. } while (i < 63);
  670. CLOSE_READER(re, &s->gb);}
  671. return 0;
  672. }
  673. static int decode_dc_progressive(MJpegDecodeContext *s, int16_t *block,
  674. int component, int dc_index,
  675. uint16_t *quant_matrix, int Al)
  676. {
  677. int val;
  678. s->bdsp.clear_block(block);
  679. val = mjpeg_decode_dc(s, dc_index);
  680. if (val == 0xfffff) {
  681. av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
  682. return AVERROR_INVALIDDATA;
  683. }
  684. val = (val * (quant_matrix[0] << Al)) + s->last_dc[component];
  685. s->last_dc[component] = val;
  686. block[0] = val;
  687. return 0;
  688. }
  689. /* decode block and dequantize - progressive JPEG version */
  690. static int decode_block_progressive(MJpegDecodeContext *s, int16_t *block,
  691. uint8_t *last_nnz, int ac_index,
  692. uint16_t *quant_matrix,
  693. int ss, int se, int Al, int *EOBRUN)
  694. {
  695. int code, i, j, val, run;
  696. unsigned level;
  697. if (*EOBRUN) {
  698. (*EOBRUN)--;
  699. return 0;
  700. }
  701. {
  702. OPEN_READER(re, &s->gb);
  703. for (i = ss; ; i++) {
  704. UPDATE_CACHE(re, &s->gb);
  705. GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
  706. run = ((unsigned) code) >> 4;
  707. code &= 0xF;
  708. if (code) {
  709. i += run;
  710. if (code > MIN_CACHE_BITS - 16)
  711. UPDATE_CACHE(re, &s->gb);
  712. {
  713. int cache = GET_CACHE(re, &s->gb);
  714. int sign = (~cache) >> 31;
  715. level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
  716. }
  717. LAST_SKIP_BITS(re, &s->gb, code);
  718. if (i >= se) {
  719. if (i == se) {
  720. j = s->scantable.permutated[se];
  721. block[j] = level * (quant_matrix[se] << Al);
  722. break;
  723. }
  724. av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
  725. return AVERROR_INVALIDDATA;
  726. }
  727. j = s->scantable.permutated[i];
  728. block[j] = level * (quant_matrix[i] << Al);
  729. } else {
  730. if (run == 0xF) {// ZRL - skip 15 coefficients
  731. i += 15;
  732. if (i >= se) {
  733. av_log(s->avctx, AV_LOG_ERROR, "ZRL overflow: %d\n", i);
  734. return AVERROR_INVALIDDATA;
  735. }
  736. } else {
  737. val = (1 << run);
  738. if (run) {
  739. UPDATE_CACHE(re, &s->gb);
  740. val += NEG_USR32(GET_CACHE(re, &s->gb), run);
  741. LAST_SKIP_BITS(re, &s->gb, run);
  742. }
  743. *EOBRUN = val - 1;
  744. break;
  745. }
  746. }
  747. }
  748. CLOSE_READER(re, &s->gb);
  749. }
  750. if (i > *last_nnz)
  751. *last_nnz = i;
  752. return 0;
  753. }
  754. #define REFINE_BIT(j) { \
  755. UPDATE_CACHE(re, &s->gb); \
  756. sign = block[j] >> 15; \
  757. block[j] += SHOW_UBITS(re, &s->gb, 1) * \
  758. ((quant_matrix[i] ^ sign) - sign) << Al; \
  759. LAST_SKIP_BITS(re, &s->gb, 1); \
  760. }
  761. #define ZERO_RUN \
  762. for (; ; i++) { \
  763. if (i > last) { \
  764. i += run; \
  765. if (i > se) { \
  766. av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); \
  767. return -1; \
  768. } \
  769. break; \
  770. } \
  771. j = s->scantable.permutated[i]; \
  772. if (block[j]) \
  773. REFINE_BIT(j) \
  774. else if (run-- == 0) \
  775. break; \
  776. }
  777. /* decode block and dequantize - progressive JPEG refinement pass */
  778. static int decode_block_refinement(MJpegDecodeContext *s, int16_t *block,
  779. uint8_t *last_nnz,
  780. int ac_index, uint16_t *quant_matrix,
  781. int ss, int se, int Al, int *EOBRUN)
  782. {
  783. int code, i = ss, j, sign, val, run;
  784. int last = FFMIN(se, *last_nnz);
  785. OPEN_READER(re, &s->gb);
  786. if (*EOBRUN) {
  787. (*EOBRUN)--;
  788. } else {
  789. for (; ; i++) {
  790. UPDATE_CACHE(re, &s->gb);
  791. GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
  792. if (code & 0xF) {
  793. run = ((unsigned) code) >> 4;
  794. UPDATE_CACHE(re, &s->gb);
  795. val = SHOW_UBITS(re, &s->gb, 1);
  796. LAST_SKIP_BITS(re, &s->gb, 1);
  797. ZERO_RUN;
  798. j = s->scantable.permutated[i];
  799. val--;
  800. block[j] = ((quant_matrix[i] << Al) ^ val) - val;
  801. if (i == se) {
  802. if (i > *last_nnz)
  803. *last_nnz = i;
  804. CLOSE_READER(re, &s->gb);
  805. return 0;
  806. }
  807. } else {
  808. run = ((unsigned) code) >> 4;
  809. if (run == 0xF) {
  810. ZERO_RUN;
  811. } else {
  812. val = run;
  813. run = (1 << run);
  814. if (val) {
  815. UPDATE_CACHE(re, &s->gb);
  816. run += SHOW_UBITS(re, &s->gb, val);
  817. LAST_SKIP_BITS(re, &s->gb, val);
  818. }
  819. *EOBRUN = run - 1;
  820. break;
  821. }
  822. }
  823. }
  824. if (i > *last_nnz)
  825. *last_nnz = i;
  826. }
  827. for (; i <= last; i++) {
  828. j = s->scantable.permutated[i];
  829. if (block[j])
  830. REFINE_BIT(j)
  831. }
  832. CLOSE_READER(re, &s->gb);
  833. return 0;
  834. }
  835. #undef REFINE_BIT
  836. #undef ZERO_RUN
  837. static int handle_rstn(MJpegDecodeContext *s, int nb_components)
  838. {
  839. int i;
  840. int reset = 0;
  841. if (s->restart_interval) {
  842. s->restart_count--;
  843. if(s->restart_count == 0 && s->avctx->codec_id == AV_CODEC_ID_THP){
  844. align_get_bits(&s->gb);
  845. for (i = 0; i < nb_components; i++) /* reset dc */
  846. s->last_dc[i] = (4 << s->bits);
  847. }
  848. i = 8 + ((-get_bits_count(&s->gb)) & 7);
  849. /* skip RSTn */
  850. if (s->restart_count == 0) {
  851. if( show_bits(&s->gb, i) == (1 << i) - 1
  852. || show_bits(&s->gb, i) == 0xFF) {
  853. int pos = get_bits_count(&s->gb);
  854. align_get_bits(&s->gb);
  855. while (get_bits_left(&s->gb) >= 8 && show_bits(&s->gb, 8) == 0xFF)
  856. skip_bits(&s->gb, 8);
  857. if (get_bits_left(&s->gb) >= 8 && (get_bits(&s->gb, 8) & 0xF8) == 0xD0) {
  858. for (i = 0; i < nb_components; i++) /* reset dc */
  859. s->last_dc[i] = (4 << s->bits);
  860. reset = 1;
  861. } else
  862. skip_bits_long(&s->gb, pos - get_bits_count(&s->gb));
  863. }
  864. }
  865. }
  866. return reset;
  867. }
  868. static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int nb_components, int predictor, int point_transform)
  869. {
  870. int i, mb_x, mb_y;
  871. uint16_t (*buffer)[4];
  872. int left[4], top[4], topleft[4];
  873. const int linesize = s->linesize[0];
  874. const int mask = ((1 << s->bits) - 1) << point_transform;
  875. int resync_mb_y = 0;
  876. int resync_mb_x = 0;
  877. if (s->nb_components != 3 && s->nb_components != 4)
  878. return AVERROR_INVALIDDATA;
  879. if (s->v_max != 1 || s->h_max != 1 || !s->lossless)
  880. return AVERROR_INVALIDDATA;
  881. s->restart_count = s->restart_interval;
  882. av_fast_malloc(&s->ljpeg_buffer, &s->ljpeg_buffer_size,
  883. (unsigned)s->mb_width * 4 * sizeof(s->ljpeg_buffer[0][0]));
  884. if (!s->ljpeg_buffer)
  885. return AVERROR(ENOMEM);
  886. buffer = s->ljpeg_buffer;
  887. for (i = 0; i < 4; i++)
  888. buffer[0][i] = 1 << (s->bits - 1);
  889. for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
  890. uint8_t *ptr = s->picture_ptr->data[0] + (linesize * mb_y);
  891. if (s->interlaced && s->bottom_field)
  892. ptr += linesize >> 1;
  893. for (i = 0; i < 4; i++)
  894. top[i] = left[i] = topleft[i] = buffer[0][i];
  895. for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
  896. int modified_predictor = predictor;
  897. if (s->restart_interval && !s->restart_count){
  898. s->restart_count = s->restart_interval;
  899. resync_mb_x = mb_x;
  900. resync_mb_y = mb_y;
  901. for(i=0; i<4; i++)
  902. top[i] = left[i]= topleft[i]= 1 << (s->bits - 1);
  903. }
  904. if (mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || !mb_x)
  905. modified_predictor = 1;
  906. for (i=0;i<nb_components;i++) {
  907. int pred, dc;
  908. topleft[i] = top[i];
  909. top[i] = buffer[mb_x][i];
  910. PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
  911. dc = mjpeg_decode_dc(s, s->dc_index[i]);
  912. if(dc == 0xFFFFF)
  913. return -1;
  914. left[i] = buffer[mb_x][i] =
  915. mask & (pred + (dc * (1 << point_transform)));
  916. }
  917. if (s->restart_interval && !--s->restart_count) {
  918. align_get_bits(&s->gb);
  919. skip_bits(&s->gb, 16); /* skip RSTn */
  920. }
  921. }
  922. if (s->rct && s->nb_components == 4) {
  923. for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
  924. ptr[4*mb_x + 2] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2);
  925. ptr[4*mb_x + 1] = buffer[mb_x][1] + ptr[4*mb_x + 2];
  926. ptr[4*mb_x + 3] = buffer[mb_x][2] + ptr[4*mb_x + 2];
  927. ptr[4*mb_x + 0] = buffer[mb_x][3];
  928. }
  929. } else if (s->nb_components == 4) {
  930. for(i=0; i<nb_components; i++) {
  931. int c= s->comp_index[i];
  932. if (s->bits <= 8) {
  933. for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
  934. ptr[4*mb_x+3-c] = buffer[mb_x][i];
  935. }
  936. } else if(s->bits == 9) {
  937. return AVERROR_PATCHWELCOME;
  938. } else {
  939. for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
  940. ((uint16_t*)ptr)[4*mb_x+c] = buffer[mb_x][i];
  941. }
  942. }
  943. }
  944. } else if (s->rct) {
  945. for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
  946. ptr[3*mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200) >> 2);
  947. ptr[3*mb_x + 0] = buffer[mb_x][1] + ptr[3*mb_x + 1];
  948. ptr[3*mb_x + 2] = buffer[mb_x][2] + ptr[3*mb_x + 1];
  949. }
  950. } else if (s->pegasus_rct) {
  951. for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
  952. ptr[3*mb_x + 1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2]) >> 2);
  953. ptr[3*mb_x + 0] = buffer[mb_x][1] + ptr[3*mb_x + 1];
  954. ptr[3*mb_x + 2] = buffer[mb_x][2] + ptr[3*mb_x + 1];
  955. }
  956. } else {
  957. for(i=0; i<nb_components; i++) {
  958. int c= s->comp_index[i];
  959. if (s->bits <= 8) {
  960. for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
  961. ptr[3*mb_x+2-c] = buffer[mb_x][i];
  962. }
  963. } else if(s->bits == 9) {
  964. return AVERROR_PATCHWELCOME;
  965. } else {
  966. for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
  967. ((uint16_t*)ptr)[3*mb_x+2-c] = buffer[mb_x][i];
  968. }
  969. }
  970. }
  971. }
  972. }
  973. return 0;
  974. }
  975. static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
  976. int point_transform, int nb_components)
  977. {
  978. int i, mb_x, mb_y, mask;
  979. int bits= (s->bits+7)&~7;
  980. int resync_mb_y = 0;
  981. int resync_mb_x = 0;
  982. point_transform += bits - s->bits;
  983. mask = ((1 << s->bits) - 1) << point_transform;
  984. av_assert0(nb_components>=1 && nb_components<=4);
  985. for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
  986. for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
  987. if (get_bits_left(&s->gb) < 1) {
  988. av_log(s->avctx, AV_LOG_ERROR, "bitstream end in yuv_scan\n");
  989. return AVERROR_INVALIDDATA;
  990. }
  991. if (s->restart_interval && !s->restart_count){
  992. s->restart_count = s->restart_interval;
  993. resync_mb_x = mb_x;
  994. resync_mb_y = mb_y;
  995. }
  996. if(!mb_x || mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || s->interlaced){
  997. int toprow = mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x;
  998. int leftcol = !mb_x || mb_y == resync_mb_y && mb_x == resync_mb_x;
  999. for (i = 0; i < nb_components; i++) {
  1000. uint8_t *ptr;
  1001. uint16_t *ptr16;
  1002. int n, h, v, x, y, c, j, linesize;
  1003. n = s->nb_blocks[i];
  1004. c = s->comp_index[i];
  1005. h = s->h_scount[i];
  1006. v = s->v_scount[i];
  1007. x = 0;
  1008. y = 0;
  1009. linesize= s->linesize[c];
  1010. if(bits>8) linesize /= 2;
  1011. for(j=0; j<n; j++) {
  1012. int pred, dc;
  1013. dc = mjpeg_decode_dc(s, s->dc_index[i]);
  1014. if(dc == 0xFFFFF)
  1015. return -1;
  1016. if ( h * mb_x + x >= s->width
  1017. || v * mb_y + y >= s->height) {
  1018. // Nothing to do
  1019. } else if (bits<=8) {
  1020. ptr = s->picture_ptr->data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
  1021. if(y==0 && toprow){
  1022. if(x==0 && leftcol){
  1023. pred= 1 << (bits - 1);
  1024. }else{
  1025. pred= ptr[-1];
  1026. }
  1027. }else{
  1028. if(x==0 && leftcol){
  1029. pred= ptr[-linesize];
  1030. }else{
  1031. PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
  1032. }
  1033. }
  1034. if (s->interlaced && s->bottom_field)
  1035. ptr += linesize >> 1;
  1036. pred &= mask;
  1037. *ptr= pred + ((unsigned)dc << point_transform);
  1038. }else{
  1039. ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
  1040. if(y==0 && toprow){
  1041. if(x==0 && leftcol){
  1042. pred= 1 << (bits - 1);
  1043. }else{
  1044. pred= ptr16[-1];
  1045. }
  1046. }else{
  1047. if(x==0 && leftcol){
  1048. pred= ptr16[-linesize];
  1049. }else{
  1050. PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
  1051. }
  1052. }
  1053. if (s->interlaced && s->bottom_field)
  1054. ptr16 += linesize >> 1;
  1055. pred &= mask;
  1056. *ptr16= pred + ((unsigned)dc << point_transform);
  1057. }
  1058. if (++x == h) {
  1059. x = 0;
  1060. y++;
  1061. }
  1062. }
  1063. }
  1064. } else {
  1065. for (i = 0; i < nb_components; i++) {
  1066. uint8_t *ptr;
  1067. uint16_t *ptr16;
  1068. int n, h, v, x, y, c, j, linesize, dc;
  1069. n = s->nb_blocks[i];
  1070. c = s->comp_index[i];
  1071. h = s->h_scount[i];
  1072. v = s->v_scount[i];
  1073. x = 0;
  1074. y = 0;
  1075. linesize = s->linesize[c];
  1076. if(bits>8) linesize /= 2;
  1077. for (j = 0; j < n; j++) {
  1078. int pred;
  1079. dc = mjpeg_decode_dc(s, s->dc_index[i]);
  1080. if(dc == 0xFFFFF)
  1081. return -1;
  1082. if ( h * mb_x + x >= s->width
  1083. || v * mb_y + y >= s->height) {
  1084. // Nothing to do
  1085. } else if (bits<=8) {
  1086. ptr = s->picture_ptr->data[c] +
  1087. (linesize * (v * mb_y + y)) +
  1088. (h * mb_x + x); //FIXME optimize this crap
  1089. PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
  1090. pred &= mask;
  1091. *ptr = pred + ((unsigned)dc << point_transform);
  1092. }else{
  1093. ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
  1094. PREDICT(pred, ptr16[-linesize-1], ptr16[-linesize], ptr16[-1], predictor);
  1095. pred &= mask;
  1096. *ptr16= pred + ((unsigned)dc << point_transform);
  1097. }
  1098. if (++x == h) {
  1099. x = 0;
  1100. y++;
  1101. }
  1102. }
  1103. }
  1104. }
  1105. if (s->restart_interval && !--s->restart_count) {
  1106. align_get_bits(&s->gb);
  1107. skip_bits(&s->gb, 16); /* skip RSTn */
  1108. }
  1109. }
  1110. }
  1111. return 0;
  1112. }
  1113. static av_always_inline void mjpeg_copy_block(MJpegDecodeContext *s,
  1114. uint8_t *dst, const uint8_t *src,
  1115. int linesize, int lowres)
  1116. {
  1117. switch (lowres) {
  1118. case 0: s->hdsp.put_pixels_tab[1][0](dst, src, linesize, 8);
  1119. break;
  1120. case 1: copy_block4(dst, src, linesize, linesize, 4);
  1121. break;
  1122. case 2: copy_block2(dst, src, linesize, linesize, 2);
  1123. break;
  1124. case 3: *dst = *src;
  1125. break;
  1126. }
  1127. }
  1128. static void shift_output(MJpegDecodeContext *s, uint8_t *ptr, int linesize)
  1129. {
  1130. int block_x, block_y;
  1131. int size = 8 >> s->avctx->lowres;
  1132. if (s->bits > 8) {
  1133. for (block_y=0; block_y<size; block_y++)
  1134. for (block_x=0; block_x<size; block_x++)
  1135. *(uint16_t*)(ptr + 2*block_x + block_y*linesize) <<= 16 - s->bits;
  1136. } else {
  1137. for (block_y=0; block_y<size; block_y++)
  1138. for (block_x=0; block_x<size; block_x++)
  1139. *(ptr + block_x + block_y*linesize) <<= 8 - s->bits;
  1140. }
  1141. }
  1142. static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
  1143. int Al, const uint8_t *mb_bitmask,
  1144. int mb_bitmask_size,
  1145. const AVFrame *reference)
  1146. {
  1147. int i, mb_x, mb_y, chroma_h_shift, chroma_v_shift, chroma_width, chroma_height;
  1148. uint8_t *data[MAX_COMPONENTS];
  1149. const uint8_t *reference_data[MAX_COMPONENTS];
  1150. int linesize[MAX_COMPONENTS];
  1151. GetBitContext mb_bitmask_gb = {0}; // initialize to silence gcc warning
  1152. int bytes_per_pixel = 1 + (s->bits > 8);
  1153. if (mb_bitmask) {
  1154. if (mb_bitmask_size != (s->mb_width * s->mb_height + 7)>>3) {
  1155. av_log(s->avctx, AV_LOG_ERROR, "mb_bitmask_size mismatches\n");
  1156. return AVERROR_INVALIDDATA;
  1157. }
  1158. init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width * s->mb_height);
  1159. }
  1160. s->restart_count = 0;
  1161. av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt, &chroma_h_shift,
  1162. &chroma_v_shift);
  1163. chroma_width = AV_CEIL_RSHIFT(s->width, chroma_h_shift);
  1164. chroma_height = AV_CEIL_RSHIFT(s->height, chroma_v_shift);
  1165. for (i = 0; i < nb_components; i++) {
  1166. int c = s->comp_index[i];
  1167. data[c] = s->picture_ptr->data[c];
  1168. reference_data[c] = reference ? reference->data[c] : NULL;
  1169. linesize[c] = s->linesize[c];
  1170. s->coefs_finished[c] |= 1;
  1171. }
  1172. for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
  1173. for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
  1174. const int copy_mb = mb_bitmask && !get_bits1(&mb_bitmask_gb);
  1175. if (s->restart_interval && !s->restart_count)
  1176. s->restart_count = s->restart_interval;
  1177. if (get_bits_left(&s->gb) < 0) {
  1178. av_log(s->avctx, AV_LOG_ERROR, "overread %d\n",
  1179. -get_bits_left(&s->gb));
  1180. return AVERROR_INVALIDDATA;
  1181. }
  1182. for (i = 0; i < nb_components; i++) {
  1183. uint8_t *ptr;
  1184. int n, h, v, x, y, c, j;
  1185. int block_offset;
  1186. n = s->nb_blocks[i];
  1187. c = s->comp_index[i];
  1188. h = s->h_scount[i];
  1189. v = s->v_scount[i];
  1190. x = 0;
  1191. y = 0;
  1192. for (j = 0; j < n; j++) {
  1193. block_offset = (((linesize[c] * (v * mb_y + y) * 8) +
  1194. (h * mb_x + x) * 8 * bytes_per_pixel) >> s->avctx->lowres);
  1195. if (s->interlaced && s->bottom_field)
  1196. block_offset += linesize[c] >> 1;
  1197. if ( 8*(h * mb_x + x) < ((c == 1) || (c == 2) ? chroma_width : s->width)
  1198. && 8*(v * mb_y + y) < ((c == 1) || (c == 2) ? chroma_height : s->height)) {
  1199. ptr = data[c] + block_offset;
  1200. } else
  1201. ptr = NULL;
  1202. if (!s->progressive) {
  1203. if (copy_mb) {
  1204. if (ptr)
  1205. mjpeg_copy_block(s, ptr, reference_data[c] + block_offset,
  1206. linesize[c], s->avctx->lowres);
  1207. } else {
  1208. s->bdsp.clear_block(s->block);
  1209. if (decode_block(s, s->block, i,
  1210. s->dc_index[i], s->ac_index[i],
  1211. s->quant_matrixes[s->quant_sindex[i]]) < 0) {
  1212. av_log(s->avctx, AV_LOG_ERROR,
  1213. "error y=%d x=%d\n", mb_y, mb_x);
  1214. return AVERROR_INVALIDDATA;
  1215. }
  1216. if (ptr) {
  1217. s->idsp.idct_put(ptr, linesize[c], s->block);
  1218. if (s->bits & 7)
  1219. shift_output(s, ptr, linesize[c]);
  1220. }
  1221. }
  1222. } else {
  1223. int block_idx = s->block_stride[c] * (v * mb_y + y) +
  1224. (h * mb_x + x);
  1225. int16_t *block = s->blocks[c][block_idx];
  1226. if (Ah)
  1227. block[0] += get_bits1(&s->gb) *
  1228. s->quant_matrixes[s->quant_sindex[i]][0] << Al;
  1229. else if (decode_dc_progressive(s, block, i, s->dc_index[i],
  1230. s->quant_matrixes[s->quant_sindex[i]],
  1231. Al) < 0) {
  1232. av_log(s->avctx, AV_LOG_ERROR,
  1233. "error y=%d x=%d\n", mb_y, mb_x);
  1234. return AVERROR_INVALIDDATA;
  1235. }
  1236. }
  1237. ff_dlog(s->avctx, "mb: %d %d processed\n", mb_y, mb_x);
  1238. ff_dlog(s->avctx, "%d %d %d %d %d %d %d %d \n",
  1239. mb_x, mb_y, x, y, c, s->bottom_field,
  1240. (v * mb_y + y) * 8, (h * mb_x + x) * 8);
  1241. if (++x == h) {
  1242. x = 0;
  1243. y++;
  1244. }
  1245. }
  1246. }
  1247. handle_rstn(s, nb_components);
  1248. }
  1249. }
  1250. return 0;
  1251. }
  1252. static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext *s, int ss,
  1253. int se, int Ah, int Al)
  1254. {
  1255. int mb_x, mb_y;
  1256. int EOBRUN = 0;
  1257. int c = s->comp_index[0];
  1258. uint16_t *quant_matrix = s->quant_matrixes[s->quant_sindex[0]];
  1259. av_assert0(ss>=0 && Ah>=0 && Al>=0);
  1260. if (se < ss || se > 63) {
  1261. av_log(s->avctx, AV_LOG_ERROR, "SS/SE %d/%d is invalid\n", ss, se);
  1262. return AVERROR_INVALIDDATA;
  1263. }
  1264. // s->coefs_finished is a bitmask for coefficients coded
  1265. // ss and se are parameters telling start and end coefficients
  1266. s->coefs_finished[c] |= (2ULL << se) - (1ULL << ss);
  1267. s->restart_count = 0;
  1268. for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
  1269. int block_idx = mb_y * s->block_stride[c];
  1270. int16_t (*block)[64] = &s->blocks[c][block_idx];
  1271. uint8_t *last_nnz = &s->last_nnz[c][block_idx];
  1272. if (get_bits_left(&s->gb) <= 0) {
  1273. av_log(s->avctx, AV_LOG_ERROR, "bitstream truncated in mjpeg_decode_scan_progressive_ac\n");
  1274. return AVERROR_INVALIDDATA;
  1275. }
  1276. for (mb_x = 0; mb_x < s->mb_width; mb_x++, block++, last_nnz++) {
  1277. int ret;
  1278. if (s->restart_interval && !s->restart_count)
  1279. s->restart_count = s->restart_interval;
  1280. if (Ah)
  1281. ret = decode_block_refinement(s, *block, last_nnz, s->ac_index[0],
  1282. quant_matrix, ss, se, Al, &EOBRUN);
  1283. else
  1284. ret = decode_block_progressive(s, *block, last_nnz, s->ac_index[0],
  1285. quant_matrix, ss, se, Al, &EOBRUN);
  1286. if (ret < 0) {
  1287. av_log(s->avctx, AV_LOG_ERROR,
  1288. "error y=%d x=%d\n", mb_y, mb_x);
  1289. return AVERROR_INVALIDDATA;
  1290. }
  1291. if (handle_rstn(s, 0))
  1292. EOBRUN = 0;
  1293. }
  1294. }
  1295. return 0;
  1296. }
  1297. static void mjpeg_idct_scan_progressive_ac(MJpegDecodeContext *s)
  1298. {
  1299. int mb_x, mb_y;
  1300. int c;
  1301. const int bytes_per_pixel = 1 + (s->bits > 8);
  1302. const int block_size = s->lossless ? 1 : 8;
  1303. for (c = 0; c < s->nb_components; c++) {
  1304. uint8_t *data = s->picture_ptr->data[c];
  1305. int linesize = s->linesize[c];
  1306. int h = s->h_max / s->h_count[c];
  1307. int v = s->v_max / s->v_count[c];
  1308. int mb_width = (s->width + h * block_size - 1) / (h * block_size);
  1309. int mb_height = (s->height + v * block_size - 1) / (v * block_size);
  1310. if (~s->coefs_finished[c])
  1311. av_log(s->avctx, AV_LOG_WARNING, "component %d is incomplete\n", c);
  1312. if (s->interlaced && s->bottom_field)
  1313. data += linesize >> 1;
  1314. for (mb_y = 0; mb_y < mb_height; mb_y++) {
  1315. uint8_t *ptr = data + (mb_y * linesize * 8 >> s->avctx->lowres);
  1316. int block_idx = mb_y * s->block_stride[c];
  1317. int16_t (*block)[64] = &s->blocks[c][block_idx];
  1318. for (mb_x = 0; mb_x < mb_width; mb_x++, block++) {
  1319. s->idsp.idct_put(ptr, linesize, *block);
  1320. if (s->bits & 7)
  1321. shift_output(s, ptr, linesize);
  1322. ptr += bytes_per_pixel*8 >> s->avctx->lowres;
  1323. }
  1324. }
  1325. }
  1326. }
  1327. int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask,
  1328. int mb_bitmask_size, const AVFrame *reference)
  1329. {
  1330. int len, nb_components, i, h, v, predictor, point_transform;
  1331. int index, id, ret;
  1332. const int block_size = s->lossless ? 1 : 8;
  1333. int ilv, prev_shift;
  1334. if (!s->got_picture) {
  1335. av_log(s->avctx, AV_LOG_WARNING,
  1336. "Can not process SOS before SOF, skipping\n");
  1337. return -1;
  1338. }
  1339. av_assert0(s->picture_ptr->data[0]);
  1340. /* XXX: verify len field validity */
  1341. len = get_bits(&s->gb, 16);
  1342. nb_components = get_bits(&s->gb, 8);
  1343. if (nb_components == 0 || nb_components > MAX_COMPONENTS) {
  1344. avpriv_report_missing_feature(s->avctx,
  1345. "decode_sos: nb_components (%d)",
  1346. nb_components);
  1347. return AVERROR_PATCHWELCOME;
  1348. }
  1349. if (len != 6 + 2 * nb_components) {
  1350. av_log(s->avctx, AV_LOG_ERROR, "decode_sos: invalid len (%d)\n", len);
  1351. return AVERROR_INVALIDDATA;
  1352. }
  1353. for (i = 0; i < nb_components; i++) {
  1354. id = get_bits(&s->gb, 8) - 1;
  1355. av_log(s->avctx, AV_LOG_DEBUG, "component: %d\n", id);
  1356. /* find component index */
  1357. for (index = 0; index < s->nb_components; index++)
  1358. if (id == s->component_id[index])
  1359. break;
  1360. if (index == s->nb_components) {
  1361. av_log(s->avctx, AV_LOG_ERROR,
  1362. "decode_sos: index(%d) out of components\n", index);
  1363. return AVERROR_INVALIDDATA;
  1364. }
  1365. /* Metasoft MJPEG codec has Cb and Cr swapped */
  1366. if (s->avctx->codec_tag == MKTAG('M', 'T', 'S', 'J')
  1367. && nb_components == 3 && s->nb_components == 3 && i)
  1368. index = 3 - i;
  1369. s->quant_sindex[i] = s->quant_index[index];
  1370. s->nb_blocks[i] = s->h_count[index] * s->v_count[index];
  1371. s->h_scount[i] = s->h_count[index];
  1372. s->v_scount[i] = s->v_count[index];
  1373. if(nb_components == 3 && s->nb_components == 3 && s->avctx->pix_fmt == AV_PIX_FMT_GBR24P)
  1374. index = (i+2)%3;
  1375. if(nb_components == 1 && s->nb_components == 3 && s->avctx->pix_fmt == AV_PIX_FMT_GBR24P)
  1376. index = (index+2)%3;
  1377. s->comp_index[i] = index;
  1378. s->dc_index[i] = get_bits(&s->gb, 4);
  1379. s->ac_index[i] = get_bits(&s->gb, 4);
  1380. if (s->dc_index[i] < 0 || s->ac_index[i] < 0 ||
  1381. s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
  1382. goto out_of_range;
  1383. if (!s->vlcs[0][s->dc_index[i]].table || !(s->progressive ? s->vlcs[2][s->ac_index[0]].table : s->vlcs[1][s->ac_index[i]].table))
  1384. goto out_of_range;
  1385. }
  1386. predictor = get_bits(&s->gb, 8); /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
  1387. ilv = get_bits(&s->gb, 8); /* JPEG Se / JPEG-LS ILV */
  1388. if(s->avctx->codec_tag != AV_RL32("CJPG")){
  1389. prev_shift = get_bits(&s->gb, 4); /* Ah */
  1390. point_transform = get_bits(&s->gb, 4); /* Al */
  1391. }else
  1392. prev_shift = point_transform = 0;
  1393. if (nb_components > 1) {
  1394. /* interleaved stream */
  1395. s->mb_width = (s->width + s->h_max * block_size - 1) / (s->h_max * block_size);
  1396. s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
  1397. } else if (!s->ls) { /* skip this for JPEG-LS */
  1398. h = s->h_max / s->h_scount[0];
  1399. v = s->v_max / s->v_scount[0];
  1400. s->mb_width = (s->width + h * block_size - 1) / (h * block_size);
  1401. s->mb_height = (s->height + v * block_size - 1) / (v * block_size);
  1402. s->nb_blocks[0] = 1;
  1403. s->h_scount[0] = 1;
  1404. s->v_scount[0] = 1;
  1405. }
  1406. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1407. av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d skip:%d %s comp:%d\n",
  1408. s->lossless ? "lossless" : "sequential DCT", s->rgb ? "RGB" : "",
  1409. predictor, point_transform, ilv, s->bits, s->mjpb_skiptosod,
  1410. s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""), nb_components);
  1411. /* mjpeg-b can have padding bytes between sos and image data, skip them */
  1412. for (i = s->mjpb_skiptosod; i > 0; i--)
  1413. skip_bits(&s->gb, 8);
  1414. next_field:
  1415. for (i = 0; i < nb_components; i++)
  1416. s->last_dc[i] = (4 << s->bits);
  1417. if (s->lossless) {
  1418. av_assert0(s->picture_ptr == s->picture);
  1419. if (CONFIG_JPEGLS_DECODER && s->ls) {
  1420. // for () {
  1421. // reset_ls_coding_parameters(s, 0);
  1422. if ((ret = ff_jpegls_decode_picture(s, predictor,
  1423. point_transform, ilv)) < 0)
  1424. return ret;
  1425. } else {
  1426. if (s->rgb) {
  1427. if ((ret = ljpeg_decode_rgb_scan(s, nb_components, predictor, point_transform)) < 0)
  1428. return ret;
  1429. } else {
  1430. if ((ret = ljpeg_decode_yuv_scan(s, predictor,
  1431. point_transform,
  1432. nb_components)) < 0)
  1433. return ret;
  1434. }
  1435. }
  1436. } else {
  1437. if (s->progressive && predictor) {
  1438. av_assert0(s->picture_ptr == s->picture);
  1439. if ((ret = mjpeg_decode_scan_progressive_ac(s, predictor,
  1440. ilv, prev_shift,
  1441. point_transform)) < 0)
  1442. return ret;
  1443. } else {
  1444. if ((ret = mjpeg_decode_scan(s, nb_components,
  1445. prev_shift, point_transform,
  1446. mb_bitmask, mb_bitmask_size, reference)) < 0)
  1447. return ret;
  1448. }
  1449. }
  1450. if (s->interlaced &&
  1451. get_bits_left(&s->gb) > 32 &&
  1452. show_bits(&s->gb, 8) == 0xFF) {
  1453. GetBitContext bak = s->gb;
  1454. align_get_bits(&bak);
  1455. if (show_bits(&bak, 16) == 0xFFD1) {
  1456. av_log(s->avctx, AV_LOG_DEBUG, "AVRn interlaced picture marker found\n");
  1457. s->gb = bak;
  1458. skip_bits(&s->gb, 16);
  1459. s->bottom_field ^= 1;
  1460. goto next_field;
  1461. }
  1462. }
  1463. emms_c();
  1464. return 0;
  1465. out_of_range:
  1466. av_log(s->avctx, AV_LOG_ERROR, "decode_sos: ac/dc index out of range\n");
  1467. return AVERROR_INVALIDDATA;
  1468. }
  1469. static int mjpeg_decode_dri(MJpegDecodeContext *s)
  1470. {
  1471. if (get_bits(&s->gb, 16) != 4)
  1472. return AVERROR_INVALIDDATA;
  1473. s->restart_interval = get_bits(&s->gb, 16);
  1474. s->restart_count = 0;
  1475. av_log(s->avctx, AV_LOG_DEBUG, "restart interval: %d\n",
  1476. s->restart_interval);
  1477. return 0;
  1478. }
  1479. static int mjpeg_decode_app(MJpegDecodeContext *s)
  1480. {
  1481. int len, id, i;
  1482. len = get_bits(&s->gb, 16);
  1483. if (len < 6)
  1484. return AVERROR_INVALIDDATA;
  1485. if (8 * len > get_bits_left(&s->gb))
  1486. return AVERROR_INVALIDDATA;
  1487. id = get_bits_long(&s->gb, 32);
  1488. len -= 6;
  1489. if (s->avctx->debug & FF_DEBUG_STARTCODE)
  1490. av_log(s->avctx, AV_LOG_DEBUG, "APPx (%s / %8X) len=%d\n",
  1491. av_fourcc2str(av_bswap32(id)), id, len);
  1492. /* Buggy AVID, it puts EOI only at every 10th frame. */
  1493. /* Also, this fourcc is used by non-avid files too, it holds some
  1494. information, but it's always present in AVID-created files. */
  1495. if (id == AV_RB32("AVI1")) {
  1496. /* structure:
  1497. 4bytes AVI1
  1498. 1bytes polarity
  1499. 1bytes always zero
  1500. 4bytes field_size
  1501. 4bytes field_size_less_padding
  1502. */
  1503. s->buggy_avid = 1;
  1504. i = get_bits(&s->gb, 8); len--;
  1505. av_log(s->avctx, AV_LOG_DEBUG, "polarity %d\n", i);
  1506. goto out;
  1507. }
  1508. if (id == AV_RB32("JFIF")) {
  1509. int t_w, t_h, v1, v2;
  1510. if (len < 8)
  1511. goto out;
  1512. skip_bits(&s->gb, 8); /* the trailing zero-byte */
  1513. v1 = get_bits(&s->gb, 8);
  1514. v2 = get_bits(&s->gb, 8);
  1515. skip_bits(&s->gb, 8);
  1516. s->avctx->sample_aspect_ratio.num = get_bits(&s->gb, 16);
  1517. s->avctx->sample_aspect_ratio.den = get_bits(&s->gb, 16);
  1518. if ( s->avctx->sample_aspect_ratio.num <= 0
  1519. || s->avctx->sample_aspect_ratio.den <= 0) {
  1520. s->avctx->sample_aspect_ratio.num = 0;
  1521. s->avctx->sample_aspect_ratio.den = 1;
  1522. }
  1523. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1524. av_log(s->avctx, AV_LOG_INFO,
  1525. "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
  1526. v1, v2,
  1527. s->avctx->sample_aspect_ratio.num,
  1528. s->avctx->sample_aspect_ratio.den);
  1529. len -= 8;
  1530. if (len >= 2) {
  1531. t_w = get_bits(&s->gb, 8);
  1532. t_h = get_bits(&s->gb, 8);
  1533. if (t_w && t_h) {
  1534. /* skip thumbnail */
  1535. if (len -10 - (t_w * t_h * 3) > 0)
  1536. len -= t_w * t_h * 3;
  1537. }
  1538. len -= 2;
  1539. }
  1540. goto out;
  1541. }
  1542. if ( id == AV_RB32("Adob")
  1543. && len >= 7
  1544. && show_bits(&s->gb, 8) == 'e'
  1545. && show_bits_long(&s->gb, 32) != AV_RB32("e_CM")) {
  1546. skip_bits(&s->gb, 8); /* 'e' */
  1547. skip_bits(&s->gb, 16); /* version */
  1548. skip_bits(&s->gb, 16); /* flags0 */
  1549. skip_bits(&s->gb, 16); /* flags1 */
  1550. s->adobe_transform = get_bits(&s->gb, 8);
  1551. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1552. av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found, transform=%d\n", s->adobe_transform);
  1553. len -= 7;
  1554. goto out;
  1555. }
  1556. if (id == AV_RB32("LJIF")) {
  1557. int rgb = s->rgb;
  1558. int pegasus_rct = s->pegasus_rct;
  1559. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1560. av_log(s->avctx, AV_LOG_INFO,
  1561. "Pegasus lossless jpeg header found\n");
  1562. skip_bits(&s->gb, 16); /* version ? */
  1563. skip_bits(&s->gb, 16); /* unknown always 0? */
  1564. skip_bits(&s->gb, 16); /* unknown always 0? */
  1565. skip_bits(&s->gb, 16); /* unknown always 0? */
  1566. switch (i=get_bits(&s->gb, 8)) {
  1567. case 1:
  1568. rgb = 1;
  1569. pegasus_rct = 0;
  1570. break;
  1571. case 2:
  1572. rgb = 1;
  1573. pegasus_rct = 1;
  1574. break;
  1575. default:
  1576. av_log(s->avctx, AV_LOG_ERROR, "unknown colorspace %d\n", i);
  1577. }
  1578. len -= 9;
  1579. if (s->got_picture)
  1580. if (rgb != s->rgb || pegasus_rct != s->pegasus_rct) {
  1581. av_log(s->avctx, AV_LOG_WARNING, "Mismatching LJIF tag\n");
  1582. goto out;
  1583. }
  1584. s->rgb = rgb;
  1585. s->pegasus_rct = pegasus_rct;
  1586. goto out;
  1587. }
  1588. if (id == AV_RL32("colr") && len > 0) {
  1589. s->colr = get_bits(&s->gb, 8);
  1590. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1591. av_log(s->avctx, AV_LOG_INFO, "COLR %d\n", s->colr);
  1592. len --;
  1593. goto out;
  1594. }
  1595. if (id == AV_RL32("xfrm") && len > 0) {
  1596. s->xfrm = get_bits(&s->gb, 8);
  1597. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1598. av_log(s->avctx, AV_LOG_INFO, "XFRM %d\n", s->xfrm);
  1599. len --;
  1600. goto out;
  1601. }
  1602. /* JPS extension by VRex */
  1603. if (s->start_code == APP3 && id == AV_RB32("_JPS") && len >= 10) {
  1604. int flags, layout, type;
  1605. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1606. av_log(s->avctx, AV_LOG_INFO, "_JPSJPS_\n");
  1607. skip_bits(&s->gb, 32); len -= 4; /* JPS_ */
  1608. skip_bits(&s->gb, 16); len -= 2; /* block length */
  1609. skip_bits(&s->gb, 8); /* reserved */
  1610. flags = get_bits(&s->gb, 8);
  1611. layout = get_bits(&s->gb, 8);
  1612. type = get_bits(&s->gb, 8);
  1613. len -= 4;
  1614. s->stereo3d = av_stereo3d_alloc();
  1615. if (!s->stereo3d) {
  1616. goto out;
  1617. }
  1618. if (type == 0) {
  1619. s->stereo3d->type = AV_STEREO3D_2D;
  1620. } else if (type == 1) {
  1621. switch (layout) {
  1622. case 0x01:
  1623. s->stereo3d->type = AV_STEREO3D_LINES;
  1624. break;
  1625. case 0x02:
  1626. s->stereo3d->type = AV_STEREO3D_SIDEBYSIDE;
  1627. break;
  1628. case 0x03:
  1629. s->stereo3d->type = AV_STEREO3D_TOPBOTTOM;
  1630. break;
  1631. }
  1632. if (!(flags & 0x04)) {
  1633. s->stereo3d->flags = AV_STEREO3D_FLAG_INVERT;
  1634. }
  1635. }
  1636. goto out;
  1637. }
  1638. /* EXIF metadata */
  1639. if (s->start_code == APP1 && id == AV_RB32("Exif") && len >= 2) {
  1640. GetByteContext gbytes;
  1641. int ret, le, ifd_offset, bytes_read;
  1642. const uint8_t *aligned;
  1643. skip_bits(&s->gb, 16); // skip padding
  1644. len -= 2;
  1645. // init byte wise reading
  1646. aligned = align_get_bits(&s->gb);
  1647. bytestream2_init(&gbytes, aligned, len);
  1648. // read TIFF header
  1649. ret = ff_tdecode_header(&gbytes, &le, &ifd_offset);
  1650. if (ret) {
  1651. av_log(s->avctx, AV_LOG_ERROR, "mjpeg: invalid TIFF header in EXIF data\n");
  1652. } else {
  1653. bytestream2_seek(&gbytes, ifd_offset, SEEK_SET);
  1654. // read 0th IFD and store the metadata
  1655. // (return values > 0 indicate the presence of subimage metadata)
  1656. ret = avpriv_exif_decode_ifd(s->avctx, &gbytes, le, 0, &s->exif_metadata);
  1657. if (ret < 0) {
  1658. av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error decoding EXIF data\n");
  1659. }
  1660. }
  1661. bytes_read = bytestream2_tell(&gbytes);
  1662. skip_bits(&s->gb, bytes_read << 3);
  1663. len -= bytes_read;
  1664. goto out;
  1665. }
  1666. /* Apple MJPEG-A */
  1667. if ((s->start_code == APP1) && (len > (0x28 - 8))) {
  1668. id = get_bits_long(&s->gb, 32);
  1669. len -= 4;
  1670. /* Apple MJPEG-A */
  1671. if (id == AV_RB32("mjpg")) {
  1672. /* structure:
  1673. 4bytes field size
  1674. 4bytes pad field size
  1675. 4bytes next off
  1676. 4bytes quant off
  1677. 4bytes huff off
  1678. 4bytes image off
  1679. 4bytes scan off
  1680. 4bytes data off
  1681. */
  1682. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1683. av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
  1684. }
  1685. }
  1686. out:
  1687. /* slow but needed for extreme adobe jpegs */
  1688. if (len < 0)
  1689. av_log(s->avctx, AV_LOG_ERROR,
  1690. "mjpeg: error, decode_app parser read over the end\n");
  1691. while (--len > 0)
  1692. skip_bits(&s->gb, 8);
  1693. return 0;
  1694. }
  1695. static int mjpeg_decode_com(MJpegDecodeContext *s)
  1696. {
  1697. int len = get_bits(&s->gb, 16);
  1698. if (len >= 2 && 8 * len - 16 <= get_bits_left(&s->gb)) {
  1699. int i;
  1700. char *cbuf = av_malloc(len - 1);
  1701. if (!cbuf)
  1702. return AVERROR(ENOMEM);
  1703. for (i = 0; i < len - 2; i++)
  1704. cbuf[i] = get_bits(&s->gb, 8);
  1705. if (i > 0 && cbuf[i - 1] == '\n')
  1706. cbuf[i - 1] = 0;
  1707. else
  1708. cbuf[i] = 0;
  1709. if (s->avctx->debug & FF_DEBUG_PICT_INFO)
  1710. av_log(s->avctx, AV_LOG_INFO, "comment: '%s'\n", cbuf);
  1711. /* buggy avid, it puts EOI only at every 10th frame */
  1712. if (!strncmp(cbuf, "AVID", 4)) {
  1713. parse_avid(s, cbuf, len);
  1714. } else if (!strcmp(cbuf, "CS=ITU601"))
  1715. s->cs_itu601 = 1;
  1716. else if ((!strncmp(cbuf, "Intel(R) JPEG Library, version 1", 32) && s->avctx->codec_tag) ||
  1717. (!strncmp(cbuf, "Metasoft MJPEG Codec", 20)))
  1718. s->flipped = 1;
  1719. else if (!strcmp(cbuf, "MULTISCOPE II")) {
  1720. s->avctx->sample_aspect_ratio = (AVRational) { 1, 2 };
  1721. s->multiscope = 2;
  1722. }
  1723. av_free(cbuf);
  1724. }
  1725. return 0;
  1726. }
  1727. /* return the 8 bit start code value and update the search
  1728. state. Return -1 if no start code found */
  1729. static int find_marker(const uint8_t **pbuf_ptr, const uint8_t *buf_end)
  1730. {
  1731. const uint8_t *buf_ptr;
  1732. unsigned int v, v2;
  1733. int val;
  1734. int skipped = 0;
  1735. buf_ptr = *pbuf_ptr;
  1736. while (buf_end - buf_ptr > 1) {
  1737. v = *buf_ptr++;
  1738. v2 = *buf_ptr;
  1739. if ((v == 0xff) && (v2 >= 0xc0) && (v2 <= 0xfe) && buf_ptr < buf_end) {
  1740. val = *buf_ptr++;
  1741. goto found;
  1742. }
  1743. skipped++;
  1744. }
  1745. buf_ptr = buf_end;
  1746. val = -1;
  1747. found:
  1748. ff_dlog(NULL, "find_marker skipped %d bytes\n", skipped);
  1749. *pbuf_ptr = buf_ptr;
  1750. return val;
  1751. }
  1752. int ff_mjpeg_find_marker(MJpegDecodeContext *s,
  1753. const uint8_t **buf_ptr, const uint8_t *buf_end,
  1754. const uint8_t **unescaped_buf_ptr,
  1755. int *unescaped_buf_size)
  1756. {
  1757. int start_code;
  1758. start_code = find_marker(buf_ptr, buf_end);
  1759. av_fast_padded_malloc(&s->buffer, &s->buffer_size, buf_end - *buf_ptr);
  1760. if (!s->buffer)
  1761. return AVERROR(ENOMEM);
  1762. /* unescape buffer of SOS, use special treatment for JPEG-LS */
  1763. if (start_code == SOS && !s->ls) {
  1764. const uint8_t *src = *buf_ptr;
  1765. const uint8_t *ptr = src;
  1766. uint8_t *dst = s->buffer;
  1767. #define copy_data_segment(skip) do { \
  1768. ptrdiff_t length = (ptr - src) - (skip); \
  1769. if (length > 0) { \
  1770. memcpy(dst, src, length); \
  1771. dst += length; \
  1772. src = ptr; \
  1773. } \
  1774. } while (0)
  1775. if (s->avctx->codec_id == AV_CODEC_ID_THP) {
  1776. ptr = buf_end;
  1777. copy_data_segment(0);
  1778. } else {
  1779. while (ptr < buf_end) {
  1780. uint8_t x = *(ptr++);
  1781. if (x == 0xff) {
  1782. ptrdiff_t skip = 0;
  1783. while (ptr < buf_end && x == 0xff) {
  1784. x = *(ptr++);
  1785. skip++;
  1786. }
  1787. /* 0xFF, 0xFF, ... */
  1788. if (skip > 1) {
  1789. copy_data_segment(skip);
  1790. /* decrement src as it is equal to ptr after the
  1791. * copy_data_segment macro and we might want to
  1792. * copy the current value of x later on */
  1793. src--;
  1794. }
  1795. if (x < 0xd0 || x > 0xd7) {
  1796. copy_data_segment(1);
  1797. if (x)
  1798. break;
  1799. }
  1800. }
  1801. }
  1802. if (src < ptr)
  1803. copy_data_segment(0);
  1804. }
  1805. #undef copy_data_segment
  1806. *unescaped_buf_ptr = s->buffer;
  1807. *unescaped_buf_size = dst - s->buffer;
  1808. memset(s->buffer + *unescaped_buf_size, 0,
  1809. AV_INPUT_BUFFER_PADDING_SIZE);
  1810. av_log(s->avctx, AV_LOG_DEBUG, "escaping removed %"PTRDIFF_SPECIFIER" bytes\n",
  1811. (buf_end - *buf_ptr) - (dst - s->buffer));
  1812. } else if (start_code == SOS && s->ls) {
  1813. const uint8_t *src = *buf_ptr;
  1814. uint8_t *dst = s->buffer;
  1815. int bit_count = 0;
  1816. int t = 0, b = 0;
  1817. PutBitContext pb;
  1818. /* find marker */
  1819. while (src + t < buf_end) {
  1820. uint8_t x = src[t++];
  1821. if (x == 0xff) {
  1822. while ((src + t < buf_end) && x == 0xff)
  1823. x = src[t++];
  1824. if (x & 0x80) {
  1825. t -= FFMIN(2, t);
  1826. break;
  1827. }
  1828. }
  1829. }
  1830. bit_count = t * 8;
  1831. init_put_bits(&pb, dst, t);
  1832. /* unescape bitstream */
  1833. while (b < t) {
  1834. uint8_t x = src[b++];
  1835. put_bits(&pb, 8, x);
  1836. if (x == 0xFF && b < t) {
  1837. x = src[b++];
  1838. if (x & 0x80) {
  1839. av_log(s->avctx, AV_LOG_WARNING, "Invalid escape sequence\n");
  1840. x &= 0x7f;
  1841. }
  1842. put_bits(&pb, 7, x);
  1843. bit_count--;
  1844. }
  1845. }
  1846. flush_put_bits(&pb);
  1847. *unescaped_buf_ptr = dst;
  1848. *unescaped_buf_size = (bit_count + 7) >> 3;
  1849. memset(s->buffer + *unescaped_buf_size, 0,
  1850. AV_INPUT_BUFFER_PADDING_SIZE);
  1851. } else {
  1852. *unescaped_buf_ptr = *buf_ptr;
  1853. *unescaped_buf_size = buf_end - *buf_ptr;
  1854. }
  1855. return start_code;
  1856. }
  1857. int ff_mjpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
  1858. AVPacket *avpkt)
  1859. {
  1860. AVFrame *frame = data;
  1861. const uint8_t *buf = avpkt->data;
  1862. int buf_size = avpkt->size;
  1863. MJpegDecodeContext *s = avctx->priv_data;
  1864. const uint8_t *buf_end, *buf_ptr;
  1865. const uint8_t *unescaped_buf_ptr;
  1866. int hshift, vshift;
  1867. int unescaped_buf_size;
  1868. int start_code;
  1869. int i, index;
  1870. int ret = 0;
  1871. int is16bit;
  1872. av_dict_free(&s->exif_metadata);
  1873. av_freep(&s->stereo3d);
  1874. s->adobe_transform = -1;
  1875. buf_ptr = buf;
  1876. buf_end = buf + buf_size;
  1877. while (buf_ptr < buf_end) {
  1878. /* find start next marker */
  1879. start_code = ff_mjpeg_find_marker(s, &buf_ptr, buf_end,
  1880. &unescaped_buf_ptr,
  1881. &unescaped_buf_size);
  1882. /* EOF */
  1883. if (start_code < 0) {
  1884. break;
  1885. } else if (unescaped_buf_size > INT_MAX / 8) {
  1886. av_log(avctx, AV_LOG_ERROR,
  1887. "MJPEG packet 0x%x too big (%d/%d), corrupt data?\n",
  1888. start_code, unescaped_buf_size, buf_size);
  1889. return AVERROR_INVALIDDATA;
  1890. }
  1891. av_log(avctx, AV_LOG_DEBUG, "marker=%x avail_size_in_buf=%"PTRDIFF_SPECIFIER"\n",
  1892. start_code, buf_end - buf_ptr);
  1893. ret = init_get_bits8(&s->gb, unescaped_buf_ptr, unescaped_buf_size);
  1894. if (ret < 0) {
  1895. av_log(avctx, AV_LOG_ERROR, "invalid buffer\n");
  1896. goto fail;
  1897. }
  1898. s->start_code = start_code;
  1899. if (s->avctx->debug & FF_DEBUG_STARTCODE)
  1900. av_log(avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
  1901. /* process markers */
  1902. if (start_code >= 0xd0 && start_code <= 0xd7) {
  1903. av_log(avctx, AV_LOG_DEBUG,
  1904. "restart marker: %d\n", start_code & 0x0f);
  1905. /* APP fields */
  1906. } else if (start_code >= APP0 && start_code <= APP15) {
  1907. if ((ret = mjpeg_decode_app(s)) < 0)
  1908. av_log(avctx, AV_LOG_ERROR, "unable to decode APP fields: %s\n",
  1909. av_err2str(ret));
  1910. /* Comment */
  1911. } else if (start_code == COM) {
  1912. ret = mjpeg_decode_com(s);
  1913. if (ret < 0)
  1914. return ret;
  1915. } else if (start_code == DQT) {
  1916. ret = ff_mjpeg_decode_dqt(s);
  1917. if (ret < 0)
  1918. return ret;
  1919. }
  1920. ret = -1;
  1921. if (!CONFIG_JPEGLS_DECODER &&
  1922. (start_code == SOF48 || start_code == LSE)) {
  1923. av_log(avctx, AV_LOG_ERROR, "JPEG-LS support not enabled.\n");
  1924. return AVERROR(ENOSYS);
  1925. }
  1926. if (avctx->skip_frame == AVDISCARD_ALL) {
  1927. switch(start_code) {
  1928. case SOF0:
  1929. case SOF1:
  1930. case SOF2:
  1931. case SOF3:
  1932. case SOF48:
  1933. case SOI:
  1934. case SOS:
  1935. case EOI:
  1936. break;
  1937. default:
  1938. goto skip;
  1939. }
  1940. }
  1941. switch (start_code) {
  1942. case SOI:
  1943. s->restart_interval = 0;
  1944. s->restart_count = 0;
  1945. /* nothing to do on SOI */
  1946. break;
  1947. case DHT:
  1948. if ((ret = ff_mjpeg_decode_dht(s)) < 0) {
  1949. av_log(avctx, AV_LOG_ERROR, "huffman table decode error\n");
  1950. goto fail;
  1951. }
  1952. break;
  1953. case SOF0:
  1954. case SOF1:
  1955. s->lossless = 0;
  1956. s->ls = 0;
  1957. s->progressive = 0;
  1958. if ((ret = ff_mjpeg_decode_sof(s)) < 0)
  1959. goto fail;
  1960. break;
  1961. case SOF2:
  1962. s->lossless = 0;
  1963. s->ls = 0;
  1964. s->progressive = 1;
  1965. if ((ret = ff_mjpeg_decode_sof(s)) < 0)
  1966. goto fail;
  1967. break;
  1968. case SOF3:
  1969. s->avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
  1970. s->lossless = 1;
  1971. s->ls = 0;
  1972. s->progressive = 0;
  1973. if ((ret = ff_mjpeg_decode_sof(s)) < 0)
  1974. goto fail;
  1975. break;
  1976. case SOF48:
  1977. s->avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
  1978. s->lossless = 1;
  1979. s->ls = 1;
  1980. s->progressive = 0;
  1981. if ((ret = ff_mjpeg_decode_sof(s)) < 0)
  1982. goto fail;
  1983. break;
  1984. case LSE:
  1985. if (!CONFIG_JPEGLS_DECODER ||
  1986. (ret = ff_jpegls_decode_lse(s)) < 0)
  1987. goto fail;
  1988. break;
  1989. case EOI:
  1990. eoi_parser:
  1991. if (avctx->skip_frame != AVDISCARD_ALL && s->progressive && s->cur_scan && s->got_picture)
  1992. mjpeg_idct_scan_progressive_ac(s);
  1993. s->cur_scan = 0;
  1994. if (!s->got_picture) {
  1995. av_log(avctx, AV_LOG_WARNING,
  1996. "Found EOI before any SOF, ignoring\n");
  1997. break;
  1998. }
  1999. if (s->interlaced) {
  2000. s->bottom_field ^= 1;
  2001. /* if not bottom field, do not output image yet */
  2002. if (s->bottom_field == !s->interlace_polarity)
  2003. break;
  2004. }
  2005. if (avctx->skip_frame == AVDISCARD_ALL) {
  2006. s->got_picture = 0;
  2007. goto the_end_no_picture;
  2008. }
  2009. if ((ret = av_frame_ref(frame, s->picture_ptr)) < 0)
  2010. return ret;
  2011. *got_frame = 1;
  2012. s->got_picture = 0;
  2013. if (!s->lossless) {
  2014. int qp = FFMAX3(s->qscale[0],
  2015. s->qscale[1],
  2016. s->qscale[2]);
  2017. int qpw = (s->width + 15) / 16;
  2018. AVBufferRef *qp_table_buf = av_buffer_alloc(qpw);
  2019. if (qp_table_buf) {
  2020. memset(qp_table_buf->data, qp, qpw);
  2021. av_frame_set_qp_table(data, qp_table_buf, 0, FF_QSCALE_TYPE_MPEG1);
  2022. }
  2023. if(avctx->debug & FF_DEBUG_QP)
  2024. av_log(avctx, AV_LOG_DEBUG, "QP: %d\n", qp);
  2025. }
  2026. goto the_end;
  2027. case SOS:
  2028. s->cur_scan++;
  2029. if (avctx->skip_frame == AVDISCARD_ALL) {
  2030. skip_bits(&s->gb, get_bits_left(&s->gb));
  2031. break;
  2032. }
  2033. if ((ret = ff_mjpeg_decode_sos(s, NULL, 0, NULL)) < 0 &&
  2034. (avctx->err_recognition & AV_EF_EXPLODE))
  2035. goto fail;
  2036. break;
  2037. case DRI:
  2038. if ((ret = mjpeg_decode_dri(s)) < 0)
  2039. return ret;
  2040. break;
  2041. case SOF5:
  2042. case SOF6:
  2043. case SOF7:
  2044. case SOF9:
  2045. case SOF10:
  2046. case SOF11:
  2047. case SOF13:
  2048. case SOF14:
  2049. case SOF15:
  2050. case JPG:
  2051. av_log(avctx, AV_LOG_ERROR,
  2052. "mjpeg: unsupported coding type (%x)\n", start_code);
  2053. break;
  2054. }
  2055. skip:
  2056. /* eof process start code */
  2057. buf_ptr += (get_bits_count(&s->gb) + 7) / 8;
  2058. av_log(avctx, AV_LOG_DEBUG,
  2059. "marker parser used %d bytes (%d bits)\n",
  2060. (get_bits_count(&s->gb) + 7) / 8, get_bits_count(&s->gb));
  2061. }
  2062. if (s->got_picture && s->cur_scan) {
  2063. av_log(avctx, AV_LOG_WARNING, "EOI missing, emulating\n");
  2064. goto eoi_parser;
  2065. }
  2066. av_log(avctx, AV_LOG_FATAL, "No JPEG data found in image\n");
  2067. return AVERROR_INVALIDDATA;
  2068. fail:
  2069. s->got_picture = 0;
  2070. return ret;
  2071. the_end:
  2072. is16bit = av_pix_fmt_desc_get(s->avctx->pix_fmt)->comp[0].step > 1;
  2073. if (AV_RB32(s->upscale_h)) {
  2074. int p;
  2075. av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
  2076. avctx->pix_fmt == AV_PIX_FMT_YUV444P ||
  2077. avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
  2078. avctx->pix_fmt == AV_PIX_FMT_YUV440P ||
  2079. avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
  2080. avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
  2081. avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
  2082. avctx->pix_fmt == AV_PIX_FMT_YUV420P16||
  2083. avctx->pix_fmt == AV_PIX_FMT_YUVA420P ||
  2084. avctx->pix_fmt == AV_PIX_FMT_YUVA420P16||
  2085. avctx->pix_fmt == AV_PIX_FMT_GBRP ||
  2086. avctx->pix_fmt == AV_PIX_FMT_GBRAP
  2087. );
  2088. avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
  2089. av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
  2090. for (p = 0; p<s->nb_components; p++) {
  2091. uint8_t *line = s->picture_ptr->data[p];
  2092. int w = s->width;
  2093. int h = s->height;
  2094. if (!s->upscale_h[p])
  2095. continue;
  2096. if (p==1 || p==2) {
  2097. w = AV_CEIL_RSHIFT(w, hshift);
  2098. h = AV_CEIL_RSHIFT(h, vshift);
  2099. }
  2100. if (s->upscale_v[p])
  2101. h = (h+1)>>1;
  2102. av_assert0(w > 0);
  2103. for (i = 0; i < h; i++) {
  2104. if (s->upscale_h[p] == 1) {
  2105. if (is16bit) ((uint16_t*)line)[w - 1] = ((uint16_t*)line)[(w - 1) / 2];
  2106. else line[w - 1] = line[(w - 1) / 2];
  2107. for (index = w - 2; index > 0; index--) {
  2108. if (is16bit)
  2109. ((uint16_t*)line)[index] = (((uint16_t*)line)[index / 2] + ((uint16_t*)line)[(index + 1) / 2]) >> 1;
  2110. else
  2111. line[index] = (line[index / 2] + line[(index + 1) / 2]) >> 1;
  2112. }
  2113. } else if (s->upscale_h[p] == 2) {
  2114. if (is16bit) {
  2115. ((uint16_t*)line)[w - 1] = ((uint16_t*)line)[(w - 1) / 3];
  2116. if (w > 1)
  2117. ((uint16_t*)line)[w - 2] = ((uint16_t*)line)[w - 1];
  2118. } else {
  2119. line[w - 1] = line[(w - 1) / 3];
  2120. if (w > 1)
  2121. line[w - 2] = line[w - 1];
  2122. }
  2123. for (index = w - 3; index > 0; index--) {
  2124. line[index] = (line[index / 3] + line[(index + 1) / 3] + line[(index + 2) / 3] + 1) / 3;
  2125. }
  2126. }
  2127. line += s->linesize[p];
  2128. }
  2129. }
  2130. }
  2131. if (AV_RB32(s->upscale_v)) {
  2132. int p;
  2133. av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
  2134. avctx->pix_fmt == AV_PIX_FMT_YUV444P ||
  2135. avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
  2136. avctx->pix_fmt == AV_PIX_FMT_YUV422P ||
  2137. avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
  2138. avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
  2139. avctx->pix_fmt == AV_PIX_FMT_YUV440P ||
  2140. avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
  2141. avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
  2142. avctx->pix_fmt == AV_PIX_FMT_YUVA420P ||
  2143. avctx->pix_fmt == AV_PIX_FMT_YUVA420P16||
  2144. avctx->pix_fmt == AV_PIX_FMT_GBRP ||
  2145. avctx->pix_fmt == AV_PIX_FMT_GBRAP
  2146. );
  2147. avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
  2148. av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
  2149. for (p = 0; p < s->nb_components; p++) {
  2150. uint8_t *dst;
  2151. int w = s->width;
  2152. int h = s->height;
  2153. if (!s->upscale_v[p])
  2154. continue;
  2155. if (p==1 || p==2) {
  2156. w = AV_CEIL_RSHIFT(w, hshift);
  2157. h = AV_CEIL_RSHIFT(h, vshift);
  2158. }
  2159. dst = &((uint8_t *)s->picture_ptr->data[p])[(h - 1) * s->linesize[p]];
  2160. for (i = h - 1; i; i--) {
  2161. uint8_t *src1 = &((uint8_t *)s->picture_ptr->data[p])[i / 2 * s->linesize[p]];
  2162. uint8_t *src2 = &((uint8_t *)s->picture_ptr->data[p])[(i + 1) / 2 * s->linesize[p]];
  2163. if (src1 == src2 || i == h - 1) {
  2164. memcpy(dst, src1, w);
  2165. } else {
  2166. for (index = 0; index < w; index++)
  2167. dst[index] = (src1[index] + src2[index]) >> 1;
  2168. }
  2169. dst -= s->linesize[p];
  2170. }
  2171. }
  2172. }
  2173. if (s->flipped && !s->rgb) {
  2174. int j;
  2175. avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &hshift, &vshift);
  2176. av_assert0(s->nb_components == av_pix_fmt_count_planes(s->picture_ptr->format));
  2177. for (index=0; index<s->nb_components; index++) {
  2178. uint8_t *dst = s->picture_ptr->data[index];
  2179. int w = s->picture_ptr->width;
  2180. int h = s->picture_ptr->height;
  2181. if(index && index<3){
  2182. w = AV_CEIL_RSHIFT(w, hshift);
  2183. h = AV_CEIL_RSHIFT(h, vshift);
  2184. }
  2185. if(dst){
  2186. uint8_t *dst2 = dst + s->picture_ptr->linesize[index]*(h-1);
  2187. for (i=0; i<h/2; i++) {
  2188. for (j=0; j<w; j++)
  2189. FFSWAP(int, dst[j], dst2[j]);
  2190. dst += s->picture_ptr->linesize[index];
  2191. dst2 -= s->picture_ptr->linesize[index];
  2192. }
  2193. }
  2194. }
  2195. }
  2196. if (s->adobe_transform == 0 && s->avctx->pix_fmt == AV_PIX_FMT_GBRAP) {
  2197. int w = s->picture_ptr->width;
  2198. int h = s->picture_ptr->height;
  2199. av_assert0(s->nb_components == 4);
  2200. for (i=0; i<h; i++) {
  2201. int j;
  2202. uint8_t *dst[4];
  2203. for (index=0; index<4; index++) {
  2204. dst[index] = s->picture_ptr->data[index]
  2205. + s->picture_ptr->linesize[index]*i;
  2206. }
  2207. for (j=0; j<w; j++) {
  2208. int k = dst[3][j];
  2209. int r = dst[0][j] * k;
  2210. int g = dst[1][j] * k;
  2211. int b = dst[2][j] * k;
  2212. dst[0][j] = g*257 >> 16;
  2213. dst[1][j] = b*257 >> 16;
  2214. dst[2][j] = r*257 >> 16;
  2215. dst[3][j] = 255;
  2216. }
  2217. }
  2218. }
  2219. if (s->adobe_transform == 2 && s->avctx->pix_fmt == AV_PIX_FMT_YUVA444P) {
  2220. int w = s->picture_ptr->width;
  2221. int h = s->picture_ptr->height;
  2222. av_assert0(s->nb_components == 4);
  2223. for (i=0; i<h; i++) {
  2224. int j;
  2225. uint8_t *dst[4];
  2226. for (index=0; index<4; index++) {
  2227. dst[index] = s->picture_ptr->data[index]
  2228. + s->picture_ptr->linesize[index]*i;
  2229. }
  2230. for (j=0; j<w; j++) {
  2231. int k = dst[3][j];
  2232. int r = (255 - dst[0][j]) * k;
  2233. int g = (128 - dst[1][j]) * k;
  2234. int b = (128 - dst[2][j]) * k;
  2235. dst[0][j] = r*257 >> 16;
  2236. dst[1][j] = (g*257 >> 16) + 128;
  2237. dst[2][j] = (b*257 >> 16) + 128;
  2238. dst[3][j] = 255;
  2239. }
  2240. }
  2241. }
  2242. if (s->stereo3d) {
  2243. AVStereo3D *stereo = av_stereo3d_create_side_data(data);
  2244. if (stereo) {
  2245. stereo->type = s->stereo3d->type;
  2246. stereo->flags = s->stereo3d->flags;
  2247. }
  2248. av_freep(&s->stereo3d);
  2249. }
  2250. av_dict_copy(&((AVFrame *) data)->metadata, s->exif_metadata, 0);
  2251. av_dict_free(&s->exif_metadata);
  2252. the_end_no_picture:
  2253. av_log(avctx, AV_LOG_DEBUG, "decode frame unused %"PTRDIFF_SPECIFIER" bytes\n",
  2254. buf_end - buf_ptr);
  2255. // return buf_end - buf_ptr;
  2256. return buf_ptr - buf;
  2257. }
  2258. av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
  2259. {
  2260. MJpegDecodeContext *s = avctx->priv_data;
  2261. int i, j;
  2262. if (s->interlaced && s->bottom_field == !s->interlace_polarity && s->got_picture && !avctx->frame_number) {
  2263. av_log(avctx, AV_LOG_INFO, "Single field\n");
  2264. }
  2265. if (s->picture) {
  2266. av_frame_free(&s->picture);
  2267. s->picture_ptr = NULL;
  2268. } else if (s->picture_ptr)
  2269. av_frame_unref(s->picture_ptr);
  2270. av_freep(&s->buffer);
  2271. av_freep(&s->stereo3d);
  2272. av_freep(&s->ljpeg_buffer);
  2273. s->ljpeg_buffer_size = 0;
  2274. for (i = 0; i < 3; i++) {
  2275. for (j = 0; j < 4; j++)
  2276. ff_free_vlc(&s->vlcs[i][j]);
  2277. }
  2278. for (i = 0; i < MAX_COMPONENTS; i++) {
  2279. av_freep(&s->blocks[i]);
  2280. av_freep(&s->last_nnz[i]);
  2281. }
  2282. av_dict_free(&s->exif_metadata);
  2283. return 0;
  2284. }
  2285. static void decode_flush(AVCodecContext *avctx)
  2286. {
  2287. MJpegDecodeContext *s = avctx->priv_data;
  2288. s->got_picture = 0;
  2289. }
  2290. #if CONFIG_MJPEG_DECODER
  2291. #define OFFSET(x) offsetof(MJpegDecodeContext, x)
  2292. #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
  2293. static const AVOption options[] = {
  2294. { "extern_huff", "Use external huffman table.",
  2295. OFFSET(extern_huff), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
  2296. { NULL },
  2297. };
  2298. static const AVClass mjpegdec_class = {
  2299. .class_name = "MJPEG decoder",
  2300. .item_name = av_default_item_name,
  2301. .option = options,
  2302. .version = LIBAVUTIL_VERSION_INT,
  2303. };
  2304. AVCodec ff_mjpeg_decoder = {
  2305. .name = "mjpeg",
  2306. .long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
  2307. .type = AVMEDIA_TYPE_VIDEO,
  2308. .id = AV_CODEC_ID_MJPEG,
  2309. .priv_data_size = sizeof(MJpegDecodeContext),
  2310. .init = ff_mjpeg_decode_init,
  2311. .close = ff_mjpeg_decode_end,
  2312. .decode = ff_mjpeg_decode_frame,
  2313. .flush = decode_flush,
  2314. .capabilities = AV_CODEC_CAP_DR1,
  2315. .max_lowres = 3,
  2316. .priv_class = &mjpegdec_class,
  2317. .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
  2318. FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
  2319. };
  2320. #endif
  2321. #if CONFIG_THP_DECODER
  2322. AVCodec ff_thp_decoder = {
  2323. .name = "thp",
  2324. .long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"),
  2325. .type = AVMEDIA_TYPE_VIDEO,
  2326. .id = AV_CODEC_ID_THP,
  2327. .priv_data_size = sizeof(MJpegDecodeContext),
  2328. .init = ff_mjpeg_decode_init,
  2329. .close = ff_mjpeg_decode_end,
  2330. .decode = ff_mjpeg_decode_frame,
  2331. .flush = decode_flush,
  2332. .capabilities = AV_CODEC_CAP_DR1,
  2333. .max_lowres = 3,
  2334. .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
  2335. };
  2336. #endif