📄 dopreciseseektests.m
字号:
function doPreciseSeekTests(varargin)%DOPRECISESEEKTESTS(...)% Performs a set of tests on a video file that are designed to succeed only if% precise seeking actually works on that file. Note that if a file has a small% number of frames and/or only a small variance in bitrate between frames, it% may pass the precise seek tests when other files using the same codec may % not.%% Any arguments given are passed directly to the videoReader constructor.%%Examples:% doPreciseSeekTests% doPreciseSeekTests ffmpegPopen2 % linux & similar% doPreciseSeekTests ffmpegDirect % ...if system's gcc is compatible w/ Matlab's% doPreciseSeekTests DirectShow % Windows%%Copyright (c) 2006 Gerald Dalley%See "MIT.txt" in the installation directory for licensing details (especially%when using this library on GNU/Linux). ienter('>>> doPreciseSeekTests(''%s'',...)', varargin{1});images = doFullRead(varargin{:});%%% test seek and step %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%vr = videoReader(varargin{:});% make sure first two frames have different data (makes sure next is% working)vrassert any(any(images(:,:,1) ~= images(:,:,2)));% step back one frame to 1st framevrassert next(vr); % -1 -> 0vrassert next(vr); % 0 -> 1vrassert step(vr, -1); % 1 -> 0img = getframe(vr); img = img(:,:,1);vrassert all(all(img(:,:,1) == img));% seek backward to 1st framevrassert next(vr); % 0 -> 1vrassert seek(vr, 0); % 1 -> 0img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,1) == img));% step nowherevrassert step(vr, 0); % 0 -> 0img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,1) == img));% step back one framevrassert next(vr); % 0 -> 1vrassert next(vr); % 1 -> 2vrassert step(vr, -1); % 2 -> 1img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,2) == img));% seek back one framevrassert next(vr); % 1 -> 2vrassert seek(vr, 1); % 2 -> 1img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,2) == img));% step back 2 framesvrassert next(vr); % 1 -> 2vrassert next(vr); % 2 -> 3vrassert step(vr, -2); % 3 -> 1img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,2) == img));% seek back 2 framesvrassert next(vr); % 1 -> 2vrassert next(vr); % 2 -> 3vrassert seek(vr, 1); % 3 -> 1img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,2) == img));% step forward 2 framesvrassert step(vr, 2); % 1 -> 3img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,4) == img));% seek forward 2 framesvrassert seek(vr, 5); % 3 -> 5img = getframe(vr); img = img(:,:,1);vrassert all(all(images(:,:,6) == img));if (size(images,3)>30*7) % step forward > 5 seconds vrassert seek(vr,0); vrassert step(vr,6*30); img = getframe(vr); img = img(:,:,1); vrassert all(all(images(:,:,6*30+1) == img)); % seek forward > 5 seconds vrassert seek(vr,0); vrassert seek(vr,6*30); img = getframe(vr); img = img(:,:,1); vrassert all(all(images(:,:,6*30+1) == img));end% random seeks info = getinfo(vr);for f=floor(rand(1,100)*(info.numFrames-1)) vrassert seek(vr,f); img = getframe(vr); img = img(:,:,1); vrassert all(all(images(:,:,f+1) == img));endclose(vr);iexit('<<< doPreciseSeekTests(''%s'',...)', varargin{1});%-------------------------------------------------------------function dispResults(images, img, f)% Little helper function to show results when precise seeks don't work% as expectedsubplot(311); imshow(images(:,:,f+1)); title(sprintf('linearly-read frame %d', f));subplot(312); imshow(img); title('read via seeking');subplot(313);imshow(double(images(:,:,f+1)) - double(img), []);colorbar;title('diff image');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -