On 27 March 2017 at 19:08, Paul B Mahol <one...@gmail.com> wrote: > Signed-off-by: Paul B Mahol <one...@gmail.com> > --- > libavcodec/dnxhdenc.c | 227 ++++++++++++++++++++++++++++++ > +++++--------------- > libavcodec/dnxhdenc.h | 6 +- > 2 files changed, 163 insertions(+), 70 deletions(-) > > diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c > index 33f25fb..6716b74 100644 > --- a/libavcodec/dnxhdenc.c > +++ b/libavcodec/dnxhdenc.c > @@ -23,6 +23,8 @@ > * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > 02110-1301 USA > */ > > +#define ASSERT_LEVEL 10 >
Debug code? > + > #include "libavutil/attributes.h" > #include "libavutil/internal.h" > #include "libavutil/opt.h" > @@ -112,6 +114,37 @@ void dnxhd_10bit_get_pixels_8x4_sym(int16_t > *av_restrict block, > memcpy(block + 4 * 8, pixels + 3 * line_size, 8 * sizeof(*block)); > } > > +static int dnxhd_10bit_dct_quantize_444(MpegEncContext *ctx, int16_t > *block, > + int n, int qscale, int *overflow) > +{ > + const uint8_t *scantable= ctx->intra_scantable.scantable; > + const int *qmat = n<4 ? ctx->q_intra_matrix[qscale] : > ctx->q_chroma_intra_matrix[qscale]; > + int last_non_zero = 0; > + int i; > + > + ctx->fdsp.fdct(block); > + > + // Divide by 4 with rounding, to compensate scaling of DCT > coefficients > + block[0] = (block[0] + 2) >> 2; > + > + for (i = 1; i < 64; ++i) { > + int j = scantable[i]; > + int sign = FF_SIGNBIT(block[j]); > + int level = (block[j] ^ sign) - sign; > Wait, what? This just makes level == block[j]. > + level = level * qmat[j] >> 16; > + block[j] = (level ^ sign) - sign; > Don't use this to sign-ify something, compilers have long been smart enough to optimize sign * value. Just do block[j] = (block[j] * qmat[j] >> 16); Right shifting signed stuff is defined _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel