Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: media/base/android/media_source_player_unittest.cc

Issue 898843002: Use cached Key frames to avoid browser seek (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 message_loop_.RunUntilIdle(); 1036 message_loop_.RunUntilIdle();
1037 1037
1038 // No further seek or data requests should have been received since the 1038 // No further seek or data requests should have been received since the
1039 // surface is empty. 1039 // surface is empty.
1040 EXPECT_EQ(0, demuxer_->num_browser_seek_requests()); 1040 EXPECT_EQ(0, demuxer_->num_browser_seek_requests());
1041 EXPECT_EQ(2, demuxer_->num_data_requests()); 1041 EXPECT_EQ(2, demuxer_->num_data_requests());
1042 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false)); 1042 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false));
1043 1043
1044 // Playback resumes once a non-empty surface is passed. 1044 // Playback resumes once a non-empty surface is passed.
1045 CreateNextTextureAndSetVideoSurface(); 1045 CreateNextTextureAndSetVideoSurface();
1046 EXPECT_EQ(1, demuxer_->num_browser_seek_requests()); 1046 EXPECT_EQ(0, demuxer_->num_browser_seek_requests());
1047 while(demuxer_->num_browser_seek_requests() != 1)
1048 message_loop_.RunUntilIdle();
1047 WaitForVideoDecodeDone(); 1049 WaitForVideoDecodeDone();
1048 } 1050 }
1049 1051
1050 TEST_F(MediaSourcePlayerTest, ReleaseVideoDecoderResourcesWhileDecoding) { 1052 TEST_F(MediaSourcePlayerTest, ReleaseVideoDecoderResourcesWhileDecoding) {
1051 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 1053 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
1052 1054
1053 // Test that if video decoder is released while decoding, the resources will 1055 // Test that if video decoder is released while decoding, the resources will
1054 // not be immediately released. 1056 // not be immediately released.
1055 CreateNextTextureAndSetVideoSurface(); 1057 CreateNextTextureAndSetVideoSurface();
1056 StartVideoDecoderJob(); 1058 StartVideoDecoderJob();
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 // Test that one browser seek is requested if player Release() + Start(), with 1529 // Test that one browser seek is requested if player Release() + Start(), with
1528 // video data received between Release() and Start(). 1530 // video data received between Release() and Start().
1529 BrowserSeekPlayer(true); 1531 BrowserSeekPlayer(true);
1530 1532
1531 // Simulate browser seek is done and confirm player requests more data. 1533 // Simulate browser seek is done and confirm player requests more data.
1532 player_.OnDemuxerSeekDone(base::TimeDelta()); 1534 player_.OnDemuxerSeekDone(base::TimeDelta());
1533 EXPECT_EQ(3, demuxer_->num_data_requests()); 1535 EXPECT_EQ(3, demuxer_->num_data_requests());
1534 EXPECT_EQ(1, demuxer_->num_seek_requests()); 1536 EXPECT_EQ(1, demuxer_->num_seek_requests());
1535 } 1537 }
1536 1538
1539 TEST_F(MediaSourcePlayerTest, NoBrowserSeekWithKeyFrameInCache) {
1540 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
1541
1542 // Test that browser seek is not needed if a key frame is found in data
1543 // cache.
1544 CreateNextTextureAndSetVideoSurface();
1545 StartVideoDecoderJob();
1546 DemuxerData data = CreateReadFromDemuxerAckForVideo(false);
1547 data.access_units[0].is_key_frame = true;
1548
1549 // Simulate demuxer's response to the video data request.
1550 player_.OnDemuxerDataAvailable(data);
1551
1552 // Trigger decoder recreation later by changing surfaces.
1553 CreateNextTextureAndSetVideoSurface();
1554
1555 // Wait for the media codec bridge to finish decoding and be reset.
1556 WaitForVideoDecodeDone();
wolenetz 2015/02/04 21:07:23 nit: after waiting here, confirm explicitly that t
qinmin 2015/02/04 23:11:23 Done.
1557
1558 // Send a non key frame to decoder so that decoder can continue. This will
1559 // not trigger any browser seeks as the previous key frame is still in the
1560 // buffer.
1561 player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForVideo(false));
1562 WaitForVideoDecodeDone();
1563 EXPECT_EQ(0, demuxer_->num_browser_seek_requests());
1564 }
1565
1537 TEST_F(MediaSourcePlayerTest, PrerollAudioAfterSeek) { 1566 TEST_F(MediaSourcePlayerTest, PrerollAudioAfterSeek) {
1538 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 1567 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
1539 1568
1540 // Test decoder job will preroll the media to the seek position. 1569 // Test decoder job will preroll the media to the seek position.
1541 StartAudioDecoderJob(); 1570 StartAudioDecoderJob();
1542 1571
1543 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100)); 1572 SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(100));
1544 EXPECT_TRUE(IsPrerolling(true)); 1573 EXPECT_TRUE(IsPrerolling(true));
1545 PrerollDecoderToTime( 1574 PrerollDecoderToTime(
1546 true, base::TimeDelta(), base::TimeDelta::FromMilliseconds(100), true); 1575 true, base::TimeDelta(), base::TimeDelta::FromMilliseconds(100), true);
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 // Wait for the metadata change. 2351 // Wait for the metadata change.
2323 while(manager_.num_metadata_changes() == 1) { 2352 while(manager_.num_metadata_changes() == 1) {
2324 player_.OnDemuxerDataAvailable(data); 2353 player_.OnDemuxerDataAvailable(data);
2325 WaitForVideoDecodeDone(); 2354 WaitForVideoDecodeDone();
2326 } 2355 }
2327 EXPECT_EQ(2, manager_.num_metadata_changes()); 2356 EXPECT_EQ(2, manager_.num_metadata_changes());
2328 WaitForVideoDecodeDone(); 2357 WaitForVideoDecodeDone();
2329 } 2358 }
2330 2359
2331 } // namespace media 2360 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698