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.

2816 lines
99KB

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