Mar 15, 2021, 16:09 by fnou...@gmail.com: > Signed-off-by: Florian Nouwt <fnou...@gmail.com> > --- > Changelog | 1 + > configure | 1 + > doc/general_contents.texi | 2 + > libavcodec/Makefile | 3 +- > libavcodec/actimagine.c | 1523 ++++++++++++++++++++++++++++++++++ > libavcodec/allcodecs.c | 1 + > libavcodec/codec_desc.c | 7 + > libavcodec/codec_id.h | 1 + > libavcodec/h264_cavlc.c | 135 +-- > libavcodec/h264_cavlc_data.c | 140 ++++ > libavcodec/h264_cavlc_data.h | 33 + > libavcodec/version.h | 2 +- > libavformat/riff.c | 2 + > 13 files changed, 1723 insertions(+), 128 deletions(-) > create mode 100644 libavcodec/actimagine.c > create mode 100644 libavcodec/h264_cavlc_data.c > create mode 100644 libavcodec/h264_cavlc_data.h > > +static void decode_dct(AVCodecContext *avctx, int x, int y, int plane, > + const int* level) > +{ > + int a, b, c, d, e, f; > + int dct[16]; > + int tmp[16]; > + ActimagineContext *s = avctx->priv_data; > + > + // dezigzag > + for (int i = 0; i < 16; i++) > + dct[zigzag4x4_tab[i]] = level[i]; > + > + // dequantize > + for (int i = 0; i < 2; i++) { > + for (int j = 0; j < 4; j++) { > + dct[4 * j + i] *= s->qtab[i][j]; > + dct[4 * j + i + 2] *= s->qtab[i][j]; > + } > + } > + > + dct[0] += 32;// rounding > + > + for (int i = 0; i < 4; i++) { > + a = dct[i * 4 + 0]; > + b = dct[i * 4 + 1]; > + c = dct[i * 4 + 2]; > + d = dct[i * 4 + 3]; > + a += c; > + c = a - c * 2; > + e = (b >> 1) - d; > + f = b + (d >> 1); > + tmp[ 0 + i] = a + f; > + tmp[ 4 + i] = c + e; > + tmp[ 8 + i] = c - e; > + tmp[12 + i] = a - f; > + } > + > + for (int i = 0; i < 4; i++) { > + a = tmp[i * 4 + 0]; > + b = tmp[i * 4 + 1]; > + c = tmp[i * 4 + 2]; > + d = tmp[i * 4 + 3]; > + a += c; > + c = a - c * 2; > + e = (b >> 1) - d; > + f = b + (d >> 1); > + PIXEL_CUR(s, plane, x + 0, y + i) > + = av_clip_uint8(PIXEL_CUR(s, plane, x + 0, y + i) + ((a + f) >> > 6)); > + PIXEL_CUR(s, plane, x + 1, y + i) > + = av_clip_uint8(PIXEL_CUR(s, plane, x + 1, y + i) + ((c + e) >> > 6)); > + PIXEL_CUR(s, plane, x + 2, y + i) > + = av_clip_uint8(PIXEL_CUR(s, plane, x + 2, y + i) + ((c - e) >> > 6)); > + PIXEL_CUR(s, plane, x + 3, y + i) > + = av_clip_uint8(PIXEL_CUR(s, plane, x + 3, y + i) + ((a - f) >> > 6)); > + } > +} >
This isn't really a DCT but a WHT approximation of one. We have some DSP functions with assembly written for this. Some have suggested that it's similar to H264's. The predictors also look similiar to it. Could you take a look whether you can reuse them (iwht4_1d in libavcodec/vp9dsp_template.c), or if not, maybe rename the function to decode_wht? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".