⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indeo3.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 C
📖 第 1 页 / 共 3 页
字号:
    }    cur_frm_pos = cur + width * strip->ypos + strip->xpos;    if((blks_width = strip->width) < 0)       blks_width += 3;    blks_width >>= 2;    blks_height = strip->height;    if(ref_vectors != NULL) {      ref_frm_pos = ref + (ref_vectors[0] + strip->ypos) * width +        ref_vectors[1] + strip->xpos;    } else       ref_frm_pos = cur_frm_pos - width_tbl[4];    if(cmd == 2) {      if(bit_pos <= 0) {        bit_pos = 8;        bit_buf = *buf1++;      }      bit_pos -= 2;      cmd = (bit_buf >> bit_pos) & 0x03;      if(cmd == 0 || ref_vectors != NULL) {        for(lp1 = 0; lp1 < blks_width; lp1++) {          for(i = 0, j = 0; i < blks_height; i++, j += width_tbl[1])            ((uint32_t *)cur_frm_pos)[j] = ((uint32_t *)ref_frm_pos)[j];          cur_frm_pos += 4;          ref_frm_pos += 4;        }      } else if(cmd != 1)         return;    } else {      k = *buf1 >> 4;      j = *buf1 & 0x0f;      buf1++;      lv = j + fflags2;      if((lv - 8) <= 7 && (k == 0 || k == 3 || k == 10)) {        cp2 = s->ModPred + ((lv - 8) << 7);        cp = ref_frm_pos;        for(i = 0; i < blks_width << 2; i++) {             int v = *cp >> 1;            *(cp++) = cp2[v];         }      }      if(k == 1 || k == 4) {        lv = (hdr[j] & 0xf) + fflags2;        correction_type_sp[0] = s->corrector_type + (lv << 8);        correction_lp[0] = correction + (lv << 8);        lv = (hdr[j] >> 4) + fflags2;        correction_lp[1] = correction + (lv << 8);        correction_type_sp[1] = s->corrector_type + (lv << 8);      } else {        correctionloworder_lp[0] = correctionloworder_lp[1] = correctionloworder + (lv << 8);        correctionhighorder_lp[0] = correctionhighorder_lp[1] = correctionhighorder + (lv << 8);        correction_type_sp[0] = correction_type_sp[1] = s->corrector_type + (lv << 8);        correction_lp[0] = correction_lp[1] = correction + (lv << 8);      }      switch(k) {        case 1:        case 0:                    /********** CASE 0 **********/          for( ; blks_height > 0; blks_height -= 4) {            for(lp1 = 0; lp1 < blks_width; lp1++) {              for(lp2 = 0; lp2 < 4; ) {                k = *buf1++;                cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2];                ref_lp = ((uint32_t *)ref_frm_pos) + width_tbl[lp2];                switch(correction_type_sp[0][k]) {                  case 0:                    *cur_lp = ((*ref_lp >> 1) + correction_lp[lp2 & 0x01][k]) << 1;                    lp2++;                    break;                  case 1:                    ((unsigned short *)cur_lp)[0] = ((((unsigned short *)(ref_lp))[0] >> 1)                      + correction_lp[lp2 & 0x01][*buf1++]) << 1;                    ((unsigned short *)cur_lp)[1] = ((((unsigned short *)(ref_lp))[1] >> 1)                      + correction_lp[lp2 & 0x01][k]) << 1;                    lp2++;                    break;                  case 2:                    if(lp2 == 0) {                      for(i = 0, j = 0; i < 2; i++, j += width_tbl[1])                        cur_lp[j] = ref_lp[j];                      lp2 += 2;                    }                    break;                  case 3:                    if(lp2 < 2) {                      for(i = 0, j = 0; i < (3 - lp2); i++, j += width_tbl[1])                        cur_lp[j] = ref_lp[j];                      lp2 = 3;                    }                    break;                  case 8:                    if(lp2 == 0) {                      RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)                      if(rle_v1 == 1 || ref_vectors != NULL) {                        for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])                          cur_lp[j] = ref_lp[j];                      }                      RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)                      break;                    } else {                      rle_v1 = 1;                      rle_v2 = *buf1 - 1;                    }                  case 5:                      LP2_CHECK(buf1,rle_v3,lp2)                  case 4:                    for(i = 0, j = 0; i < (4 - lp2); i++, j += width_tbl[1])                      cur_lp[j] = ref_lp[j];                    lp2 = 4;                    break;                  case 7:                    if(rle_v3 != 0)                       rle_v3 = 0;                    else {                      buf1--;                      rle_v3 = 1;                    }                  case 6:                    if(ref_vectors != NULL) {                      for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])                        cur_lp[j] = ref_lp[j];                    }                    lp2 = 4;                    break;                  case 9:                    lv1 = *buf1++;                    lv = (lv1 & 0x7F) << 1;                    lv += (lv << 8);                    lv += (lv << 16);                    for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])                      cur_lp[j] = lv;                    LV1_CHECK(buf1,rle_v3,lv1,lp2)                    break;                  default:                     return;                }              }              cur_frm_pos += 4;              ref_frm_pos += 4;            }            cur_frm_pos += ((width - blks_width) * 4);            ref_frm_pos += ((width - blks_width) * 4);          }          break;        case 4:        case 3:                    /********** CASE 3 **********/          if(ref_vectors != NULL)             return;          flag1 = 1;          for( ; blks_height > 0; blks_height -= 8) {            for(lp1 = 0; lp1 < blks_width; lp1++) {              for(lp2 = 0; lp2 < 4; ) {                k = *buf1++;                cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2 * 2];                ref_lp = ((uint32_t *)cur_frm_pos) + width_tbl[(lp2 * 2) - 1];                switch(correction_type_sp[lp2 & 0x01][k]) {                  case 0:                    cur_lp[width_tbl[1]] = ((*ref_lp >> 1) + correction_lp[lp2 & 0x01][k]) << 1;                    if(lp2 > 0 || flag1 == 0 || strip->ypos != 0)                      cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                    else                      cur_lp[0] = ((*ref_lp >> 1) + correction_lp[lp2 & 0x01][k]) << 1;                    lp2++;                    break;                  case 1:                    ((unsigned short *)cur_lp)[width_tbl[2]] =                      ((((unsigned short *)ref_lp)[0] >> 1) + correction_lp[lp2 & 0x01][*buf1++]) << 1;                    ((unsigned short *)cur_lp)[width_tbl[2]+1] =                      ((((unsigned short *)ref_lp)[1] >> 1) + correction_lp[lp2 & 0x01][k]) << 1;                    if(lp2 > 0 || flag1 == 0 || strip->ypos != 0)                      cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                    else                      cur_lp[0] = cur_lp[width_tbl[1]];                    lp2++;                    break;                  case 2:                    if(lp2 == 0) {                      for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])                        cur_lp[j] = *ref_lp;                      lp2 += 2;                    }                    break;                  case 3:                    if(lp2 < 2) {                      for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1])                        cur_lp[j] = *ref_lp;                      lp2 = 3;                    }                    break;                  case 6:                    lp2 = 4;                    break;                  case 7:                    if(rle_v3 != 0)                       rle_v3 = 0;                    else {                      buf1--;                      rle_v3 = 1;                    }                    lp2 = 4;                    break;                  case 8:                    if(lp2 == 0) {                      RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)                      if(rle_v1 == 1) {                        for(i = 0, j = 0; i < 8; i++, j += width_tbl[1])                          cur_lp[j] = ref_lp[j];                      }                      RLE_V2_CHECK(buf1,rle_v2, rle_v3,lp2)                      break;                    } else {                      rle_v2 = (*buf1) - 1;                      rle_v1 = 1;                    }                  case 5:                      LP2_CHECK(buf1,rle_v3,lp2)                  case 4:                    for(i = 0, j = 0; i < 8 - (lp2 * 2); i++, j += width_tbl[1])                      cur_lp[j] = *ref_lp;                    lp2 = 4;                    break;                  case 9:                    av_log(s->avctx, AV_LOG_ERROR, "UNTESTED.\n");                    lv1 = *buf1++;                    lv = (lv1 & 0x7F) << 1;                    lv += (lv << 8);                    lv += (lv << 16);                    for(i = 0, j = 0; i < 4; i++, j += width_tbl[1])                      cur_lp[j] = lv;                    LV1_CHECK(buf1,rle_v3,lv1,lp2)                    break;                  default:                     return;                }              }              cur_frm_pos += 4;            }            cur_frm_pos += (((width * 2) - blks_width) * 4);            flag1 = 0;          }          break;        case 10:                    /********** CASE 10 **********/          if(ref_vectors == NULL) {            flag1 = 1;            for( ; blks_height > 0; blks_height -= 8) {              for(lp1 = 0; lp1 < blks_width; lp1 += 2) {                for(lp2 = 0; lp2 < 4; ) {                  k = *buf1++;                  cur_lp = ((uint32_t *)cur_frm_pos) + width_tbl[lp2 * 2];                  ref_lp = ((uint32_t *)cur_frm_pos) + width_tbl[(lp2 * 2) - 1];                  lv1 = ref_lp[0];                  lv2 = ref_lp[1];                  if(lp2 == 0 && flag1 != 0) {                    lv1 = lv1 & 0x00FF00FF;                    lv1 = (lv1 << 8) | lv1;                    lv2 = lv2 & 0x00FF00FF;                    lv2 = (lv2 << 8) | lv2;                  }                  switch(correction_type_sp[lp2 & 0x01][k]) {                    case 0:                      cur_lp[width_tbl[1]] = ((lv1 >> 1) + correctionloworder_lp[lp2 & 0x01][k]) << 1;                      cur_lp[width_tbl[1]+1] = ((lv2 >> 1) + correctionhighorder_lp[lp2 & 0x01][k]) << 1;                      if(lp2 > 0 || strip->ypos != 0 || flag1 == 0) {                        cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                        cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;                      } else {                        cur_lp[0] = cur_lp[width_tbl[1]];                        cur_lp[1] = cur_lp[width_tbl[1]+1];                      }                      lp2++;                      break;                    case 1:                      cur_lp[width_tbl[1]] = ((lv1 >> 1) + correctionloworder_lp[lp2 & 0x01][*buf1++]) << 1;                      cur_lp[width_tbl[1]+1] = ((lv2 >> 1) + correctionloworder_lp[lp2 & 0x01][k]) << 1;                      if(lp2 > 0 || strip->ypos != 0 || flag1 == 0) {                        cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                        cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;                      } else {                        cur_lp[0] = cur_lp[width_tbl[1]];                        cur_lp[1] = cur_lp[width_tbl[1]+1];                      }                      lp2++;                      break;                    case 2:                      if(lp2 == 0) {                        if(flag1 != 0) {                          for(i = 0, j = width_tbl[1]; i < 3; i++, j += width_tbl[1]) {                            cur_lp[j] = lv1;                            cur_lp[j+1] = lv2;                          }                          cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                          cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;                        } else {                          for(i = 0, j = 0; i < 4; i++, j += width_tbl[1]) {                            cur_lp[j] = lv1;                            cur_lp[j+1] = lv2;                          }                        }                        lp2 += 2;                      }                      break;                    case 3:                      if(lp2 < 2) {                        if(lp2 == 0 && flag1 != 0) {                          for(i = 0, j = width_tbl[1]; i < 5; i++, j += width_tbl[1]) {                            cur_lp[j] = lv1;                            cur_lp[j+1] = lv2;                          }                          cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                          cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;                        } else {                          for(i = 0, j = 0; i < 6 - (lp2 * 2); i++, j += width_tbl[1]) {                            cur_lp[j] = lv1;                            cur_lp[j+1] = lv2;                          }                        }                        lp2 = 3;                      }                      break;                    case 8:                      if(lp2 == 0) {                        RLE_V3_CHECK(buf1,rle_v1,rle_v2,rle_v3)                        if(rle_v1 == 1) {                          if(flag1 != 0) {                            for(i = 0, j = width_tbl[1]; i < 7; i++, j += width_tbl[1]) {                              cur_lp[j] = lv1;                              cur_lp[j+1] = lv2;                            }                            cur_lp[0] = ((cur_lp[-width_tbl[1]] >> 1) + (cur_lp[width_tbl[1]] >> 1)) & 0xFEFEFEFE;                            cur_lp[1] = ((cur_lp[-width_tbl[1]+1] >> 1) + (cur_lp[width_tbl[1]+1] >> 1)) & 0xFEFEFEFE;                          } else {                            for(i = 0, j = 0; i < 8; i++, j += width_tbl[1]) {                              cur_lp[j] = lv1;                              cur_lp[j+1] = lv2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -