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

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 10803019: Chrome-side implementation of media source timestamp offset (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix windows Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "media/base/audio_decoder_config.h" 6 #include "media/base/audio_decoder_config.h"
7 #include "media/base/decoder_buffer.h" 7 #include "media/base/decoder_buffer.h"
8 #include "media/base/mock_callback.h" 8 #include "media/base/mock_callback.h"
9 #include "media/base/mock_demuxer_host.h" 9 #include "media/base/mock_demuxer_host.h"
10 #include "media/base/test_data_util.h" 10 #include "media/base/test_data_util.h"
(...skipping 1783 matching lines...) Expand 10 before | Expand all | Expand 10 after
1794 demuxer_->GetStream(DemuxerStream::VIDEO); 1794 demuxer_->GetStream(DemuxerStream::VIDEO);
1795 1795
1796 GenerateExpectedReads(0, 4, audio, video); 1796 GenerateExpectedReads(0, 4, audio, video);
1797 GenerateExpectedReads(46, 66, 5, audio, video); 1797 GenerateExpectedReads(46, 66, 5, audio, video);
1798 1798
1799 EndOfStreamHelper end_of_stream_helper(demuxer_); 1799 EndOfStreamHelper end_of_stream_helper(demuxer_);
1800 end_of_stream_helper.RequestReads(); 1800 end_of_stream_helper.RequestReads();
1801 end_of_stream_helper.CheckIfReadDonesWereCalled(true); 1801 end_of_stream_helper.CheckIfReadDonesWereCalled(true);
1802 } 1802 }
1803 1803
1804 TEST_F(ChunkDemuxerTest, TestTimestampPositiveOffset) {
1805 ASSERT_TRUE(InitDemuxer(true, true, false));
1806
1807 demuxer_->SetTimestampOffset(kSourceId, 30);
acolwell GONE FROM CHROMIUM 2012/07/25 18:22:43 nit: ASSERT_TRUE() here and below.
vrk (LEFT CHROMIUM) 2012/07/25 22:56:50 Done.
1808 scoped_ptr<Cluster> cluster(GenerateCluster(0, 2));
1809 ASSERT_TRUE(AppendData(cluster->data(), cluster->size()));
1810
1811 scoped_refptr<DemuxerStream> audio =
1812 demuxer_->GetStream(DemuxerStream::AUDIO);
1813 scoped_refptr<DemuxerStream> video =
1814 demuxer_->GetStream(DemuxerStream::VIDEO);
1815
1816 bool audio_read_done = false;
1817 bool video_read_done = false;
1818 audio->Read(base::Bind(&OnReadDone,
acolwell GONE FROM CHROMIUM 2012/07/25 18:22:43 nit: I think using GenerateExpectedReads(30000, 2,
vrk (LEFT CHROMIUM) 2012/07/25 22:56:50 Done.
1819 base::TimeDelta::FromSeconds(30),
1820 &audio_read_done));
1821 video->Read(base::Bind(&OnReadDone,
1822 base::TimeDelta::FromSeconds(30),
1823 &video_read_done));
1824
1825 EXPECT_TRUE(audio_read_done);
1826 EXPECT_TRUE(video_read_done);
1827 }
1828
1829 TEST_F(ChunkDemuxerTest, TestTimestampNegativeOffset) {
1830 ASSERT_TRUE(InitDemuxer(true, true, false));
1831
1832 demuxer_->SetTimestampOffset(kSourceId, -1);
1833 scoped_ptr<Cluster> cluster = GenerateCluster(1000, 2);
1834 ASSERT_TRUE(AppendData(cluster->data(), cluster->size()));
1835
1836 scoped_refptr<DemuxerStream> audio =
1837 demuxer_->GetStream(DemuxerStream::AUDIO);
1838 scoped_refptr<DemuxerStream> video =
1839 demuxer_->GetStream(DemuxerStream::VIDEO);
1840
1841 bool audio_read_done = false;
1842 bool video_read_done = false;
1843 audio->Read(base::Bind(&OnReadDone,
acolwell GONE FROM CHROMIUM 2012/07/25 18:22:43 nit: ditto w/ different timestamp
vrk (LEFT CHROMIUM) 2012/07/25 22:56:50 Done.
1844 base::TimeDelta::FromSeconds(0),
1845 &audio_read_done));
1846 video->Read(base::Bind(&OnReadDone,
1847 base::TimeDelta::FromSeconds(0),
1848 &video_read_done));
1849
1850 EXPECT_TRUE(audio_read_done);
1851 EXPECT_TRUE(video_read_done);
1852 }
1853
1854 TEST_F(ChunkDemuxerTest, TestTimestampOffsetSeparateStreams) {
1855 std::string audio_id = "audio1";
1856 std::string video_id = "video1";
1857 ASSERT_TRUE(InitDemuxerAudioAndVideoSources(audio_id, video_id));
1858
1859 scoped_refptr<DemuxerStream> audio =
1860 demuxer_->GetStream(DemuxerStream::AUDIO);
1861 scoped_refptr<DemuxerStream> video =
1862 demuxer_->GetStream(DemuxerStream::VIDEO);
1863
1864 scoped_ptr<Cluster> cluster_a(
1865 GenerateSingleStreamCluster(
1866 2500, 2500 + kAudioBlockDuration * 4, kAudioTrackNum,
1867 kAudioBlockDuration));
1868
1869 scoped_ptr<Cluster> cluster_v(
1870 GenerateSingleStreamCluster(
1871 0, kVideoBlockDuration * 4, kVideoTrackNum, kVideoBlockDuration));
1872
1873 demuxer_->SetTimestampOffset(audio_id, -2.5f);
1874 ASSERT_TRUE(AppendData(audio_id, cluster_a->data(), cluster_a->size()));
1875 GenerateSingleStreamExpectedReads(0, 4, audio, kAudioBlockDuration);
1876
1877 demuxer_->SetTimestampOffset(video_id, 27.3f);
1878 ASSERT_TRUE(AppendData(video_id, cluster_v->data(), cluster_v->size()));
1879 GenerateSingleStreamExpectedReads(27300, 4, video, kVideoBlockDuration);
1880 }
1804 } // namespace media 1881 } // namespace media
acolwell GONE FROM CHROMIUM 2012/07/25 18:22:43 nit: Add a test for rejecting an offset change mid
vrk (LEFT CHROMIUM) 2012/07/25 22:56:50 Good idea, done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698