OLD | NEW |
| (Empty) |
1 function [Y,U,V] = readYUV420file(filename, width, height) | |
2 % [Y,U,V] = readYUVfile(filename, width, height) | |
3 | |
4 fid = fopen(filename,'rb'); | |
5 if fid==-1 | |
6 error(['Cannot open file ' filename]); | |
7 end | |
8 | |
9 % Number of pixels per image | |
10 nPx=width*height; | |
11 | |
12 % nPx bytes luminance, nPx/4 bytes U, nPx/4 bytes V | |
13 frameSizeBytes = nPx*1.5; | |
14 | |
15 % calculate number of frames | |
16 fseek(fid,0,'eof'); % move to end of file | |
17 fileLen=ftell(fid); % number of bytes | |
18 fseek(fid,0,'bof'); % rewind to start | |
19 | |
20 % calculate number of frames | |
21 numFrames = floor(fileLen/frameSizeBytes); | |
22 | |
23 Y=uint8(zeros(height,width,numFrames)); | |
24 U=uint8(zeros(height/2,width/2,numFrames)); | |
25 V=uint8(zeros(height/2,width/2,numFrames)); | |
26 | |
27 [X,nBytes]=fread(fid, frameSizeBytes, 'uchar'); | |
28 | |
29 for k=1:numFrames | |
30 | |
31 % Store luminance | |
32 Y(:,:,k)=uint8(reshape(X(1:nPx), width, height).'); | |
33 | |
34 % Store U channel | |
35 U(:,:,k)=uint8(reshape(X(nPx + (1:nPx/4)), width/2, height/2).'); | |
36 | |
37 % Store V channel | |
38 V(:,:,k)=uint8(reshape(X(nPx + nPx/4 + (1:nPx/4)), width/2, height/2).'); | |
39 | |
40 % Read next frame | |
41 [X,nBytes]=fread(fid, frameSizeBytes, 'uchar'); | |
42 end | |
43 | |
44 | |
45 fclose(fid); | |
OLD | NEW |