| OLD | NEW |
| 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 "media/blink/webmediasource_impl.h" | 5 #include "media/blink/webmediasource_impl.h" |
| 6 | 6 |
| 7 #include "base/guid.h" | 7 #include "base/guid.h" |
| 8 #include "media/base/mime_util.h" | 8 #include "media/base/mime_util.h" |
| 9 #include "media/base/source_buffer.h" |
| 9 #include "media/blink/websourcebuffer_impl.h" | 10 #include "media/blink/websourcebuffer_impl.h" |
| 10 #include "media/filters/chunk_demuxer.h" | |
| 11 #include "third_party/WebKit/public/platform/WebString.h" | 11 #include "third_party/WebKit/public/platform/WebString.h" |
| 12 | 12 |
| 13 using ::blink::WebString; | 13 using ::blink::WebString; |
| 14 using ::blink::WebMediaSource; | 14 using ::blink::WebMediaSource; |
| 15 | 15 |
| 16 namespace media { | 16 namespace media { |
| 17 | 17 |
| 18 #define STATIC_ASSERT_MATCHING_STATUS_ENUM(webkit_name, chromium_name) \ | 18 #define STATIC_ASSERT_MATCHING_STATUS_ENUM(webkit_name, chromium_name) \ |
| 19 static_assert(static_cast<int>(WebMediaSource::webkit_name) == \ | 19 static_assert(static_cast<int>(WebMediaSource::webkit_name) == \ |
| 20 static_cast<int>(ChunkDemuxer::chromium_name), \ | 20 static_cast<int>(SourceBuffer::chromium_name), \ |
| 21 "mismatching status enum values: " #webkit_name) | 21 "mismatching status enum values: " #webkit_name) |
| 22 STATIC_ASSERT_MATCHING_STATUS_ENUM(AddStatusOk, kOk); | 22 STATIC_ASSERT_MATCHING_STATUS_ENUM(AddStatusOk, kOk); |
| 23 STATIC_ASSERT_MATCHING_STATUS_ENUM(AddStatusNotSupported, kNotSupported); | 23 STATIC_ASSERT_MATCHING_STATUS_ENUM(AddStatusNotSupported, kNotSupported); |
| 24 STATIC_ASSERT_MATCHING_STATUS_ENUM(AddStatusReachedIdLimit, kReachedIdLimit); | 24 STATIC_ASSERT_MATCHING_STATUS_ENUM(AddStatusReachedIdLimit, kReachedIdLimit); |
| 25 #undef STATIC_ASSERT_MATCHING_STATUS_ENUM | 25 #undef STATIC_ASSERT_MATCHING_STATUS_ENUM |
| 26 | 26 |
| 27 WebMediaSourceImpl::WebMediaSourceImpl(ChunkDemuxer* demuxer, | 27 WebMediaSourceImpl::WebMediaSourceImpl(SourceBuffer* source_buffer, |
| 28 const scoped_refptr<MediaLog>& media_log) | 28 const scoped_refptr<MediaLog>& media_log) |
| 29 : demuxer_(demuxer), media_log_(media_log) { | 29 : source_buffer_(source_buffer), media_log_(media_log) { |
| 30 DCHECK(demuxer_); | 30 DCHECK(source_buffer_); |
| 31 } | 31 } |
| 32 | 32 |
| 33 WebMediaSourceImpl::~WebMediaSourceImpl() {} | 33 WebMediaSourceImpl::~WebMediaSourceImpl() {} |
| 34 | 34 |
| 35 WebMediaSource::AddStatus WebMediaSourceImpl::addSourceBuffer( | 35 WebMediaSource::AddStatus WebMediaSourceImpl::addSourceBuffer( |
| 36 const blink::WebString& type, | 36 const blink::WebString& type, |
| 37 const blink::WebString& codecs, | 37 const blink::WebString& codecs, |
| 38 blink::WebSourceBuffer** source_buffer) { | 38 blink::WebSourceBuffer** source_buffer) { |
| 39 std::string id = base::GenerateGUID(); | 39 std::string id = base::GenerateGUID(); |
| 40 | 40 |
| 41 WebMediaSource::AddStatus result = static_cast<WebMediaSource::AddStatus>( | 41 WebMediaSource::AddStatus result = static_cast<WebMediaSource::AddStatus>( |
| 42 demuxer_->AddId(id, type.utf8().data(), codecs.utf8().data())); | 42 source_buffer_->AddId(id, type.utf8().data(), codecs.utf8().data())); |
| 43 | 43 |
| 44 if (result == WebMediaSource::AddStatusOk) | 44 if (result == WebMediaSource::AddStatusOk) |
| 45 *source_buffer = new WebSourceBufferImpl(id, demuxer_); | 45 *source_buffer = new WebSourceBufferImpl(id, source_buffer_); |
| 46 | 46 |
| 47 return result; | 47 return result; |
| 48 } | 48 } |
| 49 | 49 |
| 50 double WebMediaSourceImpl::duration() { | 50 double WebMediaSourceImpl::duration() { |
| 51 return demuxer_->GetDuration(); | 51 return source_buffer_->GetDuration(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 void WebMediaSourceImpl::setDuration(double new_duration) { | 54 void WebMediaSourceImpl::setDuration(double new_duration) { |
| 55 DCHECK_GE(new_duration, 0); | 55 DCHECK_GE(new_duration, 0); |
| 56 demuxer_->SetDuration(new_duration); | 56 source_buffer_->SetDuration(new_duration); |
| 57 } | 57 } |
| 58 | 58 |
| 59 void WebMediaSourceImpl::markEndOfStream( | 59 void WebMediaSourceImpl::markEndOfStream( |
| 60 WebMediaSource::EndOfStreamStatus status) { | 60 WebMediaSource::EndOfStreamStatus status) { |
| 61 PipelineStatus pipeline_status = PIPELINE_OK; | 61 PipelineStatus pipeline_status = PIPELINE_OK; |
| 62 | 62 |
| 63 switch (status) { | 63 switch (status) { |
| 64 case WebMediaSource::EndOfStreamStatusNoError: | 64 case WebMediaSource::EndOfStreamStatusNoError: |
| 65 break; | 65 break; |
| 66 case WebMediaSource::EndOfStreamStatusNetworkError: | 66 case WebMediaSource::EndOfStreamStatusNetworkError: |
| 67 pipeline_status = CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR; | 67 pipeline_status = CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR; |
| 68 break; | 68 break; |
| 69 case WebMediaSource::EndOfStreamStatusDecodeError: | 69 case WebMediaSource::EndOfStreamStatusDecodeError: |
| 70 pipeline_status = CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR; | 70 pipeline_status = CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR; |
| 71 break; | 71 break; |
| 72 } | 72 } |
| 73 | 73 |
| 74 demuxer_->MarkEndOfStream(pipeline_status); | 74 source_buffer_->MarkEndOfStream(pipeline_status); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void WebMediaSourceImpl::unmarkEndOfStream() { | 77 void WebMediaSourceImpl::unmarkEndOfStream() { |
| 78 demuxer_->UnmarkEndOfStream(); | 78 source_buffer_->UnmarkEndOfStream(); |
| 79 } | 79 } |
| 80 | 80 |
| 81 } // namespace media | 81 } // namespace media |
| OLD | NEW |