Index: media/base/media_posix.cc |
diff --git a/media/base/media_posix.cc b/media/base/media_posix.cc |
index 57e1b77a6cf232b0e78710b8d70dfcf36e15f84b..cd6bbe34d85bb1ef562ddc0152b741ee86123fca 100644 |
--- a/media/base/media_posix.cc |
+++ b/media/base/media_posix.cc |
@@ -13,28 +13,56 @@ |
#include "base/path_service.h" |
#include "media/filters/ffmpeg_common.h" |
-// We create stub references to dynamically loaded functions in ffmpeg |
+// 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 |
+// 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" { |
-int (*av_get_bits_per_sample_format_ptr)(enum SampleFormat sample_fmt); |
+// 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); |
} |
-int (*av_new_packet_ptr)(AVPacket* pkt, int size); |
+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); |
} |
-void (*avcodec_init_ptr)(void) = NULL; |
-void avcodec_init(void) { |
- avcodec_init_ptr(); |
+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; |
@@ -42,9 +70,9 @@ AVCodec* avcodec_find_decoder(enum CodecID id) { |
return avcodec_find_decoder_ptr(id); |
} |
-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); |
+void (*avcodec_init_ptr)(void) = NULL; |
+void avcodec_init(void) { |
+ avcodec_init_ptr(); |
} |
int (*avcodec_open_ptr)(AVCodecContext* avctx, AVCodec* codec) = NULL; |
@@ -52,37 +80,16 @@ int avcodec_open(AVCodecContext* avctx, AVCodec* codec) { |
return avcodec_open_ptr(avctx, codec); |
} |
-AVFrame* (*avcodec_alloc_frame_ptr)(void) = NULL; |
-AVFrame* avcodec_alloc_frame(void) { |
- return avcodec_alloc_frame_ptr(); |
-} |
- |
-int (*avcodec_decode_audio2_ptr)(AVCodecContext* avctx, int16_t* samples, |
- int* frame_size_ptr, const uint8_t* buf, |
- int buf_size) = NULL; |
-int avcodec_decode_audio2(AVCodecContext* avctx, int16_t* samples, |
- int* frame_size_ptr, |
- const uint8_t* buf, int buf_size) { |
- |
- return avcodec_decode_audio2_ptr(avctx, samples, frame_size_ptr, buf, |
- buf_size); |
-} |
- |
- |
-int (*avcodec_decode_video_ptr)(AVCodecContext* avctx, AVFrame* picture, |
- int* got_picture_ptr, const uint8_t* buf, |
- int buf_size) = NULL; |
-int avcodec_decode_video(AVCodecContext* avctx, AVFrame* picture, |
- int* got_picture_ptr, const uint8_t* buf, |
- int buf_size) { |
- return avcodec_decode_video_ptr(avctx, picture, got_picture_ptr, buf, |
- buf_size); |
+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); |
} |
-void (*av_register_all_ptr)(void); |
-void av_register_all(void) { |
- av_register_all_ptr(); |
+// 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, |
@@ -94,21 +101,14 @@ int av_open_input_file(AVFormatContext** ic_ptr, const char* filename, |
return av_open_input_file_ptr(ic_ptr, filename, fmt, buf_size, ap); |
} |
-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_read_frame_ptr)(AVFormatContext* s, AVPacket* pkt) = NULL; |
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); |
+void (*av_register_all_ptr)(void) = NULL; |
+void av_register_all(void) { |
+ av_register_all_ptr(); |
} |
int (*av_register_protocol_ptr)(URLProtocol* protocol) = NULL; |
@@ -116,17 +116,25 @@ 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); |
+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); |
@@ -196,87 +204,97 @@ 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. |
+ |
+ // 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_init_ptr = |
- reinterpret_cast<void(*)(void)>( |
- dlsym(libs[FILE_LIBAVCODEC], "avcodec_init")); |
+ 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_thread_init_ptr = |
- reinterpret_cast<int (*)(AVCodecContext*, int)>( |
- dlsym(libs[FILE_LIBAVCODEC], "avcodec_thread_init")); |
+ 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_alloc_frame_ptr = |
- reinterpret_cast<AVFrame* (*)(void)>( |
- dlsym(libs[FILE_LIBAVCODEC], "avcodec_alloc_frame")); |
- avcodec_decode_audio2_ptr = |
- reinterpret_cast<int (*)(AVCodecContext*, int16_t*, int*, |
- const uint8_t*, int)>( |
- dlsym(libs[FILE_LIBAVCODEC], "avcodec_decode_audio2")); |
- avcodec_decode_video_ptr = |
- reinterpret_cast<int (*)(AVCodecContext*, AVFrame*, int*, |
- const uint8_t*, int)>( |
- dlsym(libs[FILE_LIBAVCODEC], "avcodec_decode_video")); |
+ avcodec_thread_init_ptr = |
+ reinterpret_cast<int (*)(AVCodecContext*, int)>( |
+ dlsym(libs[FILE_LIBAVCODEC], "avcodec_thread_init")); |
- av_register_all_ptr = |
- reinterpret_cast<void(*)(void)>( |
- dlsym(libs[FILE_LIBAVFORMAT], "av_register_all")); |
+ // 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_find_stream_info_ptr = |
- reinterpret_cast<int (*)(AVFormatContext*)>( |
- dlsym(libs[FILE_LIBAVFORMAT], "av_find_stream_info")); |
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_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")); |
- av_malloc_ptr = |
- reinterpret_cast<void* (*)(unsigned int)>( |
- dlsym(libs[FILE_LIBAVUTIL], "av_malloc")); |
+ // 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_get_bits_per_sample_format_ptr && |
+ if (av_free_packet_ptr && |
+ av_get_bits_per_sample_format_ptr && |
+ av_init_packet_ptr && |
av_new_packet_ptr && |
- avcodec_init_ptr && |
+ avcodec_alloc_frame_ptr && |
+ avcodec_decode_audio3_ptr && |
+ avcodec_decode_video2_ptr && |
avcodec_find_decoder_ptr && |
- avcodec_thread_init_ptr && |
+ avcodec_init_ptr && |
avcodec_open_ptr && |
- avcodec_alloc_frame_ptr && |
- avcodec_decode_audio2_ptr && |
- avcodec_decode_video_ptr && |
+ avcodec_thread_init_ptr && |
- av_register_all_ptr && |
- av_open_input_file_ptr && |
av_find_stream_info_ptr && |
+ av_open_input_file_ptr && |
av_read_frame_ptr && |
- av_seek_frame_ptr && |
+ av_register_all_ptr && |
av_register_protocol_ptr && |
+ av_seek_frame_ptr && |
- av_malloc_ptr && |
av_free_ptr && |
+ av_malloc_ptr && |
av_rescale_q_ptr) { |
return true; |
} |