chromium/src/media.git
2 hours agoUpdate current time and pipeline of time update on first audio buffer. master
dalecurtis@chromium.org [Wed, 23 Apr 2014 04:27:27 +0000 (04:27 +0000)]
Update current time and pipeline of time update on first audio buffer.

Previously we always waited until the 2nd audio buffer before
firing Pipeline::OnAudioTimeUpdate(). This causes the first time
update to be delayed according to the audio buffer size, which is
awkward.

Instead, notify the pipeline on the first audio buffer to avoid the
extra latency incurred while waiting for the next buffer.

BUG=365470
TEST=new unittest.

Review URL: https://codereview.chromium.org/245963002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265538 0039d316-1c4b-4281-b951-d872f2087c98

3 hours agoUpdate media::VideoRendererImpl tests to verify display callbacks.
scherkus@chromium.org [Wed, 23 Apr 2014 03:37:52 +0000 (03:37 +0000)]
Update media::VideoRendererImpl tests to verify display callbacks.

This should have been done when the display callback was introduced in r180578 as now it's getting in the way of migrating to VideoFrameScheduler.

As a bonus, this also caught a bug where we'll mistakenly display a frame when we shouldn't when rebuffering: http://crbug.com/365516

BUG=110814

Review URL: https://codereview.chromium.org/245223003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265516 0039d316-1c4b-4281-b951-d872f2087c98

3 hours agoRevert 265481 "[Cast] Consolidate plethora of GYP files into cas..."
sky@chromium.org [Wed, 23 Apr 2014 03:10:15 +0000 (03:10 +0000)]
Revert 265481 "[Cast] Consolidate plethora of GYP files into cas..."

this broke a ton of bots sample output here:
http://build.chromium.org/p/chromium.linux/builders/Linux%20Clang%20%28dbg%29/builds/58560/steps/compile/logs/stdio

> [Cast] Consolidate plethora of GYP files into cast.gyp and cast_testing.gypi.
>
> The proliferation of GYP files in the src/media/cast directory hierarchy
> has made refactoring efforts difficult to manage.  This change reduces
> everything down to one GYP (plus one GYPI for the testing targets).
>
> This change was tested by building on Linux: `build/gyp_chromium && ninja -C out/Debug All`
>
> Review URL: https://codereview.chromium.org/245893005

TBR=miu@chromium.org

Review URL: https://codereview.chromium.org/247573007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265508 0039d316-1c4b-4281-b951-d872f2087c98

4 hours ago[Cast] Consolidate plethora of GYP files into cast.gyp and cast_testing.gypi.
miu@chromium.org [Wed, 23 Apr 2014 01:56:55 +0000 (01:56 +0000)]
[Cast] Consolidate plethora of GYP files into cast.gyp and cast_testing.gypi.

The proliferation of GYP files in the src/media/cast directory hierarchy
has made refactoring efforts difficult to manage.  This change reduces
everything down to one GYP (plus one GYPI for the testing targets).

This change was tested by building on Linux: `build/gyp_chromium && ninja -C out/Debug All`

Review URL: https://codereview.chromium.org/245893005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265481 0039d316-1c4b-4281-b951-d872f2087c98

7 hours agoCast: log an event when video encoder's target bitrate changes.
imcheng@chromium.org [Tue, 22 Apr 2014 23:29:53 +0000 (23:29 +0000)]
Cast: log an event when video encoder's target bitrate changes.

The event is logged as an generic event as it is not associated with
any frame.

In addition, changed LoggingImpl's interface so that InsertGenericEvent
takes an EventMediaType indicating whether it is a video or audio event.
We need to stop creating separate / specialized event types for video
and audio.

Removed generic event logging that are not used.

TODO: add generic events to serialization.

Review URL: https://codereview.chromium.org/244693005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265412 0039d316-1c4b-4281-b951-d872f2087c98

7 hours agoRemove DisableFullscreenEncryptedMediaPlayback().
xhwang@chromium.org [Tue, 22 Apr 2014 22:53:21 +0000 (22:53 +0000)]
Remove DisableFullscreenEncryptedMediaPlayback().

The new fullscreen mode supports compositing, which means that the permission request infobar will appear on top of the fullscreen player. Therefore, there's no need to disable the fullscreen playback.

This CL removes all logics related to DisableFullscreenEncryptedMediaPlayback().

BUG=360239

Review URL: https://codereview.chromium.org/236163003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265397 0039d316-1c4b-4281-b951-d872f2087c98

9 hours agoclang/win: Fix a few warnings, mostly by deleting dead code.
thakis@chromium.org [Tue, 22 Apr 2014 21:00:34 +0000 (21:00 +0000)]
clang/win: Fix a few warnings, mostly by deleting dead code.

The OptionalHeader change fixes a bug, but a benign one since the subclass
OptionalHeaderImpl doesn't have a destructor or non-POD members.

BUG=82385
R=scottmg@chromium.org
TBR=scherkus

Review URL: https://codereview.chromium.org/247483003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265355 0039d316-1c4b-4281-b951-d872f2087c98

10 hours agoAdd WebMClusterParserTest coverage for duration default/estimation/fallback logic
wolenetz@chromium.org [Tue, 22 Apr 2014 20:06:41 +0000 (20:06 +0000)]
Add WebMClusterParserTest coverage for duration default/estimation/fallback logic

WebMClusterParser recently began supporting using TrackEntry
DefaultDurations, estimating missing durations from inter-buffer
timestamp deltas in a track, or falling back to reusing largest
duration so far or a hardcoded frame duration. This change adds
missing test coverage. The test cluster builder is augmented to allow
generation of clusters containing BlockGroups with blocks optionally
missing the BlockDuration field, to support some of these new tests.

R=acolwell@chromium.org
BUG=361786,351166
TEST=All media_unittests pass locally on Linux

Review URL: https://codereview.chromium.org/238273002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265340 0039d316-1c4b-4281-b951-d872f2087c98

30 hours agoRemove explicit keyword from media::FakeVideoDecoder constructor.
scherkus@chromium.org [Tue, 22 Apr 2014 00:51:20 +0000 (00:51 +0000)]
Remove explicit keyword from media::FakeVideoDecoder constructor.

TBR=xhwang

Review URL: https://codereview.chromium.org/245673003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265130 0039d316-1c4b-4281-b951-d872f2087c98

30 hours agoRemove defunct media::VideoRendererImpl::kMaxLastFrameDuration code.
scherkus@chromium.org [Tue, 22 Apr 2014 00:10:43 +0000 (00:10 +0000)]
Remove defunct media::VideoRendererImpl::kMaxLastFrameDuration code.

It was originally added in r150467 to fix a certain type of end of stream bugs but was ultimately discarded in r185335 when end of stream logic was reworked.

BUG=110814

Review URL: https://codereview.chromium.org/242733006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265122 0039d316-1c4b-4281-b951-d872f2087c98

30 hours agoFixes WebMediaPlayerAndroid to respect infinite-duration media streams.
gunsch@chromium.org [Tue, 22 Apr 2014 00:09:00 +0000 (00:09 +0000)]
Fixes WebMediaPlayerAndroid to respect infinite-duration media streams.

Tested primarily on Android from the following stream:
https://www.youtube.com/tv#/watch?v=xrM34fdmloc

R=damienv@chromium.org,qinmin@chromium.org
BUG=b/13981784

Review URL: https://codereview.chromium.org/239743005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@265119 0039d316-1c4b-4281-b951-d872f2087c98

2 days agoSimplify AudioSplicer logic which slots buffers before or after a splice point.
dalecurtis@chromium.org [Sun, 20 Apr 2014 22:04:05 +0000 (22:04 +0000)]
Simplify AudioSplicer logic which slots buffers before or after a splice point.

Since the first post splice buffer after the config change has a splice_timestamp()
of kNoTimestamp() we can definitively say when we have the first post splice
buffer instead of having to relying on a problematic timestamp match.

The new code makes it so that clients must always call SetSpliceTimestamp() with
kNoTimestamp() once the first post splice buffer is received.

Adds tests to the AudioRendererImpl to verify behavior of the AudioBufferConverter
which impacts the splicer.

BUG=334493
TEST=existing tests pass.

Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=264766

Review URL: https://codereview.chromium.org/240123004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264944 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoFix the output request size for AudioBufferConverter requests.
dalecurtis@chromium.org [Sat, 19 Apr 2014 03:33:29 +0000 (03:33 +0000)]
Fix the output request size for AudioBufferConverter requests.

Previously too little data was converted because the code was
incorrectly assuming the FIFO was enabled.

BUG=364990
TEST=new unittest
TBR=scherkus

Review URL: https://codereview.chromium.org/243573005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264918 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoCast: Fake video codec to help testing
hclam@chromium.org [Fri, 18 Apr 2014 23:07:44 +0000 (23:07 +0000)]
Cast: Fake video codec to help testing

This change adds a new kFakeSoftwareVideo codec to help testing. The
encoder simply encodes the frame id and whether it is a key frame. A
test is added to exercise this code.

Review URL: https://codereview.chromium.org/225013003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264882 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoRevert 264803 "Revert 264763 "Wire up codec_delay() to MP3Stream..."
dalecurtis@google.com [Fri, 18 Apr 2014 19:58:13 +0000 (19:58 +0000)]
Revert 264803 "Revert 264763 "Wire up codec_delay() to MP3Stream..."

> Revert 264763 "Wire up codec_delay() to MP3StreamParser and FFmp..."
>
> Possible candidate for broken media_unittests:
>
> http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Tests%20%28dbg%29%281%29/builds/30043/steps/media_unittests/logs/MediaSource_MP3_TimestampOffset_0
>
> > Wire up codec_delay() to MP3StreamParser and FFmpegAudioDecoder.
> >
> > Allows us to drop silent samples from the decoder after initialization
> > and resets.
> >
> > codec_delay() is always in frames, so I've changed all call sites to use
> > frames instead of a TimeDelta.
> >
> > Coincidentally also fixes an issue where not enough data was dropped from
> > Vorbis buffers with negative timestamps.
> >
> > BUG=360961
> > TEST=new pipeline_integration_test
> >
> > Review URL: https://codereview.chromium.org/239423005
>
> TBR=dalecurtis@chromium.org
>
> Review URL: https://codereview.chromium.org/242203006

TBR=rockot@chromium.org

Review URL: https://codereview.chromium.org/243653002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264834 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoRevert 264763 "Wire up codec_delay() to MP3StreamParser and FFmp..."
rockot@chromium.org [Fri, 18 Apr 2014 16:13:19 +0000 (16:13 +0000)]
Revert 264763 "Wire up codec_delay() to MP3StreamParser and FFmp..."

Possible candidate for broken media_unittests:

http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Tests%20%28dbg%29%281%29/builds/30043/steps/media_unittests/logs/MediaSource_MP3_TimestampOffset_0

> Wire up codec_delay() to MP3StreamParser and FFmpegAudioDecoder.
>
> Allows us to drop silent samples from the decoder after initialization
> and resets.
>
> codec_delay() is always in frames, so I've changed all call sites to use
> frames instead of a TimeDelta.
>
> Coincidentally also fixes an issue where not enough data was dropped from
> Vorbis buffers with negative timestamps.
>
> BUG=360961
> TEST=new pipeline_integration_test
>
> Review URL: https://codereview.chromium.org/239423005

TBR=dalecurtis@chromium.org

Review URL: https://codereview.chromium.org/242203006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264803 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoRevert 264766 "Simplify AudioSplicer logic which slots buffers b..."
rockot@chromium.org [Fri, 18 Apr 2014 16:11:58 +0000 (16:11 +0000)]
Revert 264766 "Simplify AudioSplicer logic which slots buffers b..."

Possible candidate for broken media_unittests:

http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Tests%20%28dbg%29%281%29/builds/30043/steps/media_unittests/logs/MediaSource_MP3_TimestampOffset_0

> Simplify AudioSplicer logic which slots buffers before or after a splice point.
>
> Since the first post splice buffer after the config change has a splice_timestamp()
> of kNoTimestamp() we can definitively say when we have the first post splice
> buffer instead of having to relying on a problematic timestamp match.
>
> The new code makes it so that clients must always call SetSpliceTimestamp() with
> kNoTimestamp() once the first post splice buffer is received.
>
> BUG=334493
> TEST=existing tests pass.
>
> Review URL: https://codereview.chromium.org/240123004

TBR=dalecurtis@chromium.org

Review URL: https://codereview.chromium.org/243263003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264802 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoSimplify AudioSplicer logic which slots buffers before or after a splice point.
dalecurtis@chromium.org [Fri, 18 Apr 2014 10:33:02 +0000 (10:33 +0000)]
Simplify AudioSplicer logic which slots buffers before or after a splice point.

Since the first post splice buffer after the config change has a splice_timestamp()
of kNoTimestamp() we can definitively say when we have the first post splice
buffer instead of having to relying on a problematic timestamp match.

The new code makes it so that clients must always call SetSpliceTimestamp() with
kNoTimestamp() once the first post splice buffer is received.

BUG=334493
TEST=existing tests pass.

Review URL: https://codereview.chromium.org/240123004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264766 0039d316-1c4b-4281-b951-d872f2087c98

4 days agoWire up codec_delay() to MP3StreamParser and FFmpegAudioDecoder.
dalecurtis@chromium.org [Fri, 18 Apr 2014 10:24:58 +0000 (10:24 +0000)]
Wire up codec_delay() to MP3StreamParser and FFmpegAudioDecoder.

Allows us to drop silent samples from the decoder after initialization
and resets.

codec_delay() is always in frames, so I've changed all call sites to use
frames instead of a TimeDelta.

Coincidentally also fixes an issue where not enough data was dropped from
Vorbis buffers with negative timestamps.

BUG=360961
TEST=new pipeline_integration_test

Review URL: https://codereview.chromium.org/239423005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264763 0039d316-1c4b-4281-b951-d872f2087c98

5 days agoFix an issue that audio and video may ran out of sync
qinmin@chromium.org [Fri, 18 Apr 2014 05:26:48 +0000 (05:26 +0000)]
Fix an issue that audio and video may ran out of sync

this is cloned from https://codereview.chromium.org/215783002/, it fixes some flaky unit test.

This CL fixes 3 issues:
1. In ProcessPendingEvents(), if there is a non-seek pending event, UpdateTimestamps() will not get called. This is probably the number 1 contributor to losing sync issue.
2. MSP use its internal clock to estmate the current presentation time. However, hardware may consume data at a different rate. Passing the current frame position from AudioTrack to MSP so we get a better estimation of the current time.
3. When config change comes, We don't need to reset the clock if audio decoder is not recreated.

BUG=351722

Review URL: https://codereview.chromium.org/239363003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264744 0039d316-1c4b-4281-b951-d872f2087c98

5 days agoAllow pass through buffer sizes on OSX.
dalecurtis@chromium.org [Fri, 18 Apr 2014 05:23:42 +0000 (05:23 +0000)]
Allow pass through buffer sizes on OSX.

Previously we've prevented streams from being created with arbitrary
buffer sizes since one size is shared across all input and output
streams in the process.

As of a few months ago the input and output paths now both have FIFO
queues to overcome circumstances where the buffer size requested from
OSX doesn't match what it actually asks for.

With the FIFOs in place, it's no longer necessary for us to ensure a
single buffer size is used across the process.  What is instead done is
to only raise the buffer size if an input or output stream is the sole
active output stream.

As measured by coreaudiod on my MacBook Pro this results in a savings of
1 - 5% of CPU!  Going from 3->5% total to 0.3%.

BUG=362261
TEST=Extensive manual testing.

Review URL: https://codereview.chromium.org/236123002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264741 0039d316-1c4b-4281-b951-d872f2087c98

5 days agoFix unit test failures with estimated durations and splice frames.
dalecurtis@chromium.org [Fri, 18 Apr 2014 02:21:50 +0000 (02:21 +0000)]
Fix unit test failures with estimated durations and splice frames.

When an append results in a splice frame where the overlapping buffer is
the start of the media segment, the new range start time should be the
start of the first pre splice buffer.

WebM duration estimation should always use the minimum duration, not
the maximum to ensure frames are not overestimated -- otherwise large
amounts of incorrect splice frames are generated.

Enables splice frame generation for all test code.

BUG=356805
TEST=media_unittests is fixed.  New unittest added for segment start.

Review URL: https://codereview.chromium.org/220103002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264708 0039d316-1c4b-4281-b951-d872f2087c98

5 days agoRemove unused input_shlib_path
cjhopman@chromium.org [Thu, 17 Apr 2014 23:16:50 +0000 (23:16 +0000)]
Remove unused input_shlib_path

This path is now only inferred from test_suite_name.
TBR=darin
NOTRY=true

Review URL: https://codereview.chromium.org/226353002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264666 0039d316-1c4b-4281-b951-d872f2087c98

5 days agoRemove all uses of toolkit_use_gtk in the gyp files.
erg@chromium.org [Thu, 17 Apr 2014 19:20:23 +0000 (19:20 +0000)]
Remove all uses of toolkit_use_gtk in the gyp files.

BUG=297026
R=ben@chromium.org, brettw@chromium.org

Review URL: https://codereview.chromium.org/238633004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264609 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoFix #define'd min/max from breaking std::min, std::max
dalecurtis@google.com [Thu, 17 Apr 2014 06:51:14 +0000 (06:51 +0000)]
Fix #define'd min/max from breaking std::min, std::max

Hacky fix which just #undef's them in the AudioManagerCras .cc
file for now.

BUG=364382
TEST=compiles
TBR=dgreid

Review URL: https://codereview.chromium.org/240203004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264452 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoEnsure Pepper plugin origin matches security origin
jrummell@chromium.org [Thu, 17 Apr 2014 06:42:04 +0000 (06:42 +0000)]
Ensure Pepper plugin origin matches security origin

Verify the Pepper instance's origin matches the security
origin. Also move the optional document URL checking to
CdmAdapter::Initialize() and fix it to not check for a
host if using file://.

BUG=353324
TEST=encrypted media layout and browser tests pass

Review URL: https://codereview.chromium.org/236313007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264450 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoSkip XING frames inside the MP3StreamParser.
dalecurtis@chromium.org [Thu, 17 Apr 2014 06:07:16 +0000 (06:07 +0000)]
Skip XING frames inside the MP3StreamParser.

These frames result in the injection of silence when encountered by
the decoder, so they must be skipped during demuxing.

BUG=360961
TEST=Existing tests are correctly adjusted.
NOTRY=true

Review URL: https://codereview.chromium.org/236043002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264444 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoUse larger buffer sizes for lower power on Linux.
dalecurtis@chromium.org [Thu, 17 Apr 2014 06:06:45 +0000 (06:06 +0000)]
Use larger buffer sizes for lower power on Linux.

HTML5 playback on Linux ALSA, Pulse, and ChromeOS will now use a
buffer size of 1024+ for media playback.

On my Z620 this takes pulseaudio daemon CPU usage from a solid 3-4%
down to 1%.  Likely there are savings in the Chrome process as well,
but those are harder to measure against process noise.

I suspect we'll see greater savings on Chromebooks.

BUG=362261
TEST=Audio sounds the same always.  CPU usage down.
NOTRY=true

Review URL: https://codereview.chromium.org/235723003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264443 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoMedia Galleries API: Expose separate raw tags for containers and child streams.
tommycli@chromium.org [Thu, 17 Apr 2014 04:42:49 +0000 (04:42 +0000)]
Media Galleries API: Expose separate raw tags for containers and child streams.

BUG=318450

Review URL: https://codereview.chromium.org/228943007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264416 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoCast: Fix default parameters for cast_sender_app
hclam@chromium.org [Wed, 16 Apr 2014 21:58:39 +0000 (21:58 +0000)]
Cast: Fix default parameters for cast_sender_app

There were two issues:
1. start bitrate was smaller than min bitrate.
2. remote port was 0 by default.

They are both fixed in this change.

TBR=miu

Review URL: https://codereview.chromium.org/240033005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264317 0039d316-1c4b-4281-b951-d872f2087c98

6 days agoAdd WebMediaPlayer::timelineOffset() support to WebMediaPlayerImpl.
acolwell@chromium.org [Wed, 16 Apr 2014 07:15:12 +0000 (07:15 +0000)]
Add WebMediaPlayer::timelineOffset() support to WebMediaPlayerImpl.

These changes add support for the
WebMediaPlayer::timelineOffset() method so that
HTMLMediaElement::getStartDate() can report this
information to JavaScript. FFmpegDemuxer & ChunkDemuxer
have been updated to provide "timeline offset" information
for WebM.

BUG=312699
TESTS=PipelineIntegrationTest.BasicPlayback, PipelineIntegrationTest.BasicPlaybackLive, PipelineIntegrationTest.BasicPlayback_MediaSource, PipelineIntegrationTest, BasicPlayback_MediaSource_Live

Review URL: https://codereview.chromium.org/236023003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264145 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoReland r264008: cast_sender_app transcode a video file using FFmpeg
hclam@chromium.org [Wed, 16 Apr 2014 05:29:55 +0000 (05:29 +0000)]
Reland r264008: cast_sender_app transcode a video file using FFmpeg

Original review:
https://codereview.chromium.org/236563002/

Build break was caused by a missing MEDIA_EXPORT for
media::PixelFormatToVideoFormat on component build. It is now added in
this change.

Review URL: https://codereview.chromium.org/236193016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264122 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoCast: Add a field that is set with the timeticks value (ms) of
imcheng@chromium.org [Wed, 16 Apr 2014 04:31:33 +0000 (04:31 +0000)]
Cast: Add a field that is set with the timeticks value (ms) of
unix epoch in LogMetadata proto.

We can use this field to relate the timestamps in all of the events to
real time and dates.

BUG=

Review URL: https://codereview.chromium.org/235863013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264113 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoCast: Fix packet drops in udp_transport
hubbe@chromium.org [Wed, 16 Apr 2014 03:56:59 +0000 (03:56 +0000)]
Cast: Fix packet drops in udp_transport

Also, refactor the packet storage to use scoped_refptr to avoid copying packets and refactor the pacer to be a little more aggressive in sending up to 10 packets per 10 ms.

BUG=355710

Review URL: https://codereview.chromium.org/236083008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264105 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoDefer input stream start around suspend and resume.
dalecurtis@chromium.org [Wed, 16 Apr 2014 02:35:58 +0000 (02:35 +0000)]
Defer input stream start around suspend and resume.

As with output streams on OSX, we should defer input stream starts
around suspend and resume.

UMA statistic rates for M33 -> M34 show us going from 0.54% to 0.30%
failures! Lets see if we can go even further.

BUG=160920,361999
TEST=none

Review URL: https://codereview.chromium.org/233823003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264073 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoIntroduce VideoFrameScheduler{Impl,Proxy}.
scherkus@chromium.org [Wed, 16 Apr 2014 02:03:43 +0000 (02:03 +0000)]
Introduce VideoFrameScheduler{Impl,Proxy}.

VideoFrameScheduler defines an interface for scheduling video frames to be displayed at specific a wall clock time. A single-threaded implementation that uses delayed tasks on a message loop is provided as well as a thread-safe proxy for coordinating scheduling between threads.

BUG=110814

Review URL: https://codereview.chromium.org/237093007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264066 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoCast: Reland of r263470 + compiler warning fixes.
imcheng@chromium.org [Tue, 15 Apr 2014 22:33:59 +0000 (22:33 +0000)]
Cast: Reland of r263470 + compiler warning fixes.

Fix compiler warnings:
- Using an uninitialized variable.
- Explicit ctor/dtor for DeserializedLog struct.

Also fixed a memory leak with inflateInit2().

Review URL: https://codereview.chromium.org/236583002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264019 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoRevert of Cast: cast_sender_app transcode a video file using FFmpeg (https://coderevi...
hclam@chromium.org [Tue, 15 Apr 2014 22:08:31 +0000 (22:08 +0000)]
Revert of Cast: cast_sender_app transcode a video file using FFmpeg (https://codereview.chromium.org/236563002/)

Reason for revert:
FAILED: C:\b\depot_tools\python276_bin\python.exe gyp-win-tool link-with-manifests environment.x64 True cast_sender_app.exe "C:\b\depot_tools\python276_bin\python.exe gyp-win-tool link-wrapper environment.x64 False link.exe /nologo /OUT:cast_sender_app.exe @cast_sender_app.exe.rsp" 1 mt.exe rc.exe "obj\media\cast\cast_sender_app.cast_sender_app.exe.intermediate.manifest" obj\media\cast\cast_sender_app.cast_sender_app.exe.generated.manifest ..\..\build\win\compatibility.manifest
cast_sender_app.sender.obj : error LNK2019: unresolved external symbol "enum media::VideoFrame::Format __cdecl media::PixelFormatToVideoFormat(enum AVPixelFormat)" (?PixelFormatToVideoFormat@media@@YA?AW4Format@VideoFrame@1@W4AVPixelFormat@@@Z) referenced in function "public: __cdecl media::cast::SendProcess::SendProcess(class scoped_refptr<class base::SingleThreadTaskRunner>,class base::TickClock *,struct media::cast::VideoSenderConfig const &,class scoped_refptr<class media::cast::AudioFrameInput>,class scoped_refptr<class media::cast::VideoFrameInput>)" (??0SendProcess@cast@media@@QEAA@V?$scoped_refptr@VSingleThreadTaskRunner@base@@@@PEAVTickClock@base@@AEBUVideoSenderConfig@12@V?$scoped_refptr@VAudioFrameInput@cast@media@@@@V?$scoped_refptr@VVideoFrameInput@cast@media@@@@@Z)

cast_sender_app.exe : fatal error LNK1120: 1 unresolved externals

Original issue's description:
> Cast: cast_sender_app transcode a video file using FFmpeg
>
> FFmpeg video decoding is now implemented in cast_sender_app. It is used
> to decode video only. We can now give it a file and it perform
> transcoding and send to a cast receiver.
>
> Fixed two bugs in this change:
> 1. Vp8Encoder was using an incorrect timestamp. This affects bitrate
>    control.
> 2. VP8 codec was set to drop frames. This caused visual stuttering.
>    It is now configured to never drop frames to match cast mirroring
>    using WebRTC.
> 3. Minor clean up in sender.cc to use switches for input.
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=264008

TBR=hubbe@chromium.org,miu@chromium.org
NOTREECHECKS=true
NOTRY=true

Review URL: https://codereview.chromium.org/239593003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264012 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoCast: cast_sender_app transcode a video file using FFmpeg
hclam@chromium.org [Tue, 15 Apr 2014 21:49:15 +0000 (21:49 +0000)]
Cast: cast_sender_app transcode a video file using FFmpeg

FFmpeg video decoding is now implemented in cast_sender_app. It is used
to decode video only. We can now give it a file and it perform
transcoding and send to a cast receiver.

Fixed two bugs in this change:
1. Vp8Encoder was using an incorrect timestamp. This affects bitrate
   control.
2. VP8 codec was set to drop frames. This caused visual stuttering.
   It is now configured to never drop frames to match cast mirroring
   using WebRTC.
3. Minor clean up in sender.cc to use switches for input.

Review URL: https://codereview.chromium.org/236563002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@264008 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoMigrate VideoDecoder::HasAlpha() and associated plumbing into VideoFrameCompositor.
scherkus@chromium.org [Tue, 15 Apr 2014 17:44:32 +0000 (17:44 +0000)]
Migrate VideoDecoder::HasAlpha() and associated plumbing into VideoFrameCompositor.

Opacity can be derived by inspecting the format of the video frames as they pass through VideoFrameCompositor. Similar to changes in natural size, changes in opacity are now detected.

Finally, make the call directly to WebLayerImpl instead of plumbing values through HTMLMediaElement.

BUG=110814

Review URL: https://codereview.chromium.org/235933012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263906 0039d316-1c4b-4281-b951-d872f2087c98

7 days agoReenable some tests after flakiness resolved
qinmin@chromium.org [Tue, 15 Apr 2014 13:10:54 +0000 (13:10 +0000)]
Reenable some tests after flakiness resolved

http://crbug.com/361541 should fixed the flakiness of these tests.

Review URL: https://codereview.chromium.org/236183002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263830 0039d316-1c4b-4281-b951-d872f2087c98

8 days agoRevert of Fix an issue that audio and video may run out of sync (https://codereview...
horo@chromium.org [Tue, 15 Apr 2014 05:49:42 +0000 (05:49 +0000)]
Revert of Fix an issue that audio and video may run out of sync (https://codereview.chromium.org/215783002/)

Reason for revert:
Android Tests failed
http://build.chromium.org/p/chromium.linux/builders/Android%20Tests/builds/13105

Note: Google Test filter = MediaSourcePlayerTest.CurrentTimeUpdatedWhileDecoderStarved
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from MediaSourcePlayerTest
[ RUN      ] MediaSourcePlayerTest.CurrentTimeUpdatedWhileDecoderStarved
../../media/base/android/media_source_player_unittest.cc:2088: Failure
Expected: (current_time.InMillisecondsF()) < (player_.GetCurrentTime().InMillisecondsF()), actual: 0 vs 0
[  FAILED  ] MediaSourcePlayerTest.CurrentTimeUpdatedWhileDecoderStarved (305 ms)
[----------] 1 test from MediaSourcePlayerTest (305 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (307 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] MediaSourcePlayerTest.CurrentTimeUpdatedWhileDecoderStarved

Original issue's description:
> Fix an issue that audio and video may run out of sync
>
> This CL fixes 3 issues:
> 1. In ProcessPendingEvents(), if there is a non-seek pending event, UpdateTimestamps() will not get called.
>  This is probably the number 1 reason that a/v lose sync.
> 2. MSP use its internal clock to estimate the current presentation time.
> However, hardware may consume data at a different rate.
> Passing the current frame position from AudioTrack to MSP so we get a better estimation of the current time.
> 3. When config change comes, We don't need to reset the clock if audio decoder is not recreated.
>
> BUG=351722
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=263754

TBR=wolenetz@chromium.org,igsolla@chromium.org,acolwell@chromium.org,qinmin@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=351722

Review URL: https://codereview.chromium.org/238053004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263795 0039d316-1c4b-4281-b951-d872f2087c98

8 days agoFix an issue that audio and video may run out of sync
qinmin@chromium.org [Tue, 15 Apr 2014 00:41:32 +0000 (00:41 +0000)]
Fix an issue that audio and video may run out of sync

This CL fixes 3 issues:
1. In ProcessPendingEvents(), if there is a non-seek pending event, UpdateTimestamps() will not get called.
 This is probably the number 1 reason that a/v lose sync.
2. MSP use its internal clock to estimate the current presentation time.
However, hardware may consume data at a different rate.
Passing the current frame position from AudioTrack to MSP so we get a better estimation of the current time.
3. When config change comes, We don't need to reset the clock if audio decoder is not recreated.

BUG=351722

Review URL: https://codereview.chromium.org/215783002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263754 0039d316-1c4b-4281-b951-d872f2087c98

8 days agoMediaStreamVideoSource: don't crop NATIVE_TEXTURE-backed frames.
perkj@chromium.org [Mon, 14 Apr 2014 12:25:48 +0000 (12:25 +0000)]
MediaStreamVideoSource: don't crop NATIVE_TEXTURE-backed frames.

The use of VideoFrame::WrapVideoFrame() is not supported for NATIVE_TEXTURES, The problem is tracked in crbug/362521

Also:
- use Rect::ClampToCenteredSize() instead of reinventing the wheel.

BUG=362007,362521

Review URL: https://codereview.chromium.org/233733006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263614 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoRemove unnecessary output spam from pulse audio
enne@chromium.org [Sat, 12 Apr 2014 05:35:42 +0000 (05:35 +0000)]
Remove unnecessary output spam from pulse audio

BUG=none

Review URL: https://codereview.chromium.org/233083010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263489 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoCast: Log whether the video frame is a key frame in kVideoFrameEncoded
imcheng@chromium.org [Sat, 12 Apr 2014 05:17:38 +0000 (05:17 +0000)]
Cast: Log whether the video frame is a key frame in kVideoFrameEncoded
events.

Rename InsertFrameEventWithSize to InsertEncodedFrameEvent. Now it
takes an additional bool argument specifying whether the frame is key
frame.

Added an optional bool field key_frame in AggregatedFrameEvent proto.
It is only set (in EncodingEventSubscriber) if there is a
VIDEO_FRAME_ENCODED event.

Also fix k{Audio,Video}FrameEncoded event to also log encoded frame size.

BUG=359407

Review URL: https://codereview.chromium.org/228603006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263480 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoRevert of Cast: update LogDeserializer to deserialize both streams given a (https...
thestig@chromium.org [Sat, 12 Apr 2014 04:19:03 +0000 (04:19 +0000)]
Revert of Cast: update LogDeserializer to deserialize both streams given a (https://codereview.chromium.org/226413007/)

Reason for revert:
../../media/cast/logging/log_deserializer.cc: In function 'bool media::cast::DeserializeEvents(const char*, int, bool, media::cast::DeserializedLog*, media::cast::DeserializedLog*)':
../../media/cast/logging/log_deserializer.cc:198:69: error: 'uncompressed_bytes' may be used uninitialized in this function [-Werror=uninitialized]
cc1plus: all warnings being treated as errors

Original issue's description:
> Cast: update LogDeserializer to deserialize both streams given a
> single combined blob.
>
> The blob is a concatenation of compressed audio log and compressed
> video data. LogDeserializer should be able to parse it and reutrn data
> from both streams.
>
> Also fixed typo in raw_events.proto.
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=263470

TBR=hclam@chromium.org,imcheng@chromium.org
NOTREECHECKS=true
NOTRY=true

Review URL: https://codereview.chromium.org/236033004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263473 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoCast: update LogDeserializer to deserialize both streams given a
imcheng@chromium.org [Sat, 12 Apr 2014 03:27:15 +0000 (03:27 +0000)]
Cast: update LogDeserializer to deserialize both streams given a
single combined blob.

The blob is a concatenation of compressed audio log and compressed
video data. LogDeserializer should be able to parse it and reutrn data
from both streams.

Also fixed typo in raw_events.proto.

Review URL: https://codereview.chromium.org/226413007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263470 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoFix missing splice_timestamp() on pre-splice buffers.
dalecurtis@chromium.org [Sat, 12 Apr 2014 03:26:31 +0000 (03:26 +0000)]
Fix missing splice_timestamp() on pre-splice buffers.

The original code was setting the splice_timestamp() on the buffer
before copying.  CopyBuffer() did not copy splice_timestamp() so
buffers which should have had a splice_timestamp() did not get one.

Now the splice_timestamp() is only set on the copied buffer and
CopyBuffer() is modified to include splice_timestamp().  This is
now enforced via DCHECK() when buffers are handed out.

What would happen is splices on top of splices would end up with
mixed splice_timestamp() values which cause crashes later in the
pipeline.

BUG=357385
TEST=new DCHECKs() added which fail existing tests.

Review URL: https://codereview.chromium.org/228663006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263469 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoEncrypted Media: Support VP9 playback.
xhwang@chromium.org [Fri, 11 Apr 2014 23:33:52 +0000 (23:33 +0000)]
Encrypted Media: Support VP9 playback.

Also adds a browser test with encrypted VP9 video. The test video file is checked in a separate CL.

IsTypeSupported() doesn't work with VP9 yet, which will be fixed in a followup CL.

BUG=361318

Review URL: https://codereview.chromium.org/234813008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263407 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoMP4StreamParser: Check aux info for encrypted samples.
xhwang@chromium.org [Fri, 11 Apr 2014 20:34:43 +0000 (20:34 +0000)]
MP4StreamParser: Check aux info for encrypted samples.

Without this check, if aux info (saiz/saio boxes) is missing AuxInfoNeedsToBeCached() returns false, CacheAuxInfo() will not be called and |cenc_info_| will be empty. But we'll still call runs_->GetDecryptConfig(), which assumes a non-empty |cenc_info_|. This causes the crash.

Thank kqyang@chromium.org for helping find the root cause and provide the test file.

BUG=361347
TEST=No crash with new test.

Review URL: https://codereview.chromium.org/234423002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263338 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoAdd bear-1280x720-a_frag-cenc_missing-saiz-saio.mp4 test file.
xhwang@chromium.org [Fri, 11 Apr 2014 17:33:28 +0000 (17:33 +0000)]
Add bear-1280x720-a_frag-cenc_missing-saiz-saio.mp4 test file.

An invalid file similar to bear-1280x720-a_frag-cenc.mp4 but has no saiz and
saio boxes. To save space, it has only one encrypted sample. This file can help
repro http://crbug.com/361347.

Thank kqyang@chromium.org for helping find the root cause and provide this test file.

BUG=361347
TEST=This CL adds a test file.
R=acolwell@chromium.org

Review URL: https://codereview.chromium.org/234403002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263274 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoMac AVFoundation: use QTKit for devices not working with AVF (Blackmagic).
mcasas@chromium.org [Fri, 11 Apr 2014 13:53:56 +0000 (13:53 +0000)]
Mac AVFoundation: use QTKit for devices not working with AVF (Blackmagic).

Some video capture devices are not correctly supported
in Mac when using AVFoundation. F.e. the Blackmagic
UltraStudio Mini Recorder only works correctly when
opened in 480p or less.

A blacklist is added to video_capture_device_mac.mm to
identify those devices. The blacklisted devices are
identified by USB Vendor ID. This list is checked while
enumerating the devices using AVFoundation in
VideoCaptureDevice::GetDeviceNames(). If a singled out
device is found, the QTKit list of devices is parsed
as well and those with a similar name are added
to the "final" list of devices, with a "QTKit" prefix.

The VideoCaptureDevice::Name CaptureApiType, only
used for Windows devices, is extended  to identify
if the device is a QTKit or an AVFoundation.

Tested via adding an artificial devices to the
blacklist, a "Hercules" camera, otherwise innocent.

BUG=288562, 347371

Review URL: https://codereview.chromium.org/229063003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263235 0039d316-1c4b-4281-b951-d872f2087c98

11 days agoMake MidiManager::StartSession() asynchronous
toyoshim@chromium.org [Fri, 11 Apr 2014 13:16:24 +0000 (13:16 +0000)]
Make MidiManager::StartSession() asynchronous

Some operating systems need to initialize MidiManager asynchronously.
This change is the first step to make it asynchronous.

In this change, make StartSession() asynchronous. And in the next
change, let's make platform specific Initialize() asynchronous.

BUG=339746

Review URL: https://codereview.chromium.org/226123002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263215 0039d316-1c4b-4281-b951-d872f2087c98

12 days agoAdds more logging for audio input issues.
jiayl@chromium.org [Thu, 10 Apr 2014 23:39:37 +0000 (23:39 +0000)]
Adds more logging for audio input issues.
-Adds the audio input device id and name to the stream generation message.
-Re-enables the no_data_timer in AudioInputController for logging. The NO_DATA_ERROR is ignored and will not stop capturing.
-Adds a AudioPowerMonitor to WebRtcAudioCapturer to log the audio power level.

R=vrk@chromium.org,xians@chromium.org,tommi@chromium.org

BUG=360756

Review URL: https://codereview.chromium.org/229573003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263127 0039d316-1c4b-4281-b951-d872f2087c98

12 days agoFix WebM parser not to wait for a next frame when DefaultDuration is specified.
sergeyu@chromium.org [Thu, 10 Apr 2014 21:53:00 +0000 (21:53 +0000)]
Fix WebM parser not to wait for a next frame when DefaultDuration is specified.

Per Matroska spec difference between frames timestamps must be used as
block duration when neither Duration nor DefaultDuration is specified.
Problem was that WebMClusterParser was waiting for the next frame
even when DefaultDuration is specified.

BUG=338529

Review URL: https://codereview.chromium.org/230173002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263097 0039d316-1c4b-4281-b951-d872f2087c98

12 days agoRevert "Attempt to fix audio wedges by restarting all streams on OSX."
dalecurtis@chromium.org [Thu, 10 Apr 2014 21:01:09 +0000 (21:01 +0000)]
Revert "Attempt to fix audio wedges by restarting all streams on OSX."

This reverts commit http://crrev.com/238501 in favor  a simpler approach
which delays stream creation around suspend and resume events:
http://crrev.com/247026

Care must be taken to monitor the UMA stat for increases after this lands.
I'll also communicate with the YT team on the bug/ to ensure they provide
some assistance in testing.

BUG=160920
TEST=No stream hangs.

Review URL: https://codereview.chromium.org/190553004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@263076 0039d316-1c4b-4281-b951-d872f2087c98

12 days agoFix CaptureMjpeg test fails on devices that cannot capture MJPEG.
yuli@chromium.org [Thu, 10 Apr 2014 13:34:43 +0000 (13:34 +0000)]
Fix CaptureMjpeg test fails on devices that cannot capture MJPEG.

BUG=335764
TEST=build and run the test on snow

Review URL: https://codereview.chromium.org/227613005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262966 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoFix the flaky MediaSourcePlayerTest
qinmin@chromium.org [Thu, 10 Apr 2014 05:32:14 +0000 (05:32 +0000)]
Fix the flaky MediaSourcePlayerTest

If seek happens while requesting data for the inactive chunk, the ack for the data request will call OnDecodeCompleted().
However, the decoder job is waiting for the OnDecodeCompleted() from the active chunk.
Tests:We already have seveal tests covering requesting inactive chunk during seek. This CL should fix the flakiness in there.

BUG=361541

Review URL: https://codereview.chromium.org/227523005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262934 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoRename VideoFrame::{Get,Set}Timestamp() to {set_}timestamp().
scherkus@chromium.org [Thu, 10 Apr 2014 04:51:23 +0000 (04:51 +0000)]
Rename VideoFrame::{Get,Set}Timestamp() to {set_}timestamp().

Makes the naming consistent with AudioBuffer, which is helpful now that DecoderStream<T> enforces API consistency.

TBR=dmichael

Review URL: https://codereview.chromium.org/229453004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262914 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoRemove obsolete atomic debugging checks.
dalecurtis@chromium.org [Thu, 10 Apr 2014 02:09:54 +0000 (02:09 +0000)]
Remove obsolete atomic debugging checks.

Removes AtomicRefCount checks from SincResampler and AudioOutputController
which never caught any issues.

BUG=295278, 349651
TEST=none

Review URL: https://codereview.chromium.org/231623005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262897 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoCast: Use 2 threads for encoding on capable systems
hclam@chromium.org [Thu, 10 Apr 2014 02:01:07 +0000 (02:01 +0000)]
Cast: Use 2 threads for encoding on capable systems

We would like to use more than 1 thread for encoding to improve
performance. We do this only on a higher end system. The criteria is to
have at least 3 logical processors. This has worked well for WebRTC and
the same condition is applied here.

BUG=360966

Review URL: https://codereview.chromium.org/228313002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262894 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoMove DataSourceHost to BufferedDataSourceHost.
sandersd@chromium.org [Thu, 10 Apr 2014 01:45:38 +0000 (01:45 +0000)]
Move DataSourceHost to BufferedDataSourceHost.

BUG=122071

Review URL: https://codereview.chromium.org/224093011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262892 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoCast: Make castv2 mirroring performance test run again
hubbe@chromium.org [Wed, 9 Apr 2014 23:45:38 +0000 (23:45 +0000)]
Cast: Make castv2 mirroring performance test run again

Note that this CL doesn't actually make the tests *pass*, but now they report actual
problems in the cast library rather than just fail immediately. Making the tests pass
will be a problem for the next CL.

Also, add tests for what happens when the sender/receiver clocks are off.

Review URL: https://codereview.chromium.org/229503002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262860 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoReland r262568 "Encrypted Media: Check container mime type in MediaDrmBridge".
xhwang@chromium.org [Wed, 9 Apr 2014 21:46:47 +0000 (21:46 +0000)]
Reland r262568 "Encrypted Media: Check container mime type in MediaDrmBridge".

This CL relands r262568 with NO additional changes. The original CL was reverted to help investigate some test failure, which turned out to be unrelated to this CL.

Android MediaDrm API supports container mime type check in
isCryptoSchemeSupported (UUID uuid, String mimeType):

http://developer.android.com/reference/android/media/MediaDrm.html#isCryptoSchemeSupported(java.util.UUID, java.lang.String)

This CL hook this API up in MediaDrmBridge.

Also, Chromium will always query the codec/container type it
is interested in (e.g. MP4 and WebM).

TBR=ddorwin@chromium.org,qinmin@chromium.org,dmazzoni@chromium.org
BUG=350481

Review URL: https://codereview.chromium.org/230843004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262828 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoDisable android test MediaSourcePlayerTest.SeekToThenReleaseThenStart. Flaky.
tapted@chromium.org [Wed, 9 Apr 2014 21:45:14 +0000 (21:45 +0000)]
Disable android test MediaSourcePlayerTest.SeekToThenReleaseThenStart. Flaky.

BUG=361359
TBR=wolenetz@chromium.org

Review URL: https://codereview.chromium.org/231123004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262827 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoAdd audio playback (all platforms) to cast_receiver_app.
miu@chromium.org [Wed, 9 Apr 2014 20:26:29 +0000 (20:26 +0000)]
Add audio playback (all platforms) to cast_receiver_app.

This change not only adds audio playback, but also adds an
implementation that delays rendering of video/audio frames to the
desired playout_times.  In addition, console logging has been added to
expose: 1) Whether frames were skipped because playback was running
behind; 2) Whether frames were skipped by the receiver because packets
were too late; 3) When frames are actually being played versus the
desired playout_time.

BUG=360776
R=imcheng@chromium.org

Review URL: https://codereview.chromium.org/229463002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262796 0039d316-1c4b-4281-b951-d872f2087c98

13 days agodon't call (deprecated) getTotalClip
reed@google.com [Wed, 9 Apr 2014 16:40:48 +0000 (16:40 +0000)]
don't call (deprecated) getTotalClip

This will allow us to delete the code behind SK_SUPPORT_LEGACY_GETTOTALCLIP

Review URL: https://codereview.chromium.org/228723006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262707 0039d316-1c4b-4281-b951-d872f2087c98

13 days agoDisable SeekToThenDemuxerSeekThenReleaseThenSeekDone and SeekToThenReleaseThenDemuxer...
yurys@chromium.org [Wed, 9 Apr 2014 11:02:22 +0000 (11:02 +0000)]
Disable SeekToThenDemuxerSeekThenReleaseThenSeekDone and SeekToThenReleaseThenDemuxerSeekThenStart

BUG=361541
TBR=jianli@chromium.org

Review URL: https://codereview.chromium.org/230373004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262644 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRevert 262568 "Encrypted Media: Check container mime type in Med..."
dmazzoni@google.com [Wed, 9 Apr 2014 05:59:31 +0000 (05:59 +0000)]
Revert 262568 "Encrypted Media: Check container mime type in Med..."

causing media_unittests to crash
NullPointerException at org.chromium.media.MediaCodecBridge.dequeueOutputBuffer(MediaCodecBridge.java:420)
http://build.chromium.org/p/chromium.linux/buildstatus?builder=Android%20Tests&number=13008

> Encrypted Media: Check container mime type in MediaDrmBridge.
>
> Android MediaDrm API supports container mime type check in
> isCryptoSchemeSupported (UUID uuid, String mimeType):
>
> http://developer.android.com/reference/android/media/MediaDrm.html#isCryptoSchemeSupported(java.util.UUID, java.lang.String)
>
> This CL hook this API up in MediaDrmBridge.
>
> Also, Chromium will always query the codec/container type it
> is interested in (e.g. MP4 and WebM).
>
> BUG=350481
>
> Review URL: https://codereview.chromium.org/229203002

TBR=xhwang@chromium.org

Review URL: https://codereview.chromium.org/230243002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262628 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoUpdate media/cast/OWNERS.
miu@chromium.org [Wed, 9 Apr 2014 01:04:13 +0000 (01:04 +0000)]
Update media/cast/OWNERS.

miu@ has joined.

R=hclam@chromium.org

Review URL: https://codereview.chromium.org/229913002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262577 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoEncrypted Media: Check container mime type in MediaDrmBridge.
xhwang@chromium.org [Wed, 9 Apr 2014 00:19:12 +0000 (00:19 +0000)]
Encrypted Media: Check container mime type in MediaDrmBridge.

Android MediaDrm API supports container mime type check in
isCryptoSchemeSupported (UUID uuid, String mimeType):

http://developer.android.com/reference/android/media/MediaDrm.html#isCryptoSchemeSupported(java.util.UUID, java.lang.String)

This CL hook this API up in MediaDrmBridge.

Also, Chromium will always query the codec/container type it
is interested in (e.g. MP4 and WebM).

BUG=350481

Review URL: https://codereview.chromium.org/229203002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262568 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast:Add resolution settings to receiver app
mikhal@chromium.org [Wed, 9 Apr 2014 00:13:52 +0000 (00:13 +0000)]
Cast:Add resolution settings to receiver app

Add an option for the user the set the resolution in run-time,
plus some clean up.

Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=257948

Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=258277

Review URL: https://codereview.chromium.org/203223003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262566 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast: Clarify what is a valid resource ID
hclam@chromium.org [Tue, 8 Apr 2014 20:57:49 +0000 (20:57 +0000)]
Cast: Clarify what is a valid resource ID

This change claries that all cast.streaming resources have positive
IDs. This is used to avoid problems when an extension treat zero as an
invalid value.

Also adds a few more VLOGs for debugging.

BUG=360902

Review URL: https://codereview.chromium.org/225303018

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262502 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks ago[Cast] Refactor/clean-up VideoReceiver to match AudioReceiver as closely as possible.
miu@chromium.org [Tue, 8 Apr 2014 18:00:32 +0000 (18:00 +0000)]
[Cast] Refactor/clean-up VideoReceiver to match AudioReceiver as closely as possible.

This change is a necessary first step in our future plans to: 1) Merge the implementations of AudioReceiver and VideoReceiver into a single common module of code; and 2) Delegate A/V sync, jitter, and playout clock skew correction to a module that will operate at a higher abstraction level.

Several bugs were automatically fixed. Also, updated/fixed unit tests, improved comments/documentation, and tiny related clean-ups (where relevant to this change).

R=hubbe@chromium.org

Review URL: https://codereview.chromium.org/225023010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262449 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks ago[Cast] Eliminate remnants of deprecated PcmAudioFrame struct usage.
miu@chromium.org [Tue, 8 Apr 2014 04:18:17 +0000 (04:18 +0000)]
[Cast] Eliminate remnants of deprecated PcmAudioFrame struct usage.

Now we're cookin' with floats and AudioBuses!

Review URL: https://codereview.chromium.org/226443004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262304 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRemove all uses of GG_LONGLONG and GG_ULONGLONG.
viettrungluu@chromium.org [Tue, 8 Apr 2014 04:00:36 +0000 (04:00 +0000)]
Remove all uses of GG_LONGLONG and GG_ULONGLONG.

123LL and 123ULL now work everywhere. You can also use INT64_C and
UINT64_C (from <stdint.h>) in Chromium code (we force-define
__STDC_CONSTANT_MACROS). (And sometimes you can just use
static_cast<(u)int64_t>.)

Don't remove their definitions yet, because some macros that are
multiply-defined (in an identical way) rely on them. D'oh.

R=brettw@chromium.org
TBR=sky@chromium.org,satorux@chromium.org,vrk@chromium.org,rch@chromium.org,shess@chromium.org

Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=262147

Review URL: https://codereview.chromium.org/218953003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262294 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCatch an exception while release MediaCodecBridge
qinmin@chromium.org [Tue, 8 Apr 2014 01:12:38 +0000 (01:12 +0000)]
Catch an exception while release MediaCodecBridge

Since the surface can go away anytime while the MediaCodec is decoding data, the MediaCodec may stuck in a wrong state afterwards.
Catch the exception when deleting the MediaCodec.

see b/13810887

BUG=

Review URL: https://codereview.chromium.org/225303008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262277 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoV4L2: Connect antibanding/anti-flicker where supported
mcasas@chromium.org [Mon, 7 Apr 2014 22:03:38 +0000 (22:03 +0000)]
V4L2: Connect antibanding/anti-flicker where supported

Some Linux UVC devices implement the V4L2 User Controls
API [1]. For them, set the antibanding/anti-flicker/power
frequency rejection to the appropriate frequency (50/60Hz).
This settings sinks all the way into the WebCam DSP so
it's hard to know for sure what is being done.

The current country is extracted from the system timezone
using CountryCodeForCurrentTimezone(). From its doc:
"Checks the system timezone and turns it into a two-character
ASCII country code. This may fail (for example, it will
always fail on Android), in which case it will return
an empty string." [2]

TEST: In Linux, the anti-flicker API can be exercised
using f.i. `guvcview` application. Find a spot with
convenient flickering, f.i. a wall with a fluorescent
light falling on it, specially with dim general
illumination conditions, and open this program, then
connect the appropriate antibandings to witness the
flicker removal.

The removal effect can be seen in the recording [3].

[1] http://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html#control
[2] https://code.google.com/p/chromium/codesearch#chromium/src/base/i18n/timezone.h&q=CountryCodeForCurrentTimezone&sq=package:chromium&type=cs&l=17
[3] https://drive.google.com/a/google.com/file/d/0BwgFm5xOT0yCTHFKejBsQVRGczQ/edit?usp=sharing

BUG=357599

TBR=tommi@chromium.org

Review URL: https://codereview.chromium.org/216263007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262208 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast: Use signed delay delta in rtcp receiver log in rtcp_receiver.
imcheng@chromium.org [Mon, 7 Apr 2014 19:08:57 +0000 (19:08 +0000)]
Cast: Use signed delay delta in rtcp receiver log in rtcp_receiver.

It is possible for video render / audio playout delay to be negative.
Even though it is written out as a uint16, it should be read back as
a signed int16 in order to have accurate logging.

Review URL: https://codereview.chromium.org/219533004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262173 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRevert 262147 "Remove all uses of GG_LONGLONG and GG_ULONGLONG."
scottmg@chromium.org [Mon, 7 Apr 2014 18:35:10 +0000 (18:35 +0000)]
Revert 262147 "Remove all uses of GG_LONGLONG and GG_ULONGLONG."

> Remove all uses of GG_LONGLONG and GG_ULONGLONG.
>
> 123LL and 123ULL now work everywhere. You can also use INT64_C and
> UINT64_C (from <stdint.h>) in Chromium code (we force-define
> __STDC_CONSTANT_MACROS). (And sometimes you can just use
> static_cast<(u)int64_t>.)
>
> Don't remove their definitions yet, because some macros that are
> multiply-defined (in an identical way) rely on them. D'oh.
>
> R=brettw@chromium.org
> TBR=sky@chromium.org,satorux@chromium.org,vrk@chromium.org,rch@chromium.org,shess@chromium.org
>
> Review URL: https://codereview.chromium.org/218953003

TBR=viettrungluu@chromium.org

Review URL: https://codereview.chromium.org/227743006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262165 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRemove all uses of GG_LONGLONG and GG_ULONGLONG.
viettrungluu@chromium.org [Mon, 7 Apr 2014 17:35:10 +0000 (17:35 +0000)]
Remove all uses of GG_LONGLONG and GG_ULONGLONG.

123LL and 123ULL now work everywhere. You can also use INT64_C and
UINT64_C (from <stdint.h>) in Chromium code (we force-define
__STDC_CONSTANT_MACROS). (And sometimes you can just use
static_cast<(u)int64_t>.)

Don't remove their definitions yet, because some macros that are
multiply-defined (in an identical way) rely on them. D'oh.

R=brettw@chromium.org
TBR=sky@chromium.org,satorux@chromium.org,vrk@chromium.org,rch@chromium.org,shess@chromium.org

Review URL: https://codereview.chromium.org/218953003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262147 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoEncrypted Media: Remove support of CDM_1 and CDM_2.
xhwang@chromium.org [Sat, 5 Apr 2014 20:33:30 +0000 (20:33 +0000)]
Encrypted Media: Remove support of CDM_1 and CDM_2.

BUG=357709

Review URL: https://codereview.chromium.org/217203005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262034 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRevert of Attempting to resolve a race condition with PowerMonitor (https://coderevie...
scottmg@chromium.org [Sat, 5 Apr 2014 18:55:57 +0000 (18:55 +0000)]
Revert of Attempting to resolve a race condition with PowerMonitor (https://codereview.chromium.org/179923006/)

Reason for revert:
Failing interactive_ui_tests dbg:

http://build.chromium.org/p/chromium.win/builders/Interactive%20Tests%20(dbg)/builds/47083/steps/interactive_ui_tests/logs/stdio

Original issue's description:
> Attempting to resolve a race condition with PowerMonitor.
>
> ThreadSanitizer caught multiple instances where PowerMonitor::Get or PowerMonitor::Add/RemoveObserver were being called concurrently with the PowerMonitor constructor in the main thread. These functions access a process-global PowerMontior instance (g_power_monitor), which was not thread safe.
>
> This change adds locks around PowerMonitor creation and deletion, and forces Add/RemoveObserver to be called in a threadsafe manner. It also removes the need to call PowerMonitor::Get.
>
> BUG=268924
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=262018

TBR=mattm@chromium.org,jyasskin@chromium.org,kbr@chromium.org,bradnelson@chromium.org,brettw@chromium.org,bradchen@chromium.org,willchan@chromium.org,jam@chromium.org,jochen@chromium.org,timurrrr@chromium.org,glider@chromium.org,acolwell@chromium.org,scherkus@chromium.org,bajones@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=268924

Review URL: https://codereview.chromium.org/226263008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262026 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoAttempting to resolve a race condition with PowerMonitor.
bajones@chromium.org [Sat, 5 Apr 2014 17:28:39 +0000 (17:28 +0000)]
Attempting to resolve a race condition with PowerMonitor.

ThreadSanitizer caught multiple instances where PowerMonitor::Get or PowerMonitor::Add/RemoveObserver were being called concurrently with the PowerMonitor constructor in the main thread. These functions access a process-global PowerMontior instance (g_power_monitor), which was not thread safe.

This change adds locks around PowerMonitor creation and deletion, and forces Add/RemoveObserver to be called in a threadsafe manner. It also removes the need to call PowerMonitor::Get.

BUG=268924

Review URL: https://codereview.chromium.org/179923006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@262018 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRemove audio sample format hack in DecryptingAudioDecoder.
xhwang@chromium.org [Sat, 5 Apr 2014 03:52:52 +0000 (03:52 +0000)]
Remove audio sample format hack in DecryptingAudioDecoder.

BUG=354218

Review URL: https://codereview.chromium.org/224793004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261967 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast External Video Encoder: buffer non-key frames at init.
hshi@chromium.org [Sat, 5 Apr 2014 00:17:02 +0000 (00:17 +0000)]
Cast External Video Encoder: buffer non-key frames at init.

Do not send video until we have encountered the first key frame.
Save the bitstream buffer in |stream_header_| to be sent later along
with the first key frame.

BUG=354267
TEST=verify that RTP packetizer always starts with a key frame.
R=hclam@chromium.org

Review URL: https://codereview.chromium.org/224713010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261926 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast: Better redundancy for receiver RTCP events
imcheng@chromium.org [Sat, 5 Apr 2014 00:10:51 +0000 (00:10 +0000)]
Cast: Better redundancy for receiver RTCP events

Previously we always take the latest RTCP events from
ReceiverRtcpEventSubscriber (without clearing explicitly) and stuff the
packet with at most 200 bytes of data. This patch reintroduces the
resetting of ReceiverRtcpEventSubscriber map when data is read from it,
and it will be used as follows:

- Get data from ReceiverRtcpEventSubscriber and reset its map
- (Same as before) Impose 200 byte limit on rtcp receiver logs
- Fill packet with data
- Push a copy of data to redundancy buffer in RtcpSender
- If there is enough space left, fill packet with data that was used
  X_1 receiver logs ago
- If there is enough space left, fill packet with data that was used
  X_2 receiver logs ago
-- Where 0 < X_1 < X_2 <= B where B is the buffer size.
- Truncate buffer to discard old receiver logs if necessary.

This gives a more consistent redudancy factor of 3 for each event.
In here, X_1 = 10, X_2 = B = 20. So an event will be sent at reports
N, N+10, and N+20.

Additional items:
- fix ssrc mismatch in receiver app.
- removed unused function in cast_sender.{h,cc}.

BUG=349265

Review URL: https://codereview.chromium.org/203293009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261921 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast: Explicitly log kVideoFrameCaptured events
imcheng@chromium.org [Fri, 4 Apr 2014 22:20:53 +0000 (22:20 +0000)]
Cast: Explicitly log kVideoFrameCaptured events

Rather than relying on deducing the capture time from RTP timestamps
(which probably doesn't work all the time because of possible overflow
when multiplying by 90), it's better if we log the event explicitly.

Review URL: https://codereview.chromium.org/208693005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261901 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agocast: ExternalVideoEncoder should not clear skip_next_frame_ flag.
hshi@chromium.org [Fri, 4 Apr 2014 20:05:06 +0000 (20:05 +0000)]
cast: ExternalVideoEncoder should not clear skip_next_frame_ flag.

The skip_next_frame_ should not be cleared until caller invokes
ExternalVideoEncoder::SkipNextFrame(false). This behavior is
consistent with the VideoEncoderImpl class.

BUG=359247
TEST=trybot, cast_unittests
R=hclam@chromium.org

Review URL: https://codereview.chromium.org/226113004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261853 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoMac Video Capture: resolution changes policy for QTKit/AVFoundation.
mcasas@chromium.org [Fri, 4 Apr 2014 06:24:04 +0000 (06:24 +0000)]
Mac Video Capture: resolution changes policy for QTKit/AVFoundation.

The captured frame received in VideoCaptureDeviceMac::ReceiveFrame()
might change resolution if the camera gets reconfigured by another
QTKit/AVFoundation client: other Chrome, FF, etc.

If QTKit resolution changes it hits the DCHECKs in [1], causing
a browser crash http://crbug.com/353620. Instead, update the
|capture_format_| frame_size to the received one.

AVFoundation should never see a resolution change since
the AVCaptureVideoDataOutput is configured to resize. If
this happens, signal an error.

[1] https://code.google.com/p/chromium/codesearch#chromium/src/media/video/capture/mac/video_capture_device_mac.mm&q=video%20capture%20mac&sq=package:chromium&type=cs&l=301

BUG=288562, 353620

Review URL: https://codereview.chromium.org/223593003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261690 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoRemove redundant I420-to-YV12 conversion in MediaStreamVideoTrack.
hshi@chromium.org [Thu, 3 Apr 2014 19:10:43 +0000 (19:10 +0000)]
Remove redundant I420-to-YV12 conversion in MediaStreamVideoTrack.

The I420 and YV12 formats both are almost identical except for the order
of U and V planes in memory. They are effectively the same for renderers
that access U and V plane data via MediaFrame::data(size_t plane).

BUG=341452
BUG=355763
TEST=trybot
R=danakj@chromium.org, dmichael@chromium.org, fischman@chromium.org, perkj@chromium.org, piman@chromium.org

Review URL: https://codereview.chromium.org/222563002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261497 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoSeparate DemuxerHost from DataSourceHost.
sandersd@chromium.org [Thu, 3 Apr 2014 18:54:39 +0000 (18:54 +0000)]
Separate DemuxerHost from DataSourceHost.

This is the first part of work to remove byte range computations out of media::Pipeline, and instead have the DataSource report those directly to Pipeline's parent, which will avoid crossing thread boundaries unnecessarily. This first CL just cleans up the interfaces required to do that, but already eliminates some of the stranger parts of the set-up code.

BUG=122071

Review URL: https://codereview.chromium.org/212803004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261494 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoMSE: Pick frame processor in ChunkDemuxer::AddId; prepare unit tests to pick processor
wolenetz@chromium.org [Thu, 3 Apr 2014 18:31:35 +0000 (18:31 +0000)]
MSE: Pick frame processor in ChunkDemuxer::AddId; prepare unit tests to pick processor

In preparation for landing the new FrameProcessor, this change
parameterizes WebMediaSourceImpl::addSourceBuffer() and
ChunkDemuxer::AddId() to select which of legacy or new
processor to use to process frames appended to the source buffer.

This change also parameterizes ChunkDemuxerTests and the MSE subset
of PipelineIntegrationTests to allow testing of both frame processors
in the short term until the new processor has landed and stabilized
enough.

Since the MSE WebSourceBuffer API for Chromium platform in Blink is
not yet stabilized, this change also removes related OVERRIDEs.

R=acolwell@chromium.org
BUG=249422
TEST=All media unittests pass locally on Linux with ChromeOS ffmpeg branding and proprietary codecs enabled, and no local MSE layout test regression

Review URL: https://codereview.chromium.org/220113002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261485 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoMedia Metadata API: Extract raw tags for audio/video.
tommycli@chromium.org [Thu, 3 Apr 2014 16:31:18 +0000 (16:31 +0000)]
Media Metadata API: Extract raw tags for audio/video.

This is the really simple implementation that can be refined if consumer wants it.

BUG=318450

Review URL: https://codereview.chromium.org/220303002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261442 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoMac AVfoundation: Change AVVideoScalingModeResizeAspect -> AVVideoScalingModeResizeAs...
mcasas@chromium.org [Thu, 3 Apr 2014 12:28:02 +0000 (12:28 +0000)]
Mac AVfoundation: Change AVVideoScalingModeResizeAspect -> AVVideoScalingModeResizeAspectFill

AVCaptureVideoDataOutput uses AVVideoScalingModeResizeAspect
to "Preserve aspect ratio of the source, and fill remaining areas
with black to fit destination dimensions." [1]. However, in at least
two cases, this seems to be problematic:
- When capturing 480p using a Blackmagic Ultra Studio Mini
Recorder. (http://crbug.com/347371).
- When opening the camera in a 16:9 aspect ratio using
AVFoundation _and then without closing it_ opening in a 4:3
aspect ratio with QTKit (http://crbug.com/357252).

The solution in both cases is to instruct the AVCaptureVideoDataOutput
to use AVVideoScalingModeResizeAspectFill: "Preserve aspect ratio of
the source, and crop picture to fit destination dimensions" [1].

[1] https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVFoundation_Constants/Reference/reference.html#jumpTo_75

BUG=288562, 357252, 347371

Review URL: https://codereview.chromium.org/223513002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261373 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoMake VEA client of command buffer; move sync. IPC to VDA/VEA::Initialize()
sheu@chromium.org [Thu, 3 Apr 2014 12:12:04 +0000 (12:12 +0000)]
Make VEA client of command buffer; move sync. IPC to VDA/VEA::Initialize()

Much refactoring of VDA/VEA.  Issues:
* Encoders will need to be able to synchronize with the 3D command buffer to
  support encoding from textures.
* The IPC interface from GpuVideo{Decode,Encode}AcceleratorHost to
  GpuVideo{Decode,Encode}Accelerator collapses the creation and initialization
  IPC calls into one to save a round-trip.  Unfortunately this synchronous IPC
  happens in the constructor, making the interface unwieldy (and requiring that
  initialization parameters be passed both on construction and initialization).

Solutions:
* Make the VEA a client of the command buffer.  Harmonize
  GpuVideo{Decode,Encode}AcceleratorHost implementations to make codepaths
  parallel (and easier to reason about).
* Move the synchronous IPC calls in the constructor of GpuV{D,E}AH into the
  Initialize() call, and remove the requirement that the initialization
  parameters be passed in the constructor.
* Make VEA::Initialize() a 'bool' function call, as it is done in VDA, to allow
  Initialize() to be used synchronously.
* (minor) remove SupportsWeakPtr from VDA interface.

BUG=269312
TEST=local build, run, unittests on CrOS snow

Review URL: https://codereview.chromium.org/185403020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261365 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoAdds the failure reason to the VideoCaptureDevice error message on Mac.
jiayl@chromium.org [Thu, 3 Apr 2014 11:35:06 +0000 (11:35 +0000)]
Adds the failure reason to the VideoCaptureDevice error message on Mac.
This will help debug camera issues for getUserMedia callers.

BUG=

Review URL: https://codereview.chromium.org/221413006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261342 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoAdds extra header data for Android AAC playback when decoding MPEG2TS.
gunsch@chromium.org [Thu, 3 Apr 2014 07:37:28 +0000 (07:37 +0000)]
Adds extra header data for Android AAC playback when decoding MPEG2TS.

BUG=357668
R=acolwell@chromium.org, damienv@chromium.org

Review URL: https://codereview.chromium.org/216423013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261308 0039d316-1c4b-4281-b951-d872f2087c98

2 weeks agoCast: PacketPipe to take SingleThreadTaskRunner as argument
hclam@chromium.org [Thu, 3 Apr 2014 07:36:25 +0000 (07:36 +0000)]
Cast: PacketPipe to take SingleThreadTaskRunner as argument

This change allows injection of fake task runner for tests that use
PacketPipe. We can then write tests with simulated network and clock.

Review URL: https://codereview.chromium.org/218623009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src/media@261306 0039d316-1c4b-4281-b951-d872f2087c98