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.

3011 lines
107KB

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