mirror of https://git.ffmpeg.org/ffmpeg.git
clamp intra matrix to 8bit for mjpeg (workaround for qscale>=25)
Originally committed as revision 451 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
723106b279
commit
a69b930cd3
|
@ -902,4 +902,6 @@ void *av_mallocz(int size);
|
||||||
/* math */
|
/* math */
|
||||||
int ff_gcd(int a, int b);
|
int ff_gcd(int a, int b);
|
||||||
|
|
||||||
|
#define CLAMP_TO_8BIT(d) ((d > 0xff) ? 0xff : (d < 0) ? 0 : d)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -388,6 +388,8 @@ void mjpeg_picture_header(MpegEncContext *s)
|
||||||
{
|
{
|
||||||
put_marker(&s->pb, SOI);
|
put_marker(&s->pb, SOI);
|
||||||
|
|
||||||
|
if (!s->mjpeg_data_only_frames)
|
||||||
|
{
|
||||||
jpeg_put_comments(s);
|
jpeg_put_comments(s);
|
||||||
|
|
||||||
if (s->mjpeg_write_tables) jpeg_table_header(s);
|
if (s->mjpeg_write_tables) jpeg_table_header(s);
|
||||||
|
@ -425,6 +427,7 @@ void mjpeg_picture_header(MpegEncContext *s)
|
||||||
#else
|
#else
|
||||||
put_bits(&s->pb, 8, 0); /* select matrix */
|
put_bits(&s->pb, 8, 0); /* select matrix */
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* scan header */
|
/* scan header */
|
||||||
put_marker(&s->pb, SOS);
|
put_marker(&s->pb, SOS);
|
||||||
|
|
|
@ -427,6 +427,7 @@ int MPV_encode_init(AVCodecContext *avctx)
|
||||||
s->out_format = FMT_MJPEG;
|
s->out_format = FMT_MJPEG;
|
||||||
s->intra_only = 1; /* force intra only for jpeg */
|
s->intra_only = 1; /* force intra only for jpeg */
|
||||||
s->mjpeg_write_tables = 1; /* write all tables */
|
s->mjpeg_write_tables = 1; /* write all tables */
|
||||||
|
s->mjpeg_data_only_frames = 0; /* write all the needed headers */
|
||||||
s->mjpeg_vsample[0] = 2; /* set up default sampling factors */
|
s->mjpeg_vsample[0] = 2; /* set up default sampling factors */
|
||||||
s->mjpeg_vsample[1] = 1; /* the only currently supported values */
|
s->mjpeg_vsample[1] = 1; /* the only currently supported values */
|
||||||
s->mjpeg_vsample[2] = 1;
|
s->mjpeg_vsample[2] = 1;
|
||||||
|
@ -1658,7 +1659,7 @@ static void encode_picture(MpegEncContext *s, int picture_number)
|
||||||
/* for mjpeg, we do include qscale in the matrix */
|
/* for mjpeg, we do include qscale in the matrix */
|
||||||
s->intra_matrix[0] = default_intra_matrix[0];
|
s->intra_matrix[0] = default_intra_matrix[0];
|
||||||
for(i=1;i<64;i++)
|
for(i=1;i<64;i++)
|
||||||
s->intra_matrix[i] = (default_intra_matrix[i] * s->qscale) >> 3;
|
s->intra_matrix[i] = CLAMP_TO_8BIT((default_intra_matrix[i] * s->qscale) >> 3);
|
||||||
convert_matrix(s->q_intra_matrix, s->q_intra_matrix16,
|
convert_matrix(s->q_intra_matrix, s->q_intra_matrix16,
|
||||||
s->q_intra_matrix16_bias, s->intra_matrix, s->intra_quant_bias);
|
s->q_intra_matrix16_bias, s->intra_matrix, s->intra_quant_bias);
|
||||||
}
|
}
|
||||||
|
|
|
@ -332,6 +332,7 @@ typedef struct MpegEncContext {
|
||||||
int mjpeg_hsample[3]; /* horizontal 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
|
int mjpeg_write_tables; /* do we want to have quantisation- and
|
||||||
huffmantables in the jpeg file ? */
|
huffmantables in the jpeg file ? */
|
||||||
|
int mjpeg_data_only_frames; /* frames only with SOI, SOS and EOI markers */
|
||||||
|
|
||||||
/* MSMPEG4 specific */
|
/* MSMPEG4 specific */
|
||||||
int mv_table_index;
|
int mv_table_index;
|
||||||
|
|
Loading…
Reference in New Issue