comparison mjpegdec.c @ 5041:01a165280429 libavcodec

allows to disable jpegls decoder
author aurel
date Sat, 19 May 2007 14:31:57 +0000
parents 325557621708
children 259b58518ecc
comparison
equal deleted inserted replaced
5040:5c6cd6601371 5041:01a165280429
34 #include <assert.h> 34 #include <assert.h>
35 35
36 #include "avcodec.h" 36 #include "avcodec.h"
37 #include "dsputil.h" 37 #include "dsputil.h"
38 #include "mjpeg.h" 38 #include "mjpeg.h"
39 #include "mjpegdec.h"
39 #include "jpeglsdec.h" 40 #include "jpeglsdec.h"
40 41
41 42
42 static int mjpeg_decode_dht(MJpegDecodeContext *s); 43 static int mjpeg_decode_dht(MJpegDecodeContext *s);
43 44
61 } 62 }
62 63
63 return init_vlc(vlc, 9, nb_codes, huff_size, 1, 1, huff_code, 2, 2, use_static); 64 return init_vlc(vlc, 9, nb_codes, huff_size, 1, 1, huff_code, 2, 2, use_static);
64 } 65 }
65 66
66 static int mjpeg_decode_init(AVCodecContext *avctx) 67 int ff_mjpeg_decode_init(AVCodecContext *avctx)
67 { 68 {
68 MJpegDecodeContext *s = avctx->priv_data; 69 MJpegDecodeContext *s = avctx->priv_data;
69 70
70 s->avctx = avctx; 71 s->avctx = avctx;
71 dsputil_init(&s->dsp, avctx); 72 dsputil_init(&s->dsp, avctx);
800 /* mjpeg-b can have padding bytes between sos and image data, skip them */ 801 /* mjpeg-b can have padding bytes between sos and image data, skip them */
801 for (i = s->mjpb_skiptosod; i > 0; i--) 802 for (i = s->mjpb_skiptosod; i > 0; i--)
802 skip_bits(&s->gb, 8); 803 skip_bits(&s->gb, 8);
803 804
804 if(s->lossless){ 805 if(s->lossless){
805 if(s->ls){ 806 if(ENABLE_JPEGLS_DECODER && s->ls){
806 // for(){ 807 // for(){
807 // reset_ls_coding_parameters(s, 0); 808 // reset_ls_coding_parameters(s, 0);
808 809
809 ff_jpegls_decode_picture(s, predictor, point_transform, ilv); 810 ff_jpegls_decode_picture(s, predictor, point_transform, ilv);
810 }else{ 811 }else{
1073 #endif 1074 #endif
1074 *pbuf_ptr = buf_ptr; 1075 *pbuf_ptr = buf_ptr;
1075 return val; 1076 return val;
1076 } 1077 }
1077 1078
1078 static int mjpeg_decode_frame(AVCodecContext *avctx, 1079 int ff_mjpeg_decode_frame(AVCodecContext *avctx,
1079 void *data, int *data_size, 1080 void *data, int *data_size,
1080 uint8_t *buf, int buf_size) 1081 uint8_t *buf, int buf_size)
1081 { 1082 {
1082 MJpegDecodeContext *s = avctx->priv_data; 1083 MJpegDecodeContext *s = avctx->priv_data;
1083 uint8_t *buf_end, *buf_ptr; 1084 uint8_t *buf_end, *buf_ptr;
1235 s->progressive=0; 1236 s->progressive=0;
1236 if (mjpeg_decode_sof(s) < 0) 1237 if (mjpeg_decode_sof(s) < 0)
1237 return -1; 1238 return -1;
1238 break; 1239 break;
1239 case LSE: 1240 case LSE:
1240 if (ff_jpegls_decode_lse(s) < 0) 1241 if (!ENABLE_JPEGLS_DECODER || ff_jpegls_decode_lse(s) < 0)
1241 return -1; 1242 return -1;
1242 break; 1243 break;
1243 case EOI: 1244 case EOI:
1244 s->cur_scan = 0; 1245 s->cur_scan = 0;
1245 if ((s->buggy_avid && !s->interlaced) || s->restart_interval) 1246 if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
1471 1472
1472 /* EOI */ 1473 /* EOI */
1473 recoded[j++] = 0xFF; 1474 recoded[j++] = 0xFF;
1474 recoded[j++] = 0xD9; 1475 recoded[j++] = 0xD9;
1475 1476
1476 i = mjpeg_decode_frame(avctx, data, data_size, recoded, j); 1477 i = ff_mjpeg_decode_frame(avctx, data, data_size, recoded, j);
1477 1478
1478 av_free(recoded); 1479 av_free(recoded);
1479 1480
1480 #else 1481 #else
1481 /* SOF */ 1482 /* SOF */
1570 #endif 1571 #endif
1571 1572
1572 return i; 1573 return i;
1573 } 1574 }
1574 1575
1575 static int mjpeg_decode_end(AVCodecContext *avctx) 1576 int ff_mjpeg_decode_end(AVCodecContext *avctx)
1576 { 1577 {
1577 MJpegDecodeContext *s = avctx->priv_data; 1578 MJpegDecodeContext *s = avctx->priv_data;
1578 int i, j; 1579 int i, j;
1579 1580
1580 av_free(s->buffer); 1581 av_free(s->buffer);
1590 AVCodec mjpeg_decoder = { 1591 AVCodec mjpeg_decoder = {
1591 "mjpeg", 1592 "mjpeg",
1592 CODEC_TYPE_VIDEO, 1593 CODEC_TYPE_VIDEO,
1593 CODEC_ID_MJPEG, 1594 CODEC_ID_MJPEG,
1594 sizeof(MJpegDecodeContext), 1595 sizeof(MJpegDecodeContext),
1595 mjpeg_decode_init, 1596 ff_mjpeg_decode_init,
1596 NULL, 1597 NULL,
1597 mjpeg_decode_end, 1598 ff_mjpeg_decode_end,
1598 mjpeg_decode_frame, 1599 ff_mjpeg_decode_frame,
1599 CODEC_CAP_DR1, 1600 CODEC_CAP_DR1,
1600 NULL 1601 NULL
1601 }; 1602 };
1602 1603
1603 AVCodec thp_decoder = { 1604 AVCodec thp_decoder = {
1604 "thp", 1605 "thp",
1605 CODEC_TYPE_VIDEO, 1606 CODEC_TYPE_VIDEO,
1606 CODEC_ID_THP, 1607 CODEC_ID_THP,
1607 sizeof(MJpegDecodeContext), 1608 sizeof(MJpegDecodeContext),
1608 mjpeg_decode_init, 1609 ff_mjpeg_decode_init,
1609 NULL, 1610 NULL,
1610 mjpeg_decode_end, 1611 ff_mjpeg_decode_end,
1611 mjpeg_decode_frame, 1612 ff_mjpeg_decode_frame,
1612 CODEC_CAP_DR1, 1613 CODEC_CAP_DR1,
1613 NULL 1614 NULL
1614 }; 1615 };
1615 1616
1616 AVCodec mjpegb_decoder = { 1617 AVCodec mjpegb_decoder = {
1617 "mjpegb", 1618 "mjpegb",
1618 CODEC_TYPE_VIDEO, 1619 CODEC_TYPE_VIDEO,
1619 CODEC_ID_MJPEGB, 1620 CODEC_ID_MJPEGB,
1620 sizeof(MJpegDecodeContext), 1621 sizeof(MJpegDecodeContext),
1621 mjpeg_decode_init, 1622 ff_mjpeg_decode_init,
1622 NULL, 1623 NULL,
1623 mjpeg_decode_end, 1624 ff_mjpeg_decode_end,
1624 mjpegb_decode_frame, 1625 mjpegb_decode_frame,
1625 CODEC_CAP_DR1, 1626 CODEC_CAP_DR1,
1626 NULL 1627 NULL
1627 }; 1628 };
1628 1629
1629 AVCodec sp5x_decoder = { 1630 AVCodec sp5x_decoder = {
1630 "sp5x", 1631 "sp5x",
1631 CODEC_TYPE_VIDEO, 1632 CODEC_TYPE_VIDEO,
1632 CODEC_ID_SP5X, 1633 CODEC_ID_SP5X,
1633 sizeof(MJpegDecodeContext), 1634 sizeof(MJpegDecodeContext),
1634 mjpeg_decode_init, 1635 ff_mjpeg_decode_init,
1635 NULL, 1636 NULL,
1636 mjpeg_decode_end, 1637 ff_mjpeg_decode_end,
1637 sp5x_decode_frame, 1638 sp5x_decode_frame,
1638 CODEC_CAP_DR1, 1639 CODEC_CAP_DR1,
1639 NULL 1640 NULL
1640 }; 1641 };