diff options
author | Chih-hung Hsieh <chh@google.com> | 2016-01-20 17:50:13 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-01-20 17:50:13 +0000 |
commit | b3cb8ab4ede8bb77f0bdef2715efc2c1e6267072 (patch) | |
tree | 28c4cf735dd5bd9cc8f1ccd06fff8a173b20d1cb /webrtc/modules/video_processing/test/createTable.m | |
parent | a4acd9d6bc9b3b033d7d274316e75ee067df8d20 (diff) | |
parent | 9a337512d97e37afc142dee4fd50a41b741a87d2 (diff) | |
download | webrtc-nougat-mr1.5-release.tar.gz |
Merge "Merge upstream SHA 04cb763"android-cts_7.1_r1android-cts-7.1_r9android-cts-7.1_r8android-cts-7.1_r7android-cts-7.1_r6android-cts-7.1_r5android-cts-7.1_r4android-cts-7.1_r3android-cts-7.1_r29android-cts-7.1_r28android-cts-7.1_r27android-cts-7.1_r26android-cts-7.1_r25android-cts-7.1_r24android-cts-7.1_r23android-cts-7.1_r22android-cts-7.1_r21android-cts-7.1_r20android-cts-7.1_r2android-cts-7.1_r19android-cts-7.1_r18android-cts-7.1_r17android-cts-7.1_r16android-cts-7.1_r15android-cts-7.1_r14android-cts-7.1_r13android-cts-7.1_r12android-cts-7.1_r11android-cts-7.1_r10android-cts-7.1_r1android-cts-7.0_r9android-cts-7.0_r8android-cts-7.0_r7android-cts-7.0_r6android-cts-7.0_r5android-cts-7.0_r4android-cts-7.0_r33android-cts-7.0_r32android-cts-7.0_r31android-cts-7.0_r30android-cts-7.0_r3android-cts-7.0_r29android-cts-7.0_r28android-cts-7.0_r27android-cts-7.0_r26android-cts-7.0_r25android-cts-7.0_r24android-cts-7.0_r23android-cts-7.0_r22android-cts-7.0_r21android-cts-7.0_r20android-cts-7.0_r2android-cts-7.0_r19android-cts-7.0_r18android-cts-7.0_r17android-cts-7.0_r16android-cts-7.0_r15android-cts-7.0_r14android-cts-7.0_r13android-cts-7.0_r12android-cts-7.0_r11android-cts-7.0_r10android-cts-7.0_r1android-7.1.2_r9android-7.1.2_r8android-7.1.2_r6android-7.1.2_r5android-7.1.2_r4android-7.1.2_r39android-7.1.2_r38android-7.1.2_r37android-7.1.2_r36android-7.1.2_r33android-7.1.2_r32android-7.1.2_r30android-7.1.2_r3android-7.1.2_r29android-7.1.2_r28android-7.1.2_r27android-7.1.2_r25android-7.1.2_r24android-7.1.2_r23android-7.1.2_r2android-7.1.2_r19android-7.1.2_r18android-7.1.2_r17android-7.1.2_r16android-7.1.2_r15android-7.1.2_r14android-7.1.2_r13android-7.1.2_r12android-7.1.2_r11android-7.1.2_r10android-7.1.2_r1android-7.1.1_r9android-7.1.1_r8android-7.1.1_r7android-7.1.1_r61android-7.1.1_r60android-7.1.1_r6android-7.1.1_r59android-7.1.1_r58android-7.1.1_r57android-7.1.1_r56android-7.1.1_r55android-7.1.1_r54android-7.1.1_r53android-7.1.1_r52android-7.1.1_r51android-7.1.1_r50android-7.1.1_r49android-7.1.1_r48android-7.1.1_r47android-7.1.1_r46android-7.1.1_r45android-7.1.1_r44android-7.1.1_r43android-7.1.1_r42android-7.1.1_r41android-7.1.1_r40android-7.1.1_r4android-7.1.1_r39android-7.1.1_r38android-7.1.1_r35android-7.1.1_r33android-7.1.1_r32android-7.1.1_r31android-7.1.1_r3android-7.1.1_r28android-7.1.1_r27android-7.1.1_r26android-7.1.1_r25android-7.1.1_r24android-7.1.1_r23android-7.1.1_r22android-7.1.1_r21android-7.1.1_r20android-7.1.1_r2android-7.1.1_r17android-7.1.1_r16android-7.1.1_r15android-7.1.1_r14android-7.1.1_r13android-7.1.1_r12android-7.1.1_r11android-7.1.1_r10android-7.1.1_r1android-7.1.0_r7android-7.1.0_r6android-7.1.0_r5android-7.1.0_r4android-7.1.0_r3android-7.1.0_r2android-7.1.0_r1android-7.0.0_r9android-7.0.0_r8android-7.0.0_r7android-7.0.0_r6android-7.0.0_r5android-7.0.0_r4android-7.0.0_r36android-7.0.0_r35android-7.0.0_r34android-7.0.0_r33android-7.0.0_r32android-7.0.0_r31android-7.0.0_r30android-7.0.0_r3android-7.0.0_r29android-7.0.0_r28android-7.0.0_r27android-7.0.0_r24android-7.0.0_r21android-7.0.0_r19android-7.0.0_r17android-7.0.0_r15android-7.0.0_r14android-7.0.0_r13android-7.0.0_r12android-7.0.0_r11android-7.0.0_r10android-7.0.0_r1nougat-releasenougat-mr2.3-releasenougat-mr2.2-releasenougat-mr2.1-releasenougat-mr2-security-releasenougat-mr2-releasenougat-mr2-pixel-releasenougat-mr2-devnougat-mr1.8-releasenougat-mr1.7-releasenougat-mr1.6-releasenougat-mr1.5-releasenougat-mr1.4-releasenougat-mr1.3-releasenougat-mr1.2-releasenougat-mr1.1-releasenougat-mr1-volantis-releasenougat-mr1-security-releasenougat-mr1-releasenougat-mr1-flounder-releasenougat-mr1-devnougat-mr1-cts-releasenougat-mr0.5-releasenougat-dr1-releasenougat-devnougat-cts-releasenougat-bugfix-release
am: 9a337512d9
* commit '9a337512d97e37afc142dee4fd50a41b741a87d2': (797 commits)
Add tests for verifying transport feedback for audio and video.
Eliminate defines in talk/
Revert of Update with new default boringssl no-aes cipher suites. Re-enable tests. (patchset #3 id:40001 of https://codereview.webrtc.org/1550773002/ )
Remove assert which was incorrectly added to TcpPort::OnSentPacket.
Reland Connect TurnPort and TCPPort to AsyncPacketSocket::SignalSentPacket.
Update with new default boringssl no-aes cipher suites. Re-enable tests.
Revert of Connect TurnPort and TCPPort to AsyncPacketSocket::SignalSentPacket. (patchset #3 id:40001 of https://codereview.webrtc.org/1577873003/ )
Re-land: "Use an explicit identifier in Config"
Connect TurnPort and TCPPort to AsyncPacketSocket::SignalSentPacket.
Revert of Delete remnants of non-square pixel support from cricket::VideoFrame. (patchset #1 id:1 of https://codereview.webrtc.org/1586613002/ )
Remove libfuzzer trybot from default trybot set.
Add ramp-up tests for transport sequence number with and w/o audio.
Delete remnants of non-square pixel support from cricket::VideoFrame.
Fix IPAddress::ToSensitiveString() to avoid dependency on inet_ntop().
Revert of Storing raw audio sink for default audio track. (patchset #7 id:120001 of https://codereview.chromium.org/1551813002/ )
Re-enable tests that failed under Linux_Msan.
Revert of Use an explicit identifier in Config (patchset #4 id:60001 of https://codereview.webrtc.org/1538643004/ )
Roll chromium_revision 346fea9..099be58 (369082:369139)
Disable WebRtcVideoChannel2BaseTest.SendManyResizeOnce for TSan
Add build_protobuf variable.
...
Diffstat (limited to 'webrtc/modules/video_processing/test/createTable.m')
-rw-r--r-- | webrtc/modules/video_processing/test/createTable.m | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/webrtc/modules/video_processing/test/createTable.m b/webrtc/modules/video_processing/test/createTable.m new file mode 100644 index 0000000000..fe8777ee71 --- /dev/null +++ b/webrtc/modules/video_processing/test/createTable.m @@ -0,0 +1,179 @@ +% Create the color enhancement look-up table and write it to +% file colorEnhancementTable.cpp. Copy contents of that file into +% the source file for the color enhancement function. + +clear +close all + + +% First, define the color enhancement in a normalized domain + +% Compander function is defined in three radial zones. +% 1. From 0 to radius r0, the compander function +% is a second-order polynomial intersecting the points (0,0) +% and (r0, r0), and with a slope B in (0,0). +% 2. From r0 to r1, the compander is a third-order polynomial +% intersecting the points (r0, r0) and (r1, r1), and with the +% same slope as the first part in the point (r0, r0) and slope +% equal to 1 in (r1, r1). +% 3. For radii larger than r1, the compander function is the +% unity scale function (no scaling at all). + +r0=0.07; % Dead zone radius (must be > 0) +r1=0.6; % Enhancement zone radius (must be > r0 and < 1) +B=0.2; % initial slope of compander function (between 0 and 1) + +x0=linspace(0,r0).'; % zone 1 +x1=linspace(r0,r1).'; % zone 2 +x2=linspace(r1,1).'; % zone 3 + +A=(1-B)/r0; +f0=A*x0.^2+B*x0; % compander function in zone 1 + +% equation system for finding second zone parameters +M=[r0^3 r0^2 r0 1; + 3*r0^2 2*r0 1 0; + 3*r1^2 2*r1 1 0; + r1^3 r1^2 r1 1]; +m=[A*r0^2+B*r0; 2*A*r0+B; 1; r1]; +% solve equations +theta=M\m; + +% compander function in zone 1 +f1=[x1.^3 x1.^2 x1 ones(size(x1))]*theta; + +x=[x0; x1; x2]; +f=[f0; f1; x2]; + +% plot it +figure(1) +plot(x,f,x,x,':') +xlabel('Normalized radius') +ylabel('Modified radius') + + +% Now, create the look-up table in the integer color space +[U,V]=meshgrid(0:255, 0:255); % U-V space +U0=U; +V0=V; + +% Conversion matrix from normalized YUV to RGB +T=[1 0 1.13983; 1 -0.39465 -0.58060; 1 2.03211 0]; +Ylum=0.5; + +figure(2) +Z(:,:,1)=Ylum + (U-127)/256*T(1,2) + (V-127)/256*T(1,3); +Z(:,:,2)=Ylum + (U-127)/256*T(2,2) + (V-127)/256*T(2,3); +Z(:,:,3)=Ylum + (U-127)/256*T(3,2) + (V-127)/256*T(3,3); +Z=max(Z,0); +Z=min(Z,1); +subplot(121) +image(Z); +axis square +axis off +set(gcf,'color','k') + +R = sqrt((U-127).^2 + (V-127).^2); +Rnorm = R/127; +RnormMod = Rnorm; +RnormMod(RnormMod==0)=1; % avoid division with zero + +% find indices to pixels in dead-zone (zone 1) +ix=find(Rnorm<=r0); +scaleMatrix = (A*Rnorm(ix).^2 + B*Rnorm(ix))./RnormMod(ix); +U(ix)=(U(ix)-127).*scaleMatrix+127; +V(ix)=(V(ix)-127).*scaleMatrix+127; + +% find indices to pixels in zone 2 +ix=find(Rnorm>r0 & Rnorm<=r1); +scaleMatrix = (theta(1)*Rnorm(ix).^3 + theta(2)*Rnorm(ix).^2 + ... + theta(3)*Rnorm(ix) + theta(4)) ./ RnormMod(ix); +U(ix)=(U(ix)-127).*scaleMatrix + 127; +V(ix)=(V(ix)-127).*scaleMatrix + 127; + +% round to integer values and saturate +U=round(U); +V=round(V); +U=max(min(U,255),0); +V=max(min(V,255),0); + +Z(:,:,1)=Ylum + (U-127)/256*T(1,2) + (V-127)/256*T(1,3); +Z(:,:,2)=Ylum + (U-127)/256*T(2,2) + (V-127)/256*T(2,3); +Z(:,:,3)=Ylum + (U-127)/256*T(3,2) + (V-127)/256*T(3,3); +Z=max(Z,0); +Z=min(Z,1); +subplot(122) +image(Z); +axis square +axis off + +figure(3) +subplot(121) +mesh(U-U0) +subplot(122) +mesh(V-V0) + + + +% Last, write to file +% Write only one matrix, since U=V' + +fid = fopen('../out/Debug/colorEnhancementTable.h','wt'); +if fid==-1 + error('Cannot open file colorEnhancementTable.cpp'); +end + +fprintf(fid,'//colorEnhancementTable.h\n\n'); +fprintf(fid,'//Copy the constant table to the appropriate header file.\n\n'); + +fprintf(fid,'//Table created with Matlab script createTable.m\n\n'); +fprintf(fid,'//Usage:\n'); +fprintf(fid,'// Umod=colorTable[U][V]\n'); +fprintf(fid,'// Vmod=colorTable[V][U]\n'); + +fprintf(fid,'static unsigned char colorTable[%i][%i] = {\n', size(U,1), size(U,2)); + +for u=1:size(U,2) + fprintf(fid,' {%i', U(1,u)); + for v=2:size(U,1) + fprintf(fid,', %i', U(v,u)); + end + fprintf(fid,'}'); + if u<size(U,2) + fprintf(fid,','); + end + fprintf(fid,'\n'); +end +fprintf(fid,'};\n\n'); +fclose(fid); +fprintf('done'); + + +answ=input('Create test vector (takes some time...)? y/n : ','s'); +if answ ~= 'y' + return +end + +% Also, create test vectors + +% Read test file foreman.yuv +fprintf('Reading test file...') +[y,u,v]=readYUV420file('../out/Debug/testFiles/foreman_cif.yuv',352,288); +fprintf(' done\n'); +unew=uint8(zeros(size(u))); +vnew=uint8(zeros(size(v))); + +% traverse all frames +for k=1:size(y,3) + fprintf('Frame %i\n', k); + for r=1:size(u,1) + for c=1:size(u,2) + unew(r,c,k) = uint8(U(double(v(r,c,k))+1, double(u(r,c,k))+1)); + vnew(r,c,k) = uint8(V(double(v(r,c,k))+1, double(u(r,c,k))+1)); + end + end +end + +fprintf('\nWriting modified test file...') +writeYUV420file('../out/Debug/foremanColorEnhanced.yuv',y,unew,vnew); +fprintf(' done\n'); |