diff options
-rw-r--r-- | chrome/renderer/render_view.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/webmediaplayer_delegate_impl.cc | 6 | ||||
-rw-r--r-- | media/base/media_posix.cc | 46 | ||||
-rw-r--r-- | media/filters/ffmpeg_audio_decoder.cc | 6 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer.h | 1 | ||||
-rw-r--r-- | media/filters/ffmpeg_glue.cc | 2 | ||||
-rw-r--r-- | media/media.gyp | 10 | ||||
-rw-r--r-- | webkit/webkit.gyp | 11 |
8 files changed, 46 insertions, 42 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 1236886..804aff3 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -1877,13 +1877,7 @@ WebPluginDelegate* RenderView::CreatePluginDelegate( } webkit_glue::WebMediaPlayerDelegate* RenderView::CreateMediaPlayerDelegate() { -#if defined(OS_WIN) return new WebMediaPlayerDelegateImpl(this); -#else - // TODO(port) - NOTIMPLEMENTED(); - return NULL; -#endif } void RenderView::OnMissingPluginStatus(WebPluginDelegate* delegate, diff --git a/chrome/renderer/webmediaplayer_delegate_impl.cc b/chrome/renderer/webmediaplayer_delegate_impl.cc index bfece7c..1c90a61 100644 --- a/chrome/renderer/webmediaplayer_delegate_impl.cc +++ b/chrome/renderer/webmediaplayer_delegate_impl.cc @@ -12,12 +12,9 @@ #include "chrome/renderer/media/video_renderer_impl.h" #include "chrome/renderer/render_view.h" #include "googleurl/src/gurl.h" -#if defined(OS_WIN) -// FFmpeg is not ready for Linux and Mac yet. #include "media/filters/ffmpeg_audio_decoder.h" #include "media/filters/ffmpeg_demuxer.h" #include "media/filters/ffmpeg_video_decoder.h" -#endif #include "media/filters/null_audio_renderer.h" #include "third_party/WebKit/WebKit/chromium/public/WebRect.h" #include "third_party/WebKit/WebKit/chromium/public/WebSize.h" @@ -66,12 +63,9 @@ WebMediaPlayerDelegateImpl::WebMediaPlayerDelegateImpl(RenderView* view) view_(view), tasks_(kLastTaskIndex) { // TODO(hclam): Add filter factory for demuxer and decoders. -#if defined(OS_WIN) - // FFmpeg is not ready for Linux and Mac yet. filter_factory_->AddFactory(media::FFmpegDemuxer::CreateFilterFactory()); filter_factory_->AddFactory(media::FFmpegAudioDecoder::CreateFactory()); filter_factory_->AddFactory(media::FFmpegVideoDecoder::CreateFactory()); -#endif if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableAudio)) { filter_factory_->AddFactory( media::NullAudioRenderer::CreateFilterFactory()); diff --git a/media/base/media_posix.cc b/media/base/media_posix.cc index edbced0..1b3f323 100644 --- a/media/base/media_posix.cc +++ b/media/base/media_posix.cc @@ -22,11 +22,6 @@ // be promising, but I don't quite understand it yet. extern "C" { -int (*av_get_bits_per_sample_format_ptr)(enum SampleFormat sample_fmt); -int av_get_bits_per_sample_format(enum SampleFormat sample_fmt) { - return av_get_bits_per_sample_format(sample_fmt); -} - void (*avcodec_init_ptr)(void) = NULL; void avcodec_init(void) { avcodec_init_ptr(); @@ -75,6 +70,11 @@ int avcodec_decode_video(AVCodecContext* avctx, AVFrame* picture, } +int (*av_get_bits_per_sample_format_ptr)(enum SampleFormat sample_fmt); +int av_get_bits_per_sample_format(enum SampleFormat sample_fmt) { + return av_get_bits_per_sample_format_ptr(sample_fmt); +} + void (*av_register_all_ptr)(void); void av_register_all(void) { av_register_all_ptr(); @@ -99,12 +99,29 @@ int av_read_frame(AVFormatContext* s, AVPacket* pkt) { return av_read_frame_ptr(s, pkt); } +int (*av_seek_frame_ptr)(AVFormatContext* s, int stream_index, + int64_t timestamp, int flags) = NULL; +int av_seek_frame(AVFormatContext* s, int stream_index, + int64_t timestamp, int flags) { + return av_seek_frame_ptr(s, stream_index, timestamp, flags); +} + +int (*av_register_protocol_ptr)(URLProtocol* protocol) = NULL; +int av_register_protocol(URLProtocol* protocol) { + return av_register_protocol_ptr(protocol); +} + void* (*av_malloc_ptr)(unsigned int size) = NULL; void* av_malloc(unsigned int size) { return av_malloc_ptr(size); } +void (*av_free_ptr)(void* ptr) = NULL; +void av_free(void* ptr) { + return av_free_ptr(ptr); +} + } // extern "C" @@ -169,9 +186,6 @@ bool InitializeMediaLibrary(const FilePath& module_dir) { // TODO(ajwong): Extract this to somewhere saner, and hopefully // autogenerate the bindings from the .def files. Having all this // code here is incredibly ugly. - av_get_bits_per_sample_format_ptr = - reinterpret_cast<int (*)(enum SampleFormat)>( - dlsym(libs[FILE_LIBAVCODEC], "av_get_bits_per_sample_format")); avcodec_init_ptr = reinterpret_cast<void(*)(void)>( dlsym(libs[FILE_LIBAVCODEC], "avcodec_init")); @@ -196,6 +210,9 @@ bool InitializeMediaLibrary(const FilePath& module_dir) { const uint8_t*, int)>( dlsym(libs[FILE_LIBAVCODEC], "avcodec_decode_video")); + av_get_bits_per_sample_format_ptr = + reinterpret_cast<int (*)(enum SampleFormat)>( + dlsym(libs[FILE_LIBAVCODEC], "av_get_bits_per_sample_format")); av_register_all_ptr = reinterpret_cast<void(*)(void)>( dlsym(libs[FILE_LIBAVFORMAT], "av_register_all")); @@ -210,10 +227,19 @@ bool InitializeMediaLibrary(const FilePath& module_dir) { av_read_frame_ptr = reinterpret_cast<int (*)(AVFormatContext*, AVPacket*)>( dlsym(libs[FILE_LIBAVFORMAT], "av_read_frame")); + av_seek_frame_ptr = + reinterpret_cast<int (*)(AVFormatContext*, int, int64_t, int)>( + dlsym(libs[FILE_LIBAVFORMAT], "av_seek_frame")); + av_register_protocol_ptr = + reinterpret_cast<int (*)(URLProtocol*)>( + dlsym(libs[FILE_LIBAVFORMAT], "av_register_protocol")); av_malloc_ptr = reinterpret_cast<void* (*)(unsigned int)>( dlsym(libs[FILE_LIBAVUTIL], "av_malloc")); + av_free_ptr = + reinterpret_cast<void (*)(void*)>( + dlsym(libs[FILE_LIBAVUTIL], "av_free")); // Check that all the symbols were loaded correctly before returning true. if (avcodec_init_ptr && @@ -224,11 +250,15 @@ bool InitializeMediaLibrary(const FilePath& module_dir) { avcodec_decode_audio2_ptr && avcodec_decode_video_ptr && + av_get_bits_per_sample_format_ptr && av_register_all_ptr && av_open_input_file_ptr && av_find_stream_info_ptr && av_read_frame_ptr && + av_seek_frame_ptr && + av_register_protocol_ptr && + av_free_ptr && av_malloc_ptr) { return true; } diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc index 019bc15..77b602d 100644 --- a/media/filters/ffmpeg_audio_decoder.cc +++ b/media/filters/ffmpeg_audio_decoder.cc @@ -77,7 +77,11 @@ void FFmpegAudioDecoder::OnDecode(Buffer* input) { input->GetData(), input->GetDataSize()); - if (result < 0 || output_buffer_size > kOutputBufferSize) { + // TODO(ajwong): Consider if kOutputBufferSize should just be an int instead + // of a size_t. + if (result < 0 || + output_buffer_size < 0 || + static_cast<size_t>(output_buffer_size) > kOutputBufferSize) { host_->Error(PIPELINE_ERROR_DECODE); } else if (result == 0) { // TODO(scherkus): does this mark EOS? Do we want to fulfill a read request diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h index 640f9cc..9e92cd4 100644 --- a/media/filters/ffmpeg_demuxer.h +++ b/media/filters/ffmpeg_demuxer.h @@ -35,7 +35,6 @@ struct AVBitStreamFilterContext; struct AVFormatContext; struct AVPacket; struct AVStream; -enum CodecID; namespace media { diff --git a/media/filters/ffmpeg_glue.cc b/media/filters/ffmpeg_glue.cc index 820f850..ca3ed1d 100644 --- a/media/filters/ffmpeg_glue.cc +++ b/media/filters/ffmpeg_glue.cc @@ -105,7 +105,7 @@ static URLProtocol kFFmpegProtocol = { FFmpegGlue::FFmpegGlue() { // Register our protocol glue code with FFmpeg. avcodec_init(); - register_protocol(&kFFmpegProtocol); + av_register_protocol(&kFFmpegProtocol); // Now register the rest of FFmpeg. av_register_all(); diff --git a/media/media.gyp b/media/media.gyp index 5379fbe..3077008 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -101,15 +101,7 @@ }, 'conditions': [ ['OS =="linux"', { - 'sources!': [ - 'filters/ffmpeg_audio_decoder.cc', - 'filters/ffmpeg_demuxer.cc', - 'filters/ffmpeg_demuxer.h', - 'filters/ffmpeg_glue.cc', - 'filters/ffmpeg_video_decoder.cc', - ], - 'sources/': [ ['exclude', '_(mac|win)\\.cc$'], - ['exclude', '\\.mm?$' ] ], + 'sources/': [ ['exclude', '_(mac|win)\\.cc$'] ], }], ['OS =="mac"', { 'link_settings': { diff --git a/webkit/webkit.gyp b/webkit/webkit.gyp index f759ba3..320e610 100644 --- a/webkit/webkit.gyp +++ b/webkit/webkit.gyp @@ -19,6 +19,7 @@ 'ENABLE_SVG_USE=1', 'ENABLE_SVG_FOREIGN_OBJECT=1', 'ENABLE_SVG_FONTS=1', + 'ENABLE_VIDEO=1', 'ENABLE_WORKERS=1', ], 'non_feature_defines': [ @@ -106,9 +107,6 @@ ], }], ['OS=="win"', { - 'feature_defines': [ - 'ENABLE_VIDEO=1' - ], 'non_feature_defines': [ 'CRASH=__debugbreak', # Match Safari and Mozilla on Windows. @@ -120,10 +118,6 @@ '../third_party/WebKit/WebCore/platform/text/win', '../third_party/WebKit/WebCore/platform/win', ], - }, { # else: OS!="win" - 'feature_defines': [ - 'ENABLE_VIDEO=0' - ], }], ], }, @@ -4138,9 +4132,6 @@ ['exclude', 'Win\\.cpp$'], ['exclude', '/(Windows|Uniscribe)[^/]*\\.cpp$'] ], - 'sources!': [ - '../third_party/WebKit/WebCore/platform/graphics/MediaPlayer.cpp', - ], }], ], }, |