2726 {
2727
2728 int n = 0;
2730
2731
2733 int predictor;
2734 int dct_size;
2735
2736
2737 int plane_index = block > 3 ? block - 3 : 0;
2740
2741
2742 if (dct_size > 0) {
2744 if ((differential & (1 << (dct_size - 1))) != 0) {
2745 self->
block_data[0] = predictor + differential;
2746 }
2747 else {
2748 self->
block_data[0] = predictor + (-(1 << dct_size) | (differential + 1));
2749 }
2750 }
2751 else {
2753 }
2754
2755
2757
2758
2760
2762 n = 1;
2763 }
2764 else {
2766 }
2767
2768
2769 int level = 0;
2773
2775
2776 break;
2777 }
2778 if (coeff == 0xffff) {
2779
2782 if (level == 0) {
2784 }
2785 else if (level == 128) {
2787 }
2788 else if (level > 128) {
2789 level = level - 256;
2790 }
2791 }
2792 else {
2794 level = coeff & 0xff;
2796 level = -level;
2797 }
2798 }
2799
2801 if (n < 0 || n >= 64) {
2802 return;
2803 }
2804
2806 n++;
2807
2808
2809 level = (unsigned)level << 1;
2811 level += (level < 0 ? -1 : 1);
2812 }
2813 level = (level * self->
quantizer_scale * quant_matrix[de_zig_zagged]) >> 4;
2814 if ((level & 1) == 0) {
2815 level -= level > 0 ? 1 : -1;
2816 }
2817 if (level > 2047) {
2818 level = 2047;
2819 }
2820 else if (level < -2048) {
2821 level = -2048;
2822 }
2823
2824
2826 }
2827
2828
2830 int dw;
2831 int di;
2832
2833 if (block < 4) {
2837 if ((block & 1) != 0) {
2838 di += 8;
2839 }
2840 if ((block & 2) != 0) {
2842 }
2843 }
2844 else {
2848 }
2849
2851 int si = 0;
2853
2854 if (n == 1) {
2855 int clamped =
plm_clamp((s[0] + 128) >> 8);
2857 s[0] = 0;
2858 }
2859 else {
2863 }
2864 }
2865 else {
2866
2867 if (n == 1) {
2868 int value = (s[0] + 128) >> 8;
2870 s[0] = 0;
2871 }
2872 else {
2876 }
2877 }
2878}
void run(fl::u32 microseconds, ExecFlags flags)
Run selected task subsystems.
static const uint8_t PLM_VIDEO_PREMULTIPLIER_MATRIX[]
int plm_buffer_read(plm_buffer_t *self, int count) FL_NOEXCEPT
static const plm_vlc_uint_t PLM_VIDEO_DCT_COEFF[]
static uint8_t plm_clamp(int n) FL_NOEXCEPT
static const plm_vlc_t * PLM_VIDEO_DCT_SIZE[]
uint16_t plm_buffer_read_vlc_uint(plm_buffer_t *self, const plm_vlc_uint_t *table) FL_NOEXCEPT
static const uint8_t PLM_VIDEO_ZIG_ZAG[]
void plm_video_idct(int *block) FL_NOEXCEPT
int16_t plm_buffer_read_vlc(plm_buffer_t *self, const plm_vlc_t *table) FL_NOEXCEPT
plm_frame_t frame_current
uint8_t intra_quant_matrix[64]
uint8_t non_intra_quant_matrix[64]
constexpr int type_rank< T >::value
void * memset(void *s, int c, size_t n) FL_NOEXCEPT
#define PLM_BLOCK_SET(DEST, DEST_INDEX, DEST_WIDTH, SOURCE_INDEX, SOURCE_WIDTH, BLOCK_SIZE, OP)