OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 | 104 |
105 EXPECT_EQ(2, renderer_1->num_rendered_frames()); | 105 EXPECT_EQ(2, renderer_1->num_rendered_frames()); |
106 EXPECT_EQ(1, renderer_2->num_rendered_frames()); | 106 EXPECT_EQ(1, renderer_2->num_rendered_frames()); |
107 | 107 |
108 video_track_->RemoveRenderer(renderer_1.get()); | 108 video_track_->RemoveRenderer(renderer_1.get()); |
109 renderer_input->RenderFrame(&frame); | 109 renderer_input->RenderFrame(&frame); |
110 | 110 |
111 EXPECT_EQ(2, renderer_1->num_rendered_frames()); | 111 EXPECT_EQ(2, renderer_1->num_rendered_frames()); |
112 EXPECT_EQ(2, renderer_2->num_rendered_frames()); | 112 EXPECT_EQ(2, renderer_2->num_rendered_frames()); |
113 } | 113 } |
114 | |
115 // Test adding renderers which support and don't support rotation and receive | |
116 // the right frame. | |
117 TEST_F(VideoTrackTest, RenderVideoWithPendingRotation) { | |
118 const size_t kWidth = 800; | |
119 const size_t kHeight = 400; | |
120 | |
121 // Add a renderer which supports rotation. | |
122 rtc::scoped_ptr<FakeVideoTrackRenderer> rotating_renderer( | |
123 new FakeVideoTrackRenderer(video_track_.get(), true)); | |
124 | |
125 cricket::VideoRenderer* renderer_input = | |
126 video_track_->GetSource()->FrameInput(); | |
127 ASSERT_FALSE(renderer_input == NULL); | |
128 | |
129 // Create a frame with rotation 90 degree. | |
130 WebRtcVideoTestFrame frame; | |
131 frame.InitToBlack(kWidth, kHeight, 1, 1, 0, 0); | |
132 frame.SetRotation(webrtc::kVideoRotation_90); | |
133 | |
134 // rotating_renderer should see the frame unrotated. | |
135 renderer_input->RenderFrame(&frame); | |
136 EXPECT_EQ(1, rotating_renderer->num_rendered_frames()); | |
137 EXPECT_EQ(kWidth, rotating_renderer->width()); | |
138 EXPECT_EQ(kHeight, rotating_renderer->height()); | |
139 EXPECT_EQ(&frame, rotating_renderer->last_frame()); | |
140 | |
141 // Add 2nd renderer which doesn't support rotation. | |
142 rtc::scoped_ptr<FakeVideoTrackRenderer> non_rotating_renderer( | |
143 new FakeVideoTrackRenderer(video_track_.get(), false)); | |
144 | |
145 // Render the same 90 degree frame. | |
146 renderer_input->RenderFrame(&frame); | |
147 | |
148 // rotating_renderer should see the same frame. | |
149 EXPECT_EQ(kWidth, rotating_renderer->width()); | |
150 EXPECT_EQ(kHeight, rotating_renderer->height()); | |
151 EXPECT_EQ(&frame, rotating_renderer->last_frame()); | |
152 | |
153 // non_rotating_renderer should see the frame rotated. | |
154 EXPECT_EQ(kHeight, non_rotating_renderer->width()); | |
155 EXPECT_EQ(kWidth, non_rotating_renderer->height()); | |
156 EXPECT_NE(&frame, non_rotating_renderer->last_frame()); | |
157 | |
158 // Render the same 90 degree frame the 3rd time. | |
159 renderer_input->RenderFrame(&frame); | |
160 | |
161 // Now render a frame without rotation. | |
162 frame.SetRotation(webrtc::kVideoRotation_0); | |
163 renderer_input->RenderFrame(&frame); | |
164 | |
165 // rotating_renderer should still only have 1 setsize. | |
166 EXPECT_EQ(kWidth, rotating_renderer->width()); | |
167 EXPECT_EQ(kHeight, rotating_renderer->height()); | |
168 EXPECT_EQ(&frame, rotating_renderer->last_frame()); | |
169 | |
170 // render_2 should have a new size but should have the same frame. | |
171 EXPECT_EQ(kWidth, non_rotating_renderer->width()); | |
172 EXPECT_EQ(kHeight, non_rotating_renderer->height()); | |
173 EXPECT_EQ(&frame, non_rotating_renderer->last_frame()); | |
174 } | |
OLD | NEW |