20141005
新手。
用eclipse对ffmpeg源码进行调试,利用makefile加载工程。
由于想要输出经过libavcodec编码的视频的DCT系数,所以主要关注的文件是mpegvideo.c。
mpegvideo.c中定义了视频编解码所需的一些函数,例如:MPV_decode_mb_internal()。
MPV_decode_mb_internal()可以完成帧间编码宏块的解压,如P-MB,S-MB。
MPV_decode_mb_internal()中可以看到如下代码
if(s->avctx->debug&FF_DEBUG_DCT_COEFF) {
/* print DCT coefficients */
int i,j;
av_log(s->avctx, AV_LOG_INFO, "DCT coeffs of MB at %dx%d:\n", s->mb_x, s->mb_y);
for(i=0; i<6; i++){
for(j=0; j<64; j++){
av_log(s->avctx, AV_LOG_INFO, "%5d",
block[i][s->idsp.idct_permutation[j]]);
}
av_log(s->avctx, AV_LOG_DEBUG, "\n");
}
}
这段代码是在debug时候用于在命令行中输出DCT系数的。且是量化后的dct系数。
此外Picture类型的变量,存储了帧(用于参考的帧,或缓存的帧,或解压后的帧等等),是使用非常多的一个数据类型。
此外还有IDCTDSPContext这个类型,也多处使用。