但是打补丁(补丁时间:2010-03-12)时却一直出错,捣鼓了一个早上,终于发现问题了。
首先我们观察该补丁文件dshowserver.patch:
代码: 全选
Index: libmpcodecs/vd.c
===================================================================
--- libmpcodecs/vd.c.orig 2010-03-12 07:47:10.000000000 -0800
+++ libmpcodecs/vd.c 2010-03-12 07:48:02.000000000 -0800
@@ -43,6 +43,7 @@
extern const vd_functions_t mpcodecs_vd_ffmpeg;
extern const vd_functions_t mpcodecs_vd_theora;
extern const vd_functions_t mpcodecs_vd_dshow;
+extern const vd_functions_t mpcodecs_vd_dshowserver
extern const vd_functions_t mpcodecs_vd_dmo;
extern const vd_functions_t mpcodecs_vd_vfw;
extern const vd_functions_t mpcodecs_vd_vfwex;
这个文件中的位置的。
那么只要mplayer的作者修改了vd.c和其它需要打补丁的文件(请具体观察patch文件修改了那些文件)时,该补丁也就会出错。
但这个补丁依然可以使用
当我们使用命令
代码: 全选
patch -p0 < "补丁文件"
代码: 全选
Hunk #1 succeeded at 40 (offset -3 lines).
Hunk #2 succeeded at 71 with fuzz 2 (offset -3 lines).
patching file Makefile
Hunk #1 succeeded at 20 with fuzz 2.
Hunk #2 FAILED at 530.
Hunk #3 FAILED at 909.
2 out of 3 hunks FAILED -- saving rejects to file Makefile.rej
patching file libmpcodecs/vd_dshowserver.c
patching file libmpcodecs/timeout_sem.c
patching file libmpcodecs/timeout_sem.h
Makefile打补丁,观察patch文件:
代码: 全选
Index: Makefile
===================================================================
--- Makefile.orig 2010-03-12 07:47:19.000000000 -0800
+++ Makefile 2010-03-12 07:48:02.000000000 -0800
@@ -20,6 +20,7 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
include config.mak
+EXTRALIBS += -lrt
.SUFFIXES:
@@ -529,6 +530,7 @@
stream/stream_mf.c \
stream/stream_null.c \
stream/url.c \
+ libmpcodecs/vd_dshowserver.c \
$(SRCS_COMMON-yes)
@@ -908,6 +910,7 @@
libdvdnav/%: CFLAGS := -Ilibdvdnav -D__USE_UNIX98 -D_GNU_SOURCE -DHAVE_CONFIG_H -DVERSION=\"MPlayer-custom\" $(CFLAGS)
libdvdread4/%: CFLAGS := -Ilibdvdread4 -D__USE_UNIX98 -D_GNU_SOURCE $(CFLAGS_LIBDVDCSS_DVDREAD) $(CFLAGS)
libfaad2/%: CFLAGS := -Ilibfaad2 -D_GNU_SOURCE -DHAVE_CONFIG_H $(CFLAGS_FAAD_FIXED) $(CFLAGS)
+libmpcodecs/%: CFLAGS := $(CFLAGS) -g -O0
loader/%: CFLAGS += -fno-omit-frame-pointer $(CFLAGS_NO_OMIT_LEAF_FRAME_POINTER)
#loader/%: CFLAGS += -Ddbg_printf=__vprintf -DTRACE=__vprintf -DDETAILED_OUT
我们只要找到:
stream/stream_mf.c \
stream/stream_null.c \
stream/url.c \
在“ stream/url.c \”这句代码的下一行添加“libmpcodecs/vd_dshowserver.c \”就行,以此类推。
修改完Makefile之后,如果还提示有其它错误的话,就自己手动修改,思路一样。
最后
代码: 全选
make
sudo make install
代码: 全选
mplayer -demuxer mkv -vc coreserve 你的视频文件