diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-06 01:29:23 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-06 01:29:23 +0000 |
commit | 939326688f766fd4a14af9df3beb613c302702a3 (patch) | |
tree | 1db54375dd08f9ac48d2b01e14bb5b323101e77e /third_party | |
parent | f093af6779204215d3eb99cc1c1fff5671798342 (diff) | |
download | chromium_src-939326688f766fd4a14af9df3beb613c302702a3.zip chromium_src-939326688f766fd4a14af9df3beb613c302702a3.tar.gz chromium_src-939326688f766fd4a14af9df3beb613c302702a3.tar.bz2 |
Change ffmpeg.gyp over to use generate_stubs.py.
Also reimplement media_posix.cc to call into the generated stub functions instead of having its own hacked together version.
Review URL: http://codereview.chromium.org/118046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17819 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/ffmpeg/avcodec-52.sigs | 18 | ||||
-rw-r--r-- | third_party/ffmpeg/avformat-52.sigs | 12 | ||||
-rw-r--r-- | third_party/ffmpeg/avutil-50.sigs | 10 | ||||
-rwxr-xr-x | third_party/ffmpeg/ffmpeg.gyp | 137 | ||||
-rw-r--r-- | third_party/ffmpeg/ffmpeg_stub_headers.fragment | 9 | ||||
-rwxr-xr-x | third_party/ffmpeg/generate_stubs.py | 8 |
6 files changed, 153 insertions, 41 deletions
diff --git a/third_party/ffmpeg/avcodec-52.sigs b/third_party/ffmpeg/avcodec-52.sigs new file mode 100644 index 0000000..27b8ef9 --- /dev/null +++ b/third_party/ffmpeg/avcodec-52.sigs @@ -0,0 +1,18 @@ +# 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 new file mode 100644 index 0000000..5f7b193 --- /dev/null +++ b/third_party/ffmpeg/avformat-52.sigs @@ -0,0 +1,12 @@ +# 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 new file mode 100644 index 0000000..d70bfac --- /dev/null +++ b/third_party/ffmpeg/avutil-50.sigs @@ -0,0 +1,10 @@ +# 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 5a3d706..ef5e5e4 100755 --- a/third_party/ffmpeg/ffmpeg.gyp +++ b/third_party/ffmpeg/ffmpeg.gyp @@ -15,8 +15,16 @@ }, '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', @@ -43,6 +51,8 @@ 'include/libavutil/sha1.h', 'include/win/inttypes.h', 'include/win/stdint.h', + '<@(sig_files)', + '<(extra_header)' ], 'direct_dependent_settings': { 'include_dirs': [ @@ -50,50 +60,99 @@ ], }, 'conditions': [ - ['OS=="win"', { - 'sources': [ - 'avcodec-52.def', - 'avformat-52.def', - 'avutil-50.def', - ], - 'direct_dependent_settings': { + ['OS=="win"', + { + 'variables': { + 'outfile_type': 'windows_lib', + 'output_dir': '<(SHARED_INTERMEDIATE_DIR)' + }, + 'type': 'none', + 'dependencies': [ + 'ffmpeg_binaries', + ], + 'sources!': [ + '<(extra_header)', + ], + 'direct_dependent_settings': { + '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.', + }, + ], + } + ], + ['OS=="linux"', + # TODO(ajwong): Mac distributed build fails because media will + # build before this action is taken. Enable this for mac when + # that is fixed. + { + 'variables': { + 'outfile_type': 'posix_stubs', + 'stubs_filename_root': 'ffmpeg_stubs', + 'project_path': 'third_party/ffmpeg', + 'output_root': '<(SHARED_INTERMEDIATE_DIR)/ffmpeg', + }, + 'type': '<(library)', 'include_dirs': [ - 'include/win', + 'include', + '<(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', + 'direct_dependent_settings': { + 'include_dirs': [ + '<(output_root)', + '../..', # The chromium 'src' directory. ], }, - }, - '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', + '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)', + ], + '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 new file mode 100644 index 0000000..99abcf7 --- /dev/null +++ b/third_party/ffmpeg/ffmpeg_stub_headers.fragment @@ -0,0 +1,9 @@ +// 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 1288697..1713d76 100755 --- a/third_party/ffmpeg/generate_stubs.py +++ b/third_party/ffmpeg/generate_stubs.py @@ -575,6 +575,7 @@ void %s(); // Umbrella initializer for all the modules in this stub file. bool InitializeStubs(const StubPathMap& path_map); + } // namespace %s #endif // %s @@ -588,15 +589,17 @@ 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' % namespace) + outfile.write('} // namespace %s\n\n' % namespace) def WriteFunctionPointers(self, outfile): """Write the function pointer declarations needed by the stubs. @@ -738,7 +741,7 @@ def main(): if options.out_dir is None: parser.error('Output location not specified') - if args: + if len(args) == 0: parser.error('No inputs specified') if options.type not in [FILE_TYPE_WIN, FILE_TYPE_POSIX_STUB]: @@ -788,6 +791,7 @@ 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) |