summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-09 23:47:53 +0000
committerajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-09 23:47:53 +0000
commit83119ed160f4203cbb93d83ecf175dfcf0dc3219 (patch)
tree62add8740433f1bfb4f8a047df032f8ebd918227
parent9196370c100d39e73cb06de12953ddd05a949ba5 (diff)
downloadchromium_src-83119ed160f4203cbb93d83ecf175dfcf0dc3219.zip
chromium_src-83119ed160f4203cbb93d83ecf175dfcf0dc3219.tar.gz
chromium_src-83119ed160f4203cbb93d83ecf175dfcf0dc3219.tar.bz2
Removing ffmpeg again.
Reverting r17992 and r17987. Review URL: http://codereview.chromium.org/119399 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17995 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--media/DEPS2
-rw-r--r--media/base/media_posix.cc290
-rw-r--r--third_party/ffmpeg/avcodec-52.sigs18
-rw-r--r--third_party/ffmpeg/avformat-52.sigs12
-rw-r--r--third_party/ffmpeg/avutil-50.sigs9
-rwxr-xr-xthird_party/ffmpeg/ffmpeg.gyp135
-rw-r--r--third_party/ffmpeg/ffmpeg_stub_headers.fragment9
-rwxr-xr-xthird_party/ffmpeg/generate_stubs.py8
8 files changed, 316 insertions, 167 deletions
diff --git a/media/DEPS b/media/DEPS
index 3d2daa9..2b2d7d8 100644
--- a/media/DEPS
+++ b/media/DEPS
@@ -1,3 +1,3 @@
include_rules = [
- "+third_party/ffmpeg",
+ "+third_party/ffmpeg/include",
]
diff --git a/media/base/media_posix.cc b/media/base/media_posix.cc
index 51efbca..9a964dd 100644
--- a/media/base/media_posix.cc
+++ b/media/base/media_posix.cc
@@ -11,46 +11,304 @@
#include "base/file_path.h"
#include "base/logging.h"
#include "base/path_service.h"
-#include "third_party/ffmpeg/ffmpeg_stubs.h"
+#include "media/filters/ffmpeg_common.h"
+
+// We create stub references to dynamically loaded functions in FFmpeg
+// for ease of linking.
+//
+// TODO(ajwong): We need to find a more maintainable way to have this work.
+// Also, this code should really be in the FFmpeg wrapper, and not here
+// in the media level. The concept of "weak symbols" looks like it might
+// be promising, but I don't quite understand it yet.
+//
+// TODO(scherkus): I am *this close* to writing the world's coolest macro to
+// make modifying this file easier.
+extern "C" {
+
+// libavcodec functions.
+void (*av_free_packet_ptr)(AVPacket* pkt) = NULL;
+void av_free_packet(AVPacket* pkt) {
+ av_free_packet_ptr(pkt);
+}
+
+int (*av_get_bits_per_sample_format_ptr)(enum SampleFormat sample_fmt) = NULL;
+int av_get_bits_per_sample_format(enum SampleFormat sample_fmt) {
+ return av_get_bits_per_sample_format_ptr(sample_fmt);
+}
+
+void (*av_init_packet_ptr)(AVPacket* pkt) = NULL;
+void av_init_packet(AVPacket* pkt) {
+ av_init_packet_ptr(pkt);
+}
+
+int (*av_new_packet_ptr)(AVPacket* pkt, int size) = NULL;
+int av_new_packet(AVPacket* pkt, int size) {
+ return av_new_packet_ptr(pkt, size);
+}
+
+AVFrame* (*avcodec_alloc_frame_ptr)(void) = NULL;
+AVFrame* avcodec_alloc_frame(void) {
+ return avcodec_alloc_frame_ptr();
+}
+
+int (*avcodec_decode_audio3_ptr)(AVCodecContext* avctx, int16_t* samples,
+ int* frame_size_ptr, AVPacket* avpkt) = NULL;
+int avcodec_decode_audio3(AVCodecContext* avctx, int16_t* samples,
+ int* frame_size_ptr, AVPacket* avpkt) {
+ return avcodec_decode_audio3_ptr(avctx, samples, frame_size_ptr, avpkt);
+}
+
+int (*avcodec_decode_video2_ptr)(AVCodecContext* avctx, AVFrame* picture,
+ int* got_picture_ptr, AVPacket* avpkt) = NULL;
+int avcodec_decode_video2(AVCodecContext* avctx, AVFrame* picture,
+ int* got_picture_ptr, AVPacket* avpkt) {
+ return avcodec_decode_video2_ptr(avctx, picture, got_picture_ptr, avpkt);
+}
+
+AVCodec* (*avcodec_find_decoder_ptr)(enum CodecID id) = NULL;
+AVCodec* avcodec_find_decoder(enum CodecID id) {
+ return avcodec_find_decoder_ptr(id);
+}
+
+void (*avcodec_flush_buffers_ptr)(AVCodecContext *avctx) = NULL;
+void avcodec_flush_buffers(AVCodecContext *avctx) {
+ avcodec_flush_buffers_ptr(avctx);
+}
+
+void (*avcodec_init_ptr)(void) = NULL;
+void avcodec_init(void) {
+ avcodec_init_ptr();
+}
+
+int (*avcodec_open_ptr)(AVCodecContext* avctx, AVCodec* codec) = NULL;
+int avcodec_open(AVCodecContext* avctx, AVCodec* codec) {
+ return avcodec_open_ptr(avctx, codec);
+}
+
+int (*avcodec_thread_init_ptr)(AVCodecContext* s, int thread_count) = NULL;
+int avcodec_thread_init(AVCodecContext* s, int thread_count) {
+ return avcodec_thread_init_ptr(s, thread_count);
+}
+
+
+// libavformat functions.
+int (*av_find_stream_info_ptr)(AVFormatContext* ic) = NULL;
+int av_find_stream_info(AVFormatContext* ic) {
+ return av_find_stream_info_ptr(ic);
+}
+
+int (*av_open_input_file_ptr)(AVFormatContext** ic_ptr, const char* filename,
+ AVInputFormat* fmt, int buf_size,
+ AVFormatParameters* ap) = NULL;
+int av_open_input_file(AVFormatContext** ic_ptr, const char* filename,
+ AVInputFormat* fmt, int buf_size,
+ AVFormatParameters* ap) {
+ return av_open_input_file_ptr(ic_ptr, filename, fmt, buf_size, ap);
+}
+
+int (*av_read_frame_ptr)(AVFormatContext* s, AVPacket* pkt) = NULL;
+int av_read_frame(AVFormatContext* s, AVPacket* pkt) {
+ return av_read_frame_ptr(s, pkt);
+}
+
+void (*av_register_all_ptr)(void) = NULL;
+void av_register_all(void) {
+ av_register_all_ptr();
+}
+
+int (*av_register_protocol_ptr)(URLProtocol* protocol) = NULL;
+int av_register_protocol(URLProtocol* protocol) {
+ return av_register_protocol_ptr(protocol);
+}
+
+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);
+}
+
+
+// libavutil functions.
+void (*av_free_ptr)(void* ptr) = NULL;
+void av_free(void* ptr) {
+ return av_free_ptr(ptr);
+}
+
+void* (*av_malloc_ptr)(unsigned int size) = NULL;
+void* av_malloc(unsigned int size) {
+ return av_malloc_ptr(size);
+}
+
+int64_t (*av_rescale_q_ptr)(int64_t a, AVRational bq, AVRational cq) = NULL;
+int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) {
+ return av_rescale_q_ptr(a, bq, cq);
+}
+
+} // extern "C"
-namespace tp_ffmpeg = third_party_ffmpeg;
namespace media {
namespace {
-// Retrieves the DSOName for the given key.
-std::string GetDSOName(tp_ffmpeg::StubModules stub_key) {
+enum FFmpegDSOKeys {
+ FILE_LIBAVCODEC, // full path to libavcodec media decoding library.
+ FILE_LIBAVFORMAT, // full path to libavformat media parsing library.
+ FILE_LIBAVUTIL, // full path to libavutil media utility library.
+};
+
+// Retrieves the DLLName for the given key.
+std::string GetDSOName(FFmpegDSOKeys dso_key) {
// TODO(ajwong): Do we want to lock to a specific ffmpeg version?
// TODO(port): These library names are incorrect for mac. We need .dynlib
// suffixes.
- switch (stub_key) {
- case tp_ffmpeg::kModuleAvcodec52:
+ switch (dso_key) {
+ case FILE_LIBAVCODEC:
return FILE_PATH_LITERAL("libavcodec.so.52");
- case tp_ffmpeg::kModuleAvformat52:
+ case FILE_LIBAVFORMAT:
return FILE_PATH_LITERAL("libavformat.so.52");
- case tp_ffmpeg::kModuleAvutil50:
+ case FILE_LIBAVUTIL:
return FILE_PATH_LITERAL("libavutil.so.50");
default:
- LOG(DFATAL) << "Invalid stub module requested: " << stub_key;
+ LOG(DFATAL) << "Invalid DSO key requested: " << dso_key;
return FILE_PATH_LITERAL("");
}
}
} // namespace
-// Attempts to initialize the media library (loading DSOs, etc.).
+// Attempts to initialize the media library (loading DLLs, DSOs, etc.).
// Returns true if everything was successfully initialized, false otherwise.
bool InitializeMediaLibrary(const FilePath& module_dir) {
// TODO(ajwong): We need error resolution.
- tp_ffmpeg::StubPathMap paths;
- for (int i = 0; i < static_cast<int>(tp_ffmpeg::kNumStubModules); ++i) {
- tp_ffmpeg::StubModules module = static_cast<tp_ffmpeg::StubModules>(i);
- FilePath path = module_dir.Append(GetDSOName(module));
- paths[module].push_back(path.value());
+ FFmpegDSOKeys path_keys[] = {
+ FILE_LIBAVCODEC,
+ FILE_LIBAVFORMAT,
+ FILE_LIBAVUTIL
+ };
+ void* libs[arraysize(path_keys)] = {};
+ for (size_t i = 0; i < arraysize(path_keys); ++i) {
+ FilePath path = module_dir.Append(GetDSOName(path_keys[i]));
+ libs[i] = dlopen(path.value().c_str(), RTLD_LAZY);
+ if (!libs[i])
+ break;
+ }
+
+ // Check that we loaded all libraries successfully. We only need to check the
+ // last array element because the loop above breaks on any failure.
+ if (libs[arraysize(libs)-1] == NULL) {
+ // Free any loaded libraries if we weren't successful.
+ for (size_t i = 0; i < arraysize(libs) && libs[i] != NULL; ++i) {
+ dlclose(libs[i]);
+ libs[i] = NULL; // Just to be safe.
+ }
+ return false;
+ }
+
+ // TODO(ajwong): Extract this to somewhere saner, and hopefully
+ // autogenerate the bindings from the .def files. Having all this
+ // code here is incredibly ugly.
+
+ // libavcodec functions.
+ av_free_packet_ptr =
+ reinterpret_cast<void (*)(AVPacket*)>(
+ dlsym(libs[FILE_LIBAVCODEC], "av_free_packet"));
+ av_get_bits_per_sample_format_ptr =
+ reinterpret_cast<int (*)(enum SampleFormat)>(
+ dlsym(libs[FILE_LIBAVCODEC], "av_get_bits_per_sample_format"));
+ av_init_packet_ptr =
+ reinterpret_cast<void (*)(AVPacket*)>(
+ dlsym(libs[FILE_LIBAVCODEC], "av_init_packet"));
+ av_new_packet_ptr =
+ reinterpret_cast<int (*)(AVPacket*, int)>(
+ dlsym(libs[FILE_LIBAVCODEC], "av_new_packet"));
+ avcodec_alloc_frame_ptr =
+ reinterpret_cast<AVFrame* (*)(void)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_alloc_frame"));
+ avcodec_decode_audio3_ptr =
+ reinterpret_cast<int (*)(AVCodecContext*, int16_t*, int*, AVPacket*)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_decode_audio3"));
+ avcodec_decode_video2_ptr =
+ reinterpret_cast<int (*)(AVCodecContext*, AVFrame*, int*, AVPacket*)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_decode_video2"));
+ avcodec_find_decoder_ptr =
+ reinterpret_cast<AVCodec* (*)(enum CodecID)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_find_decoder"));
+ avcodec_flush_buffers_ptr =
+ reinterpret_cast<void (*)(AVCodecContext*)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_flush_buffers"));
+ avcodec_init_ptr =
+ reinterpret_cast<void (*)(void)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_init"));
+ avcodec_open_ptr =
+ reinterpret_cast<int (*)(AVCodecContext*, AVCodec*)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_open"));
+ avcodec_thread_init_ptr =
+ reinterpret_cast<int (*)(AVCodecContext*, int)>(
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_thread_init"));
+
+ // libavformat functions.
+ av_find_stream_info_ptr =
+ reinterpret_cast<int (*)(AVFormatContext*)>(
+ dlsym(libs[FILE_LIBAVFORMAT], "av_find_stream_info"));
+ av_open_input_file_ptr =
+ reinterpret_cast<int (*)(AVFormatContext**, const char*,
+ AVInputFormat*, int,
+ AVFormatParameters*)>(
+ dlsym(libs[FILE_LIBAVFORMAT], "av_open_input_file"));
+ av_read_frame_ptr =
+ reinterpret_cast<int (*)(AVFormatContext*, AVPacket*)>(
+ dlsym(libs[FILE_LIBAVFORMAT], "av_read_frame"));
+ av_register_all_ptr =
+ reinterpret_cast<void (*)(void)>(
+ dlsym(libs[FILE_LIBAVFORMAT], "av_register_all"));
+ av_register_protocol_ptr =
+ reinterpret_cast<int (*)(URLProtocol*)>(
+ dlsym(libs[FILE_LIBAVFORMAT], "av_register_protocol"));
+ av_seek_frame_ptr =
+ reinterpret_cast<int (*)(AVFormatContext*, int, int64_t, int)>(
+ dlsym(libs[FILE_LIBAVFORMAT], "av_seek_frame"));
+
+ // libavutil functions.
+ av_free_ptr =
+ reinterpret_cast<void (*)(void*)>(
+ dlsym(libs[FILE_LIBAVUTIL], "av_free"));
+ av_malloc_ptr =
+ reinterpret_cast<void* (*)(unsigned int)>(
+ dlsym(libs[FILE_LIBAVUTIL], "av_malloc"));
+ av_rescale_q_ptr =
+ reinterpret_cast<int64_t (*)(int64_t, AVRational, AVRational)>(
+ dlsym(libs[FILE_LIBAVUTIL], "av_rescale_q"));
+
+ // Check that all the symbols were loaded correctly before returning true.
+ if (av_free_packet_ptr &&
+ av_get_bits_per_sample_format_ptr &&
+ av_init_packet_ptr &&
+ av_new_packet_ptr &&
+ avcodec_alloc_frame_ptr &&
+ avcodec_decode_audio3_ptr &&
+ avcodec_decode_video2_ptr &&
+ avcodec_find_decoder_ptr &&
+ avcodec_flush_buffers_ptr &&
+ avcodec_init_ptr &&
+ avcodec_open_ptr &&
+ avcodec_thread_init_ptr &&
+
+ av_find_stream_info_ptr &&
+ av_open_input_file_ptr &&
+ av_read_frame_ptr &&
+ av_register_all_ptr &&
+ av_register_protocol_ptr &&
+ av_seek_frame_ptr &&
+
+ av_free_ptr &&
+ av_malloc_ptr &&
+ av_rescale_q_ptr) {
+ return true;
}
- return tp_ffmpeg::InitializeStubs(paths);
+ return false;
}
} // namespace media
diff --git a/third_party/ffmpeg/avcodec-52.sigs b/third_party/ffmpeg/avcodec-52.sigs
deleted file mode 100644
index 27b8ef9..0000000
--- a/third_party/ffmpeg/avcodec-52.sigs
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2009 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Functions from avcodec used in chromium code.
-
-AVCodec *avcodec_find_decoder(enum CodecID id);
-AVFrame *avcodec_alloc_frame(void);
-int av_get_bits_per_sample_format(enum SampleFormat sample_fmt);
-int av_new_packet(AVPacket *pkt, int size);
-int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, AVPacket *avpkt);
-int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, AVPacket *avpkt);
-int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
-int avcodec_thread_init(AVCodecContext *s, int thread_count);
-void av_free_packet(AVPacket *pkt);
-void av_init_packet(AVPacket *pkt);
-void avcodec_flush_buffers(AVCodecContext *avctx);
-void avcodec_init(void);
diff --git a/third_party/ffmpeg/avformat-52.sigs b/third_party/ffmpeg/avformat-52.sigs
deleted file mode 100644
index 5f7b193..0000000
--- a/third_party/ffmpeg/avformat-52.sigs
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2009 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Functions from avformat used in chromium code.
-
-int av_find_stream_info(AVFormatContext *ic);
-int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, AVInputFormat *fmt, int buf_size, AVFormatParameters *ap);
-int av_read_frame(AVFormatContext *s, AVPacket *pkt);
-int av_register_protocol(URLProtocol *protocol);
-int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags);
-void av_register_all(void);
diff --git a/third_party/ffmpeg/avutil-50.sigs b/third_party/ffmpeg/avutil-50.sigs
deleted file mode 100644
index c83f6fa..0000000
--- a/third_party/ffmpeg/avutil-50.sigs
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2009 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Functions from avutil used in chromium code.
-
-int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq);
-void *av_malloc(unsigned int size);
-void av_free(void *ptr);
diff --git a/third_party/ffmpeg/ffmpeg.gyp b/third_party/ffmpeg/ffmpeg.gyp
index 110d7df..5a3d706 100755
--- a/third_party/ffmpeg/ffmpeg.gyp
+++ b/third_party/ffmpeg/ffmpeg.gyp
@@ -15,16 +15,8 @@
},
'targets': [
{
- 'variables': {
- 'generate_stubs_script': 'generate_stubs.py',
- 'sig_files': [
- 'avcodec-52.sigs',
- 'avformat-52.sigs',
- 'avutil-50.sigs',
- ],
- 'extra_header': 'ffmpeg_stub_headers.fragment',
- },
'target_name': 'ffmpeg',
+ 'type': 'none',
'msvs_guid': 'D7A94F58-576A-45D9-A45F-EB87C63ABBB0',
'sources': [
'include/libavcodec/avcodec.h',
@@ -51,106 +43,57 @@
'include/libavutil/sha1.h',
'include/win/inttypes.h',
'include/win/stdint.h',
- '<@(sig_files)',
- '<(extra_header)'
],
- 'hard_dependency': 1,
'direct_dependent_settings': {
'include_dirs': [
'include',
],
},
'conditions': [
- ['OS=="win"',
- {
- 'variables': {
- 'outfile_type': 'windows_lib',
- 'output_dir': '<(SHARED_INTERMEDIATE_DIR)'
- },
- 'type': 'none',
- 'dependencies': [
- 'ffmpeg_binaries',
- ],
- 'sources!': [
- '<(extra_header)',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- 'include/win',
- ],
- 'link_settings': {
- 'libraries': [
- '<(output_dir)/avcodec-52.lib',
- '<(output_dir)/avformat-52.lib',
- '<(output_dir)/avutil-50.lib',
- ],
- },
- },
- 'rules': [
- {
- 'rule_name': 'generate_libs',
- 'extension': 'sigs',
- 'inputs': [
- '<(generate_stubs_script)',
- '<@(sig_files)',
- ],
- 'outputs': [
- '<(output_dir)/<(RULE_INPUT_ROOT).lib',
- ],
- 'action': ['python', '<(generate_stubs_script)',
- '-o', '<(output_dir)',
- '-t', '<(outfile_type)',
- '<@(RULE_INPUT_PATH)',
- ],
- 'message': 'Generating FFmpeg import libraries.',
- },
- ],
- }, { # else OS!="win"
- 'variables': {
- 'outfile_type': 'posix_stubs',
- 'stubs_filename_root': 'ffmpeg_stubs',
- 'project_path': 'third_party/ffmpeg',
- 'output_root': '<(SHARED_INTERMEDIATE_DIR)/ffmpeg',
- },
- 'type': '<(library)',
+ ['OS=="win"', {
+ 'sources': [
+ 'avcodec-52.def',
+ 'avformat-52.def',
+ 'avutil-50.def',
+ ],
+ 'direct_dependent_settings': {
'include_dirs': [
- 'include',
- '<(output_root)',
- '../..', # The chromium 'src' directory.
+ 'include/win',
],
- 'direct_dependent_settings': {
- 'include_dirs': [
- '<(output_root)',
- '../..', # The chromium 'src' directory.
+ 'link_settings': {
+ 'libraries': [
+ '<(PRODUCT_DIR)/lib/avcodec-52.lib',
+ '<(PRODUCT_DIR)/lib/avformat-52.lib',
+ '<(PRODUCT_DIR)/lib/avutil-50.lib',
],
},
- 'actions': [
- {
- 'action_name': 'generate_stubs',
- 'inputs': [
- '<(generate_stubs_script)',
- '<(extra_header)',
- '<@(sig_files)',
- ],
- 'outputs': [
- '<(output_root)/<(project_path)/<(stubs_filename_root).cc',
- '<(output_root)/<(project_path)/<(stubs_filename_root).h',
- ],
- 'action': ['python',
- '<(generate_stubs_script)',
- '-o', '<(output_root)/<(project_path)',
- '-t', '<(outfile_type)',
- '-e', '<(extra_header)',
- '-s', '<(stubs_filename_root)',
- '-p', '<(project_path)',
- '<@(_inputs)',
+ },
+ 'dependencies': [
+ 'ffmpeg_binaries',
+ '../../build/win/system.gyp:cygwin',
+ ],
+ 'rules': [
+ {
+ 'rule_name': 'generate_libs',
+ 'extension': 'def',
+ 'inputs': [
+ 'generate_libs.py',
+ ],
+ 'outputs': [
+ '<(PRODUCT_DIR)/lib/<(RULE_INPUT_ROOT).lib',
+ ],
+ 'variables': {
+ 'def_files': [
+ 'avcodec-52.def',
+ 'avformat-52.def',
+ 'avutil-50.def',
],
- 'message': 'Generating FFmpeg stubs for dynamic loading.',
- 'process_outputs_as_sources': 1,
},
- ],
- }
- ],
+ 'action': ['python', '<@(_inputs)', '-o', '<(PRODUCT_DIR)/lib', '<@(RULE_INPUT_PATH)'],
+ 'message': 'Generating import libraries',
+ },
+ ],
+ }],
],
},
{
diff --git a/third_party/ffmpeg/ffmpeg_stub_headers.fragment b/third_party/ffmpeg/ffmpeg_stub_headers.fragment
deleted file mode 100644
index 99abcf7..0000000
--- a/third_party/ffmpeg/ffmpeg_stub_headers.fragment
+++ /dev/null
@@ -1,9 +0,0 @@
-// These are some extra includes needed in the generated stub file for defining
-// various FFmpeg types.
-
-extern "C" {
-
-#include "third_party/ffmpeg/include/libavcodec/avcodec.h"
-#include "third_party/ffmpeg/include/libavformat/avformat.h"
-
-}
diff --git a/third_party/ffmpeg/generate_stubs.py b/third_party/ffmpeg/generate_stubs.py
index 1713d76..1288697 100755
--- a/third_party/ffmpeg/generate_stubs.py
+++ b/third_party/ffmpeg/generate_stubs.py
@@ -575,7 +575,6 @@ void %s();
// Umbrella initializer for all the modules in this stub file.
bool InitializeStubs(const StubPathMap& path_map);
-
} // namespace %s
#endif // %s
@@ -589,17 +588,15 @@ bool InitializeStubs(const StubPathMap& path_map);
outfile: The file handle to populate.
"""
outfile.write('extern "C" {\n')
- outfile.write('\n')
self.WriteFunctionPointers(outfile)
self.WriteStubFunctions(outfile)
- outfile.write('\n')
outfile.write('} // extern "C"\n')
outfile.write('\n')
outfile.write('namespace %s {\n' % namespace)
outfile.write('\n')
self.WriteModuleInitializeFunctions(outfile)
- outfile.write('} // namespace %s\n\n' % namespace)
+ outfile.write('} // namespace %s\n' % namespace)
def WriteFunctionPointers(self, outfile):
"""Write the function pointer declarations needed by the stubs.
@@ -741,7 +738,7 @@ def main():
if options.out_dir is None:
parser.error('Output location not specified')
- if len(args) == 0:
+ if args:
parser.error('No inputs specified')
if options.type not in [FILE_TYPE_WIN, FILE_TYPE_POSIX_STUB]:
@@ -791,7 +788,6 @@ def main():
impl_file)
if options.extra_stub_header is not None:
try:
- impl_file.write('\n')
extra_header_file = open(options.extra_stub_header, 'r')
for line in extra_header_file:
impl_file.write(line)