📄 iframecoder.m
字号:
function [RFrameY, RFrameU, RFrameV] = IFrameCoder(FrameY, FrameU, FrameV, StructParameter)
%h263编码
%输入 FrameY,FrameU,FrameV:原始图像数据,uint8
%输入 StructParameter: Qp,量化值(uint8),
% ImageRow,图像行数(uint32),ImageCol,图像列数(uint32)
%输出 RFrameY,RFrameU,RFrameV,重建帧,uint8
%
msg = nargchk(4,4,nargin);
if ~(isempty(msg)) %检查输入参数是否为4个
disp(msg)
return ;
end
Qp = StructParameter.Qp;
ImageRow = StructParameter.ImageRow;
ImageCol = StructParameter.ImageCol;
for i = 1:ImageRow/16
for j = 1:ImageCol/16
MBlockY = GetMacroBlockFromFrame(FrameY,i,j); %返回16x16 uint8
BlockU = GetBlockFromFrame(FrameU,i,j);%返回8x8 uint8
BlockV = GetBlockFromFrame(FrameV,i,j);%返回8x8 uint8
MBCoeffY = MacroDct2(MBlockY);
BCoeffU = BlockDct2(BlockU);
BCoeffV = BlockDct2(BlockV);
% close all;
% View3D(MBCoeffY);
MBQCoeffY = MacroQuant(MBCoeffY,Qp);
BQCoeffU = BlockQuant263(BCoeffU,Qp);
BQCoeffV = BlockQuant263(BCoeffV,Qp);
% View3D(MBQCoeffY);
RMBCoeffY = MacroDeQuant(MBQCoeffY,Qp);
RBCoeffU = BlockDeQuant263(BQCoeffU,Qp);
RBCoeffV = BlockDeQuant263(BQCoeffV,Qp);
RMBDataY = MacroIDct2(RMBCoeffY);
RBDataU = BlockIDct2(RBCoeffU);
RBDataV = BlockIDct2(RBCoeffV);
rindex_mrow = (i - 1) * 16 + 1;
rindex_mcol = (j - 1) * 16 + 1;
RFrameY(rindex_mrow:rindex_mrow + 15,rindex_mcol:rindex_mcol + 15) = uint8(RMBDataY);
rindex_brow = (i - 1) * 8 + 1;
rindex_bcol = (j - 1) * 8 + 1;
RFrameU(rindex_brow:rindex_brow + 7,rindex_bcol:rindex_bcol + 7) = uint8(RBDataU);
RFrameV(rindex_brow:rindex_brow + 7,rindex_bcol:rindex_bcol + 7) = uint8(RBDataV);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -