Le 14 juin 2024 17:33:16 GMT+03:00, James Almer <jamr...@gmail.com> a écrit : >On 6/12/2024 1:47 AM, Rémi Denis-Courmont wrote: >> --- >> configure | 4 ++-- >> libavcodec/mpegvideo.c | 46 +++++++++++------------------------------- >> 2 files changed, 14 insertions(+), 36 deletions(-) >> >> diff --git a/configure b/configure >> index 6baa9b0646..eb9d1b1f5d 100755 >> --- a/configure >> +++ b/configure >> @@ -2957,8 +2957,8 @@ ftr_decoder_select="adts_header" >> g2m_decoder_deps="zlib" >> g2m_decoder_select="blockdsp idctdsp jpegtables" >> g729_decoder_select="audiodsp" >> -h261_decoder_select="mpegvideodec" >> -h261_encoder_select="mpegvideoenc" >> +h261_decoder_select="h263dsp mpegvideodec" >> +h261_encoder_select="h263dsp mpegvideoenc" >> h263_decoder_select="h263_parser h263dsp mpegvideodec qpeldsp" >> h263_encoder_select="h263dsp mpegvideoenc" >> h263i_decoder_select="h263_decoder" >> diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c >> index 7af823b8bd..b35fd37083 100644 >> --- a/libavcodec/mpegvideo.c >> +++ b/libavcodec/mpegvideo.c >> @@ -201,13 +201,11 @@ static void >> dct_unquantize_mpeg2_inter_c(MpegEncContext *s, >> static void dct_unquantize_h263_intra_c(MpegEncContext *s, >> int16_t *block, int n, int qscale) >> { >> - int i, level, qmul, qadd; >> - int nCoeffs; >> + int qmul = qscale << 1; >> + int qadd, nCoeffs; >> av_assert2(s->block_last_index[n]>=0 || s->h263_aic); >> - qmul = qscale << 1; >> - >> if (!s->h263_aic) { >> block[0] *= n < 4 ? s->y_dc_scale : s->c_dc_scale; >> qadd = (qscale - 1) | 1; >> @@ -215,47 +213,24 @@ static void dct_unquantize_h263_intra_c(MpegEncContext >> *s, >> qadd = 0; >> } >> if(s->ac_pred) >> - nCoeffs=63; >> + nCoeffs = 64; >> else >> - nCoeffs= s->intra_scantable.raster_end[ s->block_last_index[n] ]; >> + nCoeffs = s->intra_scantable.raster_end[s->block_last_index[n]] + 1; >> - for(i=1; i<=nCoeffs; i++) { >> - level = block[i]; >> - if (level) { >> - if (level < 0) { >> - level = level * qmul - qadd; >> - } else { >> - level = level * qmul + qadd; >> - } >> - block[i] = level; >> - } >> - } >> + s->h263dsp.h263_dct_unquantize_intra(block, nCoeffs, qmul, qadd); > >Looking further into this, you're adding a function pointer call in a function >that's already called from a function pointer. And both x86 and arm have asm >optimized versions of this entire method, which includes all the setup before >the loop.
I am not interested in copying existing bad design. Note that the Arm code uses intrinsics. I don't want to use RVV intrinsics especially just for this. And x86 only has MMX. >Can't you do the same for riscv? Sure, RV can address fixed offsets up to +/-2 KiB. If someone *else* adds a assembler-friendly header file that defines the offsets to the relevant context fields, and rewrites the checkasm code to match, that is. > Is there anything preventing you from accessing fields at specific offsets > within MpegEncContext? My strong belief that that would be technically wrong, yes. _______________________________________________ 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".