diff --git a/codec.m b/codec.m index bfa7b7f1adf936bca05e1d09e9975a58f67f8979..7d8d77bb1bdc217bd061e74e8ef4d68d273c9285 100644 --- a/codec.m +++ b/codec.m @@ -29,7 +29,7 @@ p.addParameter('subSamp' , subSamp , @ischar); p.addParameter('bitDepth' , bitDepth , @isnumeric); p.addParameter('inColSpace' , 'rgb' , @ischar); p.addParameter('outColSpace', 'ycbcr' , @ischar); -p.addParameter('padding' , true , @islogical); +p.addParameter('padding' , 8 , @isnumeric); p.addParameter('encode' , true , @islogical); p.addParameter('decode' , true , @islogical); @@ -65,11 +65,11 @@ end % Write input yuv file if LFParams.encode - [imgSize,imgRes] = LF.write(LFRef,LFParams,'filename',LFParams.refFilename); + [imgSize,imgRes,imgSizePad] = LF.write(LFRef,LFParams,'filename',LFParams.refFilename); end % Convert inputs for HEVC -LFHEVCParams = LF.LFtoHEVC(imgSize,imgRes,LFParams,HEVCParams); +LFHEVCParams = LF.LFtoHEVC(imgSizePad,imgRes,LFParams,HEVCParams); % Encode frames using HEVC [nbBits,peaksnr] = HEVC.codec(LFHEVCParams,HEVCParams); diff --git a/pad.m b/pad.m index e8aad257ecf928561432df514d373b973977b228..1e26b76edec36ed71ed1e81833da2e09b8a4d201 100644 --- a/pad.m +++ b/pad.m @@ -1,17 +1,15 @@ -function [LFRef,LFSizePad] = pad(LFRef,blockSize) +function [LFRef,imgSizePad] = pad(LFRef,padding) %PAD Pad lightfield data % [LFRef,LFSizePad] = pad(LFRef,blockSize) LFSize = size(LFRef); -LFSize(3) = 0; imgSize = LFSize(1:3); imgRes = LFSize(4:end); -imgSizePad = ceil(imgSize./blockSize).*blockSize; +imgSizePad = ceil(imgSize./padding).*padding; +imgSizePad(3) = imgSize(3); -LFSizePad = [imgSizePad,imgRes]; - -padSize = LFSizePad-LFSize; +padSize = [imgSizePad-imgSize,zeros(1,numel(imgRes))]; padSizePre = floor(padSize/2); padSizePost = padSize - padSizePre; diff --git a/read.m b/read.m index 81d8c5ded313fa0df55f4617745fa17b1469e6e7..4c2eda78bcd1b787dae6359a434785f36baf8113 100644 --- a/read.m +++ b/read.m @@ -7,7 +7,7 @@ filename = fullfile(pwd,'sequence'); % Create input parser scheme p = inputParser; p.StructExpand = true; p.KeepUnmatched = true; p.addParameter('filename', filename, @ischar); -p.addParameter('padding' , false , @islogical); +p.addParameter('padding' , 1 , @isnumeric); % Parse arguments p.parse(varargin{:}); @@ -15,13 +15,14 @@ p.parse(varargin{:}); padding = p.Results.padding; % Recover frames -frames = yuv.read(imgSize,imgRes,varargin{:}); +imgSizePad = ceil(imgSize./padding).*padding; +imgSizePad(3) = imgSize(3); +frames = yuv.read(imgSizePad,imgRes,varargin{:}); % Recover LF LFRec = LF.fromSlices(frames); -if padding - LFRec = LF.unpad(LFRec,[imgSize,imgRes]); -end +% Undo padding +LFRec = LF.unpad(LFRec,imgSize); end \ No newline at end of file diff --git a/unpad.m b/unpad.m index b62c82582d4764a8f9462721ba877e033d7d98e1..f987f977e0703ff9eb22d84fb3beb9b5aebd7d6c 100644 --- a/unpad.m +++ b/unpad.m @@ -1,10 +1,12 @@ -function LFRef = unpad(LFRef,LFSize) +function LFRef = unpad(LFRef,imgSize) %UNPAD Remove padding from lightfield data % LFRef = unpad(LFRef,LFSize) LFSizePad = size(LFRef); +imgSizePad = LFSizePad(1:3); +imgRes = LFSizePad(4:end); -padSize = LFSizePad-LFSize; +padSize = [imgSizePad-imgSize,zeros(1,numel(imgRes))]; padSizePre = floor(padSize/2); padSizePost = padSize - padSizePre; diff --git a/write.m b/write.m index c31b48648b055e73c041812203b70dfe15e96a7d..f55c075b4a252c0252cb0d947441c0540de24607 100644 --- a/write.m +++ b/write.m @@ -1,4 +1,4 @@ -function [imgSize,imgRes] = write(LFRef,varargin) +function [imgSize,imgRes,imgSizePad] = write(LFRef,varargin) %WRITE Write lightfield 4D(u,v,x,y) data to yuv file % [LFSize,yuvSize] = WRITE(LFRef,varargin) @@ -7,7 +7,7 @@ filename = fullfile(pwd,'sequence'); % Create input parser scheme p = inputParser; p.StructExpand = true; p.KeepUnmatched = true; p.addParameter('filename', filename, @ischar); -p.addParameter('padding' , false , @islogical); +p.addParameter('padding' , 1 , @isnumeric); % Parse arguments p.parse(varargin{:}); @@ -22,9 +22,8 @@ m = utils.getMat(filename,true); m.imgSize = imgSize; m.imgRes = imgRes; -if padding - LFRef = LF.pad(LFRef,8); -end +% Do padding +[LFRef,imgSizePad] = LF.pad(LFRef,padding); % Change 5D LF to a collection of 2D frames frames = LF.toSlices(LFRef);