From: Arpi Date: Sat, 9 Feb 2002 01:23:41 +0000 (+0000) Subject: PATCH by Rik Snel X-Git-Tag: v0.5~18032 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=80e103d04cf938fc1f479347d0ab2f8c6e688b61;p=coroid%2Flibav_saccubus.git PATCH by Rik Snel this patch enhances the jpeg header writer. It can be asked to omit quantisation and huffman tables and it can write different horizontal and vertical sampling factors. (the last thing is useless for libavcodec itself (because libavcodec only handles YUV420P at ecoder level), but the values are initialized so that operation of libavcodec is not impaired) Originally committed as revision 290 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/mjpeg.c b/libavcodec/mjpeg.c index 4c4df7cb8..cb8634462 100644 --- a/libavcodec/mjpeg.c +++ b/libavcodec/mjpeg.c @@ -259,7 +259,7 @@ void mjpeg_picture_header(MpegEncContext *s) { put_marker(&s->pb, SOI); - jpeg_table_header(s); + if (s->mjpeg_write_tables) jpeg_table_header(s); put_marker(&s->pb, SOF0); @@ -271,20 +271,20 @@ void mjpeg_picture_header(MpegEncContext *s) /* Y component */ put_bits(&s->pb, 8, 1); /* component number */ - put_bits(&s->pb, 4, 2); /* H factor */ - put_bits(&s->pb, 4, 2); /* V factor */ + put_bits(&s->pb, 4, s->mjpeg_hsample[0]); /* H factor */ + put_bits(&s->pb, 4, s->mjpeg_vsample[0]); /* V factor */ put_bits(&s->pb, 8, 0); /* select matrix */ /* Cb component */ put_bits(&s->pb, 8, 2); /* component number */ - put_bits(&s->pb, 4, 1); /* H factor */ - put_bits(&s->pb, 4, 1); /* V factor */ + put_bits(&s->pb, 4, s->mjpeg_hsample[1]); /* H factor */ + put_bits(&s->pb, 4, s->mjpeg_vsample[1]); /* V factor */ put_bits(&s->pb, 8, 0); /* select matrix */ /* Cr component */ put_bits(&s->pb, 8, 3); /* component number */ - put_bits(&s->pb, 4, 1); /* H factor */ - put_bits(&s->pb, 4, 1); /* V factor */ + put_bits(&s->pb, 4, s->mjpeg_hsample[2]); /* H factor */ + put_bits(&s->pb, 4, s->mjpeg_vsample[2]); /* V factor */ put_bits(&s->pb, 8, 0); /* select matrix */ /* scan header */ diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 0d5695440..f43588cf4 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -283,6 +283,13 @@ int MPV_encode_init(AVCodecContext *avctx) case CODEC_ID_MJPEG: s->out_format = FMT_MJPEG; s->intra_only = 1; /* force intra only for jpeg */ + s->mjpeg_write_tables = 1; /* write all tables */ + s->mjpeg_vsample[0] = 2; /* set up default sampling factors */ + s->mjpeg_vsample[1] = 1; /* the only currently supported values */ + s->mjpeg_vsample[2] = 1; + s->mjpeg_hsample[0] = 2; + s->mjpeg_hsample[1] = 1; + s->mjpeg_hsample[2] = 1; if (mjpeg_init(s) < 0) return -1; break; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 70c962dd9..6cf4688d9 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -157,6 +157,10 @@ typedef struct MpegEncContext { /* MJPEG specific */ struct MJpegContext *mjpeg_ctx; + int mjpeg_vsample[3]; /* vertical sampling factors, default = {2, 1, 1} */ + int mjpeg_hsample[3]; /* horizontal sampling factors, default = {2, 1, 1} */ + int mjpeg_write_tables; /* do we want to have quantisation- and + huffmantables in the jpeg file ? */ /* MSMPEG4 specific */ int mv_table_index;