summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/mjpeg.c
diff options
context:
space:
mode:
authorMike Melanson <mike@multimedia.cx>2004-02-01 05:31:16 +0000
committerMike Melanson <mike@multimedia.cx>2004-02-01 05:31:16 +0000
commit61d793ef13ac2ef8f9c2b41b71430f21fac80337 (patch)
tree69a1b20b01993b4d61fe1c8c2be33dd2e362a40c /src/libffmpeg/libavcodec/mjpeg.c
parentf707774ac5d48c02c6a36327304d88629b0e38f9 (diff)
downloadxine-lib-61d793ef13ac2ef8f9c2b41b71430f21fac80337.tar.gz
xine-lib-61d793ef13ac2ef8f9c2b41b71430f21fac80337.tar.bz2
sync to ffmpeg build 4699
CVS patchset: 6090 CVS date: 2004/02/01 05:31:16
Diffstat (limited to 'src/libffmpeg/libavcodec/mjpeg.c')
-rw-r--r--src/libffmpeg/libavcodec/mjpeg.c62
1 files changed, 29 insertions, 33 deletions
diff --git a/src/libffmpeg/libavcodec/mjpeg.c b/src/libffmpeg/libavcodec/mjpeg.c
index 5502083ab..1a948aa56 100644
--- a/src/libffmpeg/libavcodec/mjpeg.c
+++ b/src/libffmpeg/libavcodec/mjpeg.c
@@ -793,7 +793,7 @@ typedef struct MJpegDecodeContext {
VLC vlcs[2][4];
int qscale[4]; ///< quantizer scale calculated from quant_matrixes
- int org_width, org_height; /* size given at codec init */
+ int org_height; /* size given at codec init */
int first_picture; /* true if decoding first picture */
int interlaced; /* true if interlaced */
int bottom_field; /* true if bottom field */
@@ -855,7 +855,6 @@ static int mjpeg_decode_init(AVCodecContext *avctx)
/* ugly way to get the idct & scantable FIXME */
memset(&s2, 0, sizeof(MpegEncContext));
- s2.flags= avctx->flags;
s2.avctx= avctx;
// s2->out_format = FMT_MJPEG;
s2.width = 8;
@@ -874,7 +873,6 @@ static int mjpeg_decode_init(AVCodecContext *avctx)
return -1;
s->start_code = -1;
s->first_picture = 1;
- s->org_width = avctx->width;
s->org_height = avctx->height;
build_vlc(&s->vlcs[0][0], bits_dc_luminance, val_dc_luminance, 12);
@@ -884,7 +882,7 @@ static int mjpeg_decode_init(AVCodecContext *avctx)
if (avctx->flags & CODEC_FLAG_EXTERN_HUFF)
{
- printf("mjpeg: using external huffman table\n");
+ av_log(avctx, AV_LOG_INFO, "mjpeg: using external huffman table\n");
init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
mjpeg_decode_dht(s);
/* should check for error - but dunno */
@@ -987,7 +985,7 @@ static int mjpeg_decode_sof(MJpegDecodeContext *s)
if(s->bits==9 && !s->pegasus_rct) s->rct=1; //FIXME ugly
if (s->bits != 8 && !s->lossless){
- printf("only 8 bits/component accepted\n");
+ av_log(s->avctx, AV_LOG_ERROR, "only 8 bits/component accepted\n");
return -1;
}
height = get_bits(&s->gb, 16);
@@ -1027,13 +1025,17 @@ static int mjpeg_decode_sof(MJpegDecodeContext *s)
s->width = width;
s->height = height;
+ s->avctx->width = s->width;
+ s->avctx->height = s->height;
+
/* test interlaced mode */
if (s->first_picture &&
s->org_height != 0 &&
s->height < ((s->org_height * 3) / 4)) {
s->interlaced = 1;
// s->bottom_field = (s->interlace_polarity) ? 1 : 0;
- s->bottom_field = 0;
+ s->bottom_field = 0;
+ s->avctx->height *= 2;
}
s->qscale_table= av_mallocz((s->width+15)/16);
@@ -1049,8 +1051,10 @@ static int mjpeg_decode_sof(MJpegDecodeContext *s)
case 0x11:
if(s->rgb){
s->avctx->pix_fmt = PIX_FMT_RGBA32;
- }else
+ }else if(s->nb_components==3)
s->avctx->pix_fmt = PIX_FMT_YUV444P;
+ else
+ s->avctx->pix_fmt = PIX_FMT_GRAY8;
break;
case 0x21:
s->avctx->pix_fmt = PIX_FMT_YUV422P;
@@ -1066,7 +1070,7 @@ static int mjpeg_decode_sof(MJpegDecodeContext *s)
s->picture.reference= 0;
if(s->avctx->get_buffer(s->avctx, &s->picture) < 0){
- fprintf(stderr, "get_buffer() failed\n");
+ av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return -1;
}
s->picture.pict_type= I_TYPE;
@@ -1369,7 +1373,7 @@ static int mjpeg_decode_sos(MJpegDecodeContext *s)
return -1;
}
/* XXX: only interleaved scan accepted */
- if (nb_components != 3)
+ if (nb_components != s->nb_components)
{
dprintf("decode_sos: components(%d) mismatch\n", nb_components);
return -1;
@@ -1444,7 +1448,7 @@ static int mjpeg_decode_sos(MJpegDecodeContext *s)
}
if(s->avctx->debug & FF_DEBUG_PICT_INFO)
- printf("%s %s p:%d >>:%d\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "", predictor, point_transform);
+ av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "", predictor, point_transform);
if(s->lossless){
if(s->rgb){
@@ -1489,7 +1493,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
len -= 6;
if(s->avctx->debug & FF_DEBUG_STARTCODE){
- printf("APPx %8X\n", id);
+ av_log(s->avctx, AV_LOG_DEBUG, "APPx %8X\n", id);
}
/* buggy AVID, it puts EOI only at every 10th frame */
@@ -1504,7 +1508,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
4bytes field_size
4bytes field_size_less_padding
*/
-// s->buggy_avid = 1;
+ s->buggy_avid = 1;
// if (s->first_picture)
// printf("mjpeg: workarounding buggy AVID\n");
s->interlace_polarity = get_bits(&s->gb, 8);
@@ -1525,7 +1529,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
{
int t_w, t_h;
skip_bits(&s->gb, 8); /* the trailing zero-byte */
- printf("mjpeg: JFIF header found (version: %x.%x)\n",
+ av_log(s->avctx, AV_LOG_INFO, "mjpeg: JFIF header found (version: %x.%x)\n",
get_bits(&s->gb, 8), get_bits(&s->gb, 8));
skip_bits(&s->gb, 8);
@@ -1546,7 +1550,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
if (id == ff_get_fourcc("Adob") && (get_bits(&s->gb, 8) == 'e'))
{
- printf("mjpeg: Adobe header found\n");
+ av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found\n");
skip_bits(&s->gb, 16); /* version */
skip_bits(&s->gb, 16); /* flags0 */
skip_bits(&s->gb, 16); /* flags1 */
@@ -1556,7 +1560,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
}
if (id == ff_get_fourcc("LJIF")){
- printf("Pegasus lossless jpeg header found\n");
+ av_log(s->avctx, AV_LOG_INFO, "Pegasus lossless jpeg header found\n");
skip_bits(&s->gb, 16); /* version ? */
skip_bits(&s->gb, 16); /* unknwon always 0? */
skip_bits(&s->gb, 16); /* unknwon always 0? */
@@ -1571,7 +1575,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
s->pegasus_rct=1;
break;
default:
- printf("unknown colorspace\n");
+ av_log(s->avctx, AV_LOG_ERROR, "unknown colorspace\n");
}
len -= 9;
goto out;
@@ -1596,14 +1600,14 @@ static int mjpeg_decode_app(MJpegDecodeContext *s)
skip_bits(&s->gb, 32); /* data off */
#endif
if (s->first_picture)
- printf("mjpeg: Apple MJPEG-A header found\n");
+ av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
}
}
out:
/* slow but needed for extreme adobe jpegs */
if (len < 0)
- printf("mjpeg: error, decode_app parser read over the end\n");
+ av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error, decode_app parser read over the end\n");
while(--len > 0)
skip_bits(&s->gb, 8);
@@ -1626,7 +1630,7 @@ static int mjpeg_decode_com(MJpegDecodeContext *s)
else
cbuf[i] = 0;
- printf("mjpeg comment: '%s'\n", cbuf);
+ av_log(s->avctx, AV_LOG_INFO, "mjpeg comment: '%s'\n", cbuf);
/* buggy avid, it puts EOI only at every 10th frame */
if (!strcmp(cbuf, "AVID"))
@@ -1766,7 +1770,7 @@ static int mjpeg_decode_frame(AVCodecContext *avctx,
s->start_code = start_code;
if(s->avctx->debug & FF_DEBUG_STARTCODE){
- printf("startcode: %X\n", start_code);
+ av_log(s->avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
}
/* process markers */
@@ -1791,7 +1795,7 @@ static int mjpeg_decode_frame(AVCodecContext *avctx,
break;
case DHT:
if(mjpeg_decode_dht(s) < 0){
- fprintf(stderr, "huffman table decode error\n");
+ av_log(s->avctx, AV_LOG_ERROR, "huffman table decode error\n");
return -1;
}
break;
@@ -1818,10 +1822,6 @@ eoi_parser:
}
*picture = s->picture;
*data_size = sizeof(AVFrame);
- avctx->height = s->height;
- if (s->interlaced)
- avctx->height *= 2;
- avctx->width = s->width;
if(!s->lossless){
picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
@@ -1829,7 +1829,7 @@ eoi_parser:
picture->qscale_table= s->qscale_table;
memset(picture->qscale_table, picture->quality, (s->width+15)/16);
if(avctx->debug & FF_DEBUG_QP)
- printf("QP: %d\n", picture->quality);
+ av_log(s->avctx, AV_LOG_DEBUG, "QP: %d\n", picture->quality);
picture->quality*= FF_QP2LAMBDA;
}
@@ -1858,7 +1858,7 @@ eoi_parser:
case SOF14:
case SOF15:
case JPG:
- printf("mjpeg: unsupported coding type (%x)\n", start_code);
+ av_log(s->avctx, AV_LOG_ERROR, "mjpeg: unsupported coding type (%x)\n", start_code);
break;
// default:
// printf("mjpeg: unsupported marker (%x)\n", start_code);
@@ -1976,10 +1976,6 @@ read_header:
*picture= s->picture;
*data_size = sizeof(AVFrame);
- avctx->height = s->height;
- if (s->interlaced)
- avctx->height *= 2;
- avctx->width = s->width;
if(!s->lossless){
picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
@@ -1987,7 +1983,7 @@ read_header:
picture->qscale_table= s->qscale_table;
memset(picture->qscale_table, picture->quality, (s->width+15)/16);
if(avctx->debug & FF_DEBUG_QP)
- printf("QP: %d\n", picture->quality);
+ av_log(avctx, AV_LOG_DEBUG, "QP: %d\n", picture->quality);
picture->quality*= FF_QP2LAMBDA;
}
@@ -2148,7 +2144,7 @@ static int sp5x_decode_frame(AVCodecContext *avctx,
s->mb_width = (s->width * s->h_max * 8 -1) / (s->h_max * 8);
s->mb_height = (s->height * s->v_max * 8 -1) / (s->v_max * 8);
- init_get_bits(&s->gb, buf, buf_size*8);
+ init_get_bits(&s->gb, buf+14, (buf_size-14)*8);
return mjpeg_decode_scan(s);
#endif