我正在尝试将修补程序应用于ffmpeg来修复open avfoundation audio capture bug。从该问题链接的patch被认为可以解决问题,但它已经有两年了,并且不能完全适用于当前的git代码。 (错误消息是:
$ git apply -v ~/Downloads/avf.patch
Checking patch libavdevice/avfoundation.m...
error: while searching for:
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.1, YES);
}
lock_frames(ctx);
ctx->video_stream_index = stream->index;
avpriv_set_pts_info(stream, 64, 1, avf_time_base);
image_buffer = CMSampleBufferGetImageBuffer(ctx->current_frame);
image_buffer_size = CVImageBufferGetEncodedSize(image_buffer);
stream->codec->codec_id = AV_CODEC_ID_RAWVIDEO;
error: patch failed: libavdevice/avfoundation.m:551
error: libavdevice/avfoundation.m: patch does not apply
)虽然这与这个问题没有关系,这与git有关。
补丁以以下行开头:
libavdevice/avfoundation.m | 154 ++++++++++++++++++++++++++-------------------
1 file changed, 91 insertions(+), 63 deletions(-)
diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m
index 763e675..1ed9cef 100644
--- a/libavdevice/avfoundation.m
+++ b/libavdevice/avfoundation.m
以行
结束 return 0;
--
2.5.0
所以我猜这个补丁适用于2.5.0版本,提交ID从763e675开始
如何检查正确的提交以便我可以应用补丁? git log | grep 763e675
不会产生任何匹配。 $ git checkout 763e675
给出了错误
fatal: reference is not a tree: 763e675
。
答案 0 :(得分:3)
“index”行实际上给出了文件的哈希,而不是提交。 (2.5.0只是git的版本号。)你可以尝试做类似
的事情for t in $(git rev-list HEAD libavdevice/avfoundation.m); do
echo -n "$t: "
git rev-parse $t:libavdevice/avfoundation.m
done | grep 763e675
查找当前分支上的提交(或代替HEAD
的任何内容),其中该文件处于补丁的“之前”状态。
当然,如果您尝试将更改带回分支提示(通过合并或其他方式),您将不得不解决合并冲突,在这种情况下使用{{1}几乎相同首先。
答案 1 :(得分:0)
763e675..1ed9cef
是用于生成补丁的 blobs 的哈希值。
键入git show 763e675
以检查本地存储库中是否存在此特定版本的文件。
如果您拥有该文件的特定版本,请使用Davis Herring's answer查找包含此版本文件的提交。