首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

诚心求教,XVID解码程序移植出现问题。

诚心求教,XVID解码程序移植出现问题。

诚心求教,XVID解码程序移植出现问题。

我是一个学生,最近在跟老师做一个dsp的项目,也就刚做了两个月,最近卡在一个地方,希望各位有经验的前辈能多多提醒。
环境:DEC6713  ccs2.20.18
我是要把XVID的解码算法移植到我所作的基于BIOS实时系统的程序里面,之前的XVID算法部分是由一个师兄弄好了的,单独在dsp上跑是成功的,但由于它是使用jtag线从主机往dsp传送数据,所以速度非常慢,我所作的基于dsp/bios的程序正式利于板子上的usb2.0的接口来传送数据,这样就快乐很多,但当我把XVID那部分程序加到我的程序里面是,却发现XVID的程序不能像以前那样运行,我跟踪了运行步骤,发现他们的运行过程都已经不一样了。
程序如下:
之前的代码是:
int main(int argc, char *argv[])
{
。。。。。。。。
。。。。。。。。
useful_bytes = fread(mp4_buffer, 1, BUFFER_SIZE, in_file);
。。。。。。。。。。。。。。。。。。。。。。。。。
do {
used_bytes = dec_main(mp4_ptr, out_buffer, useful_bytes, &xvid_dec_stats);
if(xvid_dec_stats.type == XVID_TYPE_VOL) {
  /* Check if old buffer is smaller */
if(XDIM*YDIM < xvid_dec_stats.data.vol.width*xvid_dec_stats.data.vol.height) {

                /* Copy new witdh and new height from the vol structure */
        XDIM = xvid_dec_stats.data.vol.width;
        YDIM = xvid_dec_stats.data.vol.height;
        /* Free old output buffer*/
        if(out_buffer) free(out_buffer);
        /* Allocate the new buffer */
        out_buffer = (unsigned char*)malloc(XDIM*YDIM*4);
        if(out_buffer == NULL)
                goto free_all_memory;

        fprintf(stderr, "Resized frame buffer to %dx%d\n", XDIM, YDIM);
        }
}
                                }
                        }                        /* Update buffer pointers */
if(used_bytes > 0) {
                mp4_ptr += used_bytes;
                useful_bytes -= used_bytes;

        /* Total size */
                totalsize += used_bytes;
        }

} while (xvid_dec_stats.type <= 0 && useful_bytes > 0);
。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。
fwrite(out_buffer, 1, XDIM*YDIM+XDIM*YDIM/2, out_file);
。。。。。。。。。。。。。。。。。。。。。。。
}

接上面的。。。


我主要改动了两个地方:
把useful_bytes = fread(mp4_buffer, 1, BUFFER_SIZE, in_file);
改成了:useful_bytes = readMP4Data(LOOP_BUFFER_SIZE,mp4_buffer,INLOOP);
readMP4Data是我自己写的函数,就是把之前从usb读到的数据在在放到到mp4_buffer中
之后的
used_bytes = dec_main(mp4_ptr, out_buffer, useful_bytes, &xvid_dec_stats);
就不做改变。
最后就是把fwrite函数改称我自己的一个函数

但这样下来就发现dec_main()函数每次的运行结果就跟之前的不同了,最后结果也是错误的

我不懂为什么会这样 ,这些改动会导致函数运行的不同?另外,像fread和fwrite这样的一些函数在我的程序了是无法运行的,但之前是没问题的,难道是我的stack和heap设置不对?

学习不久,可能问题会比较幼稚,但这几天查了些资料也没搞明白,还请各位前辈能多多提点一下。。。
返回列表