[FFmpeg-devel] GSoC VQA v3 format80 modifications , please check

The Deep Explorer thedeepexplorer
Mon Apr 13 10:11:52 CEST 2009


Hi ,
   Attached is the modified format80 , I think the changes are
minor...Please have a look and proivide feedback...

static void decode_format80(const unsigned char *src, int src_size,
    unsigned char *dest, int dest_size, int check_size, int
check_modification) {

    int src_index = 0;
    int dest_index = 0;
    int count;
    int src_pos;
    unsigned char color;
    int i;

    while (src_index < src_size) {

        vqa_debug("      opcode %02X: ", src[src_index]);

        /* 0x80 means that frame is finished */
        if (src[src_index] == 0x80)
            return;

        if (dest_index >= dest_size) {
            av_log(NULL, AV_LOG_ERROR, "  VQA video: decode_format80
problem: dest_index (%d) exceeded dest_size (%d)\n",
                dest_index, dest_size);
            return;
        }

        if (src[src_index] == 0xFF) {

            src_index++;
            count = AV_RL16(&src[src_index]);
            src_index += 2;
            src_pos = AV_RL16(&src[src_index]);
            src_index += 2;
            vqa_debug("(1) copy %X bytes from absolute pos %X\n",
count, src_pos);
            CHECK_COUNT();
            for (i = 0; i < count; i++)
                dest[dest_index + i] = dest[src_pos + i];
            dest_index += count;

        } else if (src[src_index] == 0xFE) {

            src_index++;
            count = AV_RL16(&src[src_index]);
            src_index += 2;
            color = src[src_index++];
            vqa_debug("(2) set %X bytes to %02X\n", count, color);
            CHECK_COUNT();
            memset(&dest[dest_index], color, count);
            dest_index += count;

        } else if ((src[src_index] & 0xC0) == 0xC0) {

            count = (src[src_index++] & 0x3F) + 3;
            if(check_modification == 1){

              src_pos = dest_index - AV_RL16(&src[src_index]);
              if(src_pos < 0){
                 av_log(NULL, AV_LOG_ERROR, "  VQA video:
decode_format80 problem: src_pos (%d) underflow\n",
                         src_pos);
                 return;
              }
            }
            else{

              src_pos = AV_RL16(&src[src_index]);
            }
            src_index += 2;
            vqa_debug("(3) copy %X bytes from absolute pos %X\n",
count, src_pos);

            CHECK_COUNT();
            for (i = 0; i < count; i++)
                dest[dest_index + i] = dest[src_pos + i];
            dest_index += count;

        } else if (src[src_index] > 0x80) {

            count = src[src_index++] & 0x3F;
            vqa_debug("(4) copy %X bytes from source to dest\n", count);
            CHECK_COUNT();
            memcpy(&dest[dest_index], &src[src_index], count);
            src_index += count;
            dest_index += count;

        } else {

            count = ((src[src_index] & 0x70) >> 4) + 3;
            if(check_modification == 1){

              src_pos = dest_index -AV_RB16(&src[src_index]) & 0x0FFF;
              if(src_pos < 0){
                 av_log(NULL, AV_LOG_ERROR, "  VQA video:
decode_format80 problem: src_pos (%d) underflow\n",
                         src_pos);
                 return;
              }
            }
            else{

              src_pos = AV_RB16(&src[src_index]) & 0x0FFF;
            }

            src_pos = AV_RB16(&src[src_index]) & 0x0FFF;
            src_index += 2;
            vqa_debug("(5) copy %X bytes from relpos %X\n", count, src_pos);
            CHECK_COUNT();
            for (i = 0; i < count; i++)
                dest[dest_index + i] = dest[dest_index - src_pos + i];
            dest_index += count;
        }
    }


I think I have very little time left for the quals ,,though the only
things remains is the vector indexing algorithm which I still dont
know..and look forward to knowing
that,  I think it would be a small thing.
However, I will be working on this the whole day and try to get it to
work ...so that all the pieces work and VQA V3 can get decoded..

Thanks for all the help.
-tde



More information about the ffmpeg-devel mailing list