- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 avcodec 在 linux 上解码一些 hevc 剪辑,avcodec 库是从源包 ffmpeg-4.3.1 构建的,带有命令:
configure --prefix=/mnt/projects/ffmpeg-4.3.1/build --disable-static --enable-shared --disable-stripping && make
我的应用程序初始化编解码器和编解码器上下文,如下所示:
AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H265);
AVCodecContext* avContext = avcodec_alloc_context3(codec);
avcodec_open2(_private->_avContext, codec, NULL);
我的开发环境:
oap-dev@oap-dev:ffmpeg-4.3.1$ lsb_release -d
Description: Ubuntu 18.04.5 LTS
oap-dev@oap-dev:ffmpeg-4.3.1$ uname -a
Linux oap-dev 4.15.0-163-generic #171-Ubuntu SMP Fri Nov 5 11:55:11 UTC 2021 x86_64 x86_64
x86_64 GNU/Linux
从相同源代码构建的 ffplay 可以无错误地播放剪辑,但我的应用程序遇到了以下段错误:
#0 ff_hevc_sao_edge_filter_32_8_avx2 () at libavcodec/x86/hevc_sao.asm:337
337 HEVC_SAO_EDGE_FILTER 32, 1, a
[Current thread is 1 (Thread 0x7f26e2814700 (LWP 99189))]
(gdb) bt
#0 ff_hevc_sao_edge_filter_32_8_avx2 () at libavcodec/x86/hevc_sao.asm:337
#1 0x00007f26f9425853 in sao_filter_CTB (s=s@entry=0x7f26dc0069c0, x=x@entry=0, y=y@entry=0) at libavcodec/hevc_filter.c:436
#2 0x00007f26f9427e04 in ff_hevc_hls_filter (s=0x7f26dc0069c0, x=x@entry=64, y=y@entry=64, ctb_size=ctb_size@entry=64) at libavcodec/hevc_filter.c:861
#3 0x00007f26f9428fa5 in ff_hevc_hls_filters (s=s@entry=0x7f26dc0069c0, x_ctb=x_ctb@entry=128, y_ctb=y_ctb@entry=128, ctb_size=ctb_size@entry=64) at libavcodec/hevc_filter.c:883
#4 0x00007f26f94405ae in hls_decode_entry (avctxt=<optimized out>, isFilterThread=<optimized out>) at libavcodec/hevcdec.c:2462
#5 0x00007f26f970dbf5 in avcodec_default_execute (c=0x7f26dc006180, func=0x7f26f9440300 <hls_decode_entry>, arg=<optimized out>, ret=<optimized out>, count=<optimized out>, size=4) at libavcodec/utils.c:446
#6 0x00007f26f9444c18 in hls_slice_data (s=0x7f26dc0069c0) at libavcodec/hevcdec.c:2480
#7 decode_nal_unit (nal=<optimized out>, s=0x7f26dc0069c0) at libavcodec/hevcdec.c:3015
#8 decode_nal_units (length=<optimized out>, buf=<optimized out>, s=0x7f26dc0069c0) at libavcodec/hevcdec.c:3088
#9 hevc_decode_frame (avctx=<optimized out>, data=<optimized out>, got_output=<optimized out>, avpkt=<optimized out>) at libavcodec/hevcdec.c:3226
#10 0x00007f26f96148a3 in frame_worker_thread (arg=0x7f26dc005dc0) at libavcodec/pthread_frame.c:201
#11 0x00007f26fbbd26db in start_thread (arg=0x7f26e2814700) at pthread_create.c:463
#12 0x00007f26f7d5971f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
更多信息:
(gdb) bt
#0 0x00007f174d91ce3e in ff_hevc_add_residual_32_8_avx2 () from /mnt/projects/ffmpeg-4.3.1/build/lib/libavcodec.so.58
#1 0x00007f174d46c401 in hls_transform_tree (s=0x7f17300069c0, x0=0, y0=960, xBase=2880, yBase=0, cb_xBase=0, cb_yBase=240, log2_cb_size=914341248, log2_trafo_size=1340287338, trafo_depth=51, blk_idx=3, base_cbf_cb=0x5f15, base_cbf_cr=0x0) at libavcodec/hevcdec.c:1122
#2 0x00007f174d46f993 in hls_coding_quadtree (s=0x7f17300069c0, x0=805345792, y0=960, log2_cb_size=2880, cb_depth=8) at libavcodec/hevcdec.c:2246
#3 0x00007f174d46f578 in hls_coding_quadtree (s=0x7f17300069c0, x0=805345792, y0=960, log2_cb_size=2880, cb_depth=8) at libavcodec/hevcdec.c:2312
#4 0x00007f174d47157f in hls_decode_entry (avctxt=0x7f17481a0010, isFilterThread=0x7f1730009a00) at libavcodec/hevcdec.c:2453
#5 0x00007f174d73ebf5 in avcodec_default_execute (c=0x7f17481a0010, func=0x7f1730009a00, arg=0x3c0, ret=0xb40, count=8, size=0) at libavcodec/utils.c:446
#6 0x00007f174d475c18 in hevc_decode_frame (avctx=0x7f17481a0010, data=0x7f1730009a00, got_output=0x3c0, avpkt=0x7f1730009880) at libavcodec/hevcdec.c:2480
#7 0x00007f174d6458a3 in frame_worker_thread (arg=0x7f1730005dc0) at libavcodec/pthread_frame.c:201
#8 0x00007f174fc036db in start_thread (arg=0x7f17367fc700) at pthread_create.c:463
#9 0x00007f174bd8a71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) disas
Dump of assembler code for function ff_hevc_add_residual_32_8_avx2:
0x00007f174d91ce30 <+0>: vpxor %ymm0,%ymm0,%ymm0
0x00007f174d91ce34 <+4>: lea (%rdx,%rdx,2),%rcx
0x00007f174d91ce38 <+8>: mov $0x8,%r8d
=> 0x00007f174d91ce3e <+14>: vmovdqa (%rdi),%ymm1
0x00007f174d91ce42 <+18>: vmovdqa %ymm1,%ymm2
0x00007f174d91ce46 <+22>: vpunpcklbw %ymm0,%ymm1,%ymm1
0x00007f174d91ce4a <+26>: vpunpckhbw %ymm0,%ymm2,%ymm2
0x00007f174d91ce4e <+30>: vmovdqa (%rsi),%xmm5
0x00007f174d91ce52 <+34>: vmovdqa 0x10(%rsi),%xmm6
0x00007f174d91ce57 <+39>: vinserti128 $0x1,0x20(%rsi),%ymm5,%ymm5
0x00007f174d91ce5e <+46>: vinserti128 $0x1,0x30(%rsi),%ymm6,%ymm6
0x00007f174d91ce65 <+53>: vpaddsw %ymm5,%ymm1,%ymm1
0x00007f174d91ce69 <+57>: vpaddsw %ymm6,%ymm2,%ymm2
0x00007f174d91ce6d <+61>: vmovdqa (%rdi,%rdx,1),%ymm3
0x00007f174d91ce72 <+66>: vmovdqa %ymm3,%ymm4
0x00007f174d91ce76 <+70>: vpunpcklbw %ymm0,%ymm3,%ymm3
0x00007f174d91ce7a <+74>: vpunpckhbw %ymm0,%ymm4,%ymm4
0x00007f174d91ce7e <+78>: vmovdqa 0x40(%rsi),%xmm5
0x00007f174d91ce83 <+83>: vmovdqa 0x50(%rsi),%xmm6
0x00007f174d91ce88 <+88>: vinserti128 $0x1,0x60(%rsi),%ymm5,%ymm5
0x00007f174d91ce8f <+95>: vinserti128 $0x1,0x70(%rsi),%ymm6,%ymm6
0x00007f174d91ce96 <+102>: vpaddsw %ymm5,%ymm3,%ymm3
0x00007f174d91ce9a <+106>: vpaddsw %ymm6,%ymm4,%ymm4
0x00007f174d91ce9e <+110>: vpackuswb %ymm2,%ymm1,%ymm1
0x00007f174d91cea2 <+114>: vpackuswb %ymm4,%ymm3,%ymm3
0x00007f174d91cea6 <+118>: vmovdqa %ymm1,(%rdi)
0x00007f174d91ceaa <+122>: vmovdqa %ymm3,(%rdi,%rdx,1)
0x00007f174d91ceaf <+127>: vmovdqa (%rdi,%rdx,2),%ymm1
0x00007f174d91ceb4 <+132>: vmovdqa %ymm1,%ymm2
0x00007f174d91ceb8 <+136>: vpunpcklbw %ymm0,%ymm1,%ymm1
0x00007f174d91cebc <+140>: vpunpckhbw %ymm0,%ymm2,%ymm2
0x00007f174d91cec0 <+144>: vmovdqa 0x80(%rsi),%xmm5
0x00007f174d91cec8 <+152>: vmovdqa 0x90(%rsi),%xmm6
0x00007f174d91ced0 <+160>: vinserti128 $0x1,0xa0(%rsi),%ymm5,%ymm5
0x00007f174d91ceda <+170>: vinserti128 $0x1,0xb0(%rsi),%ymm6,%ymm6
0x00007f174d91cee4 <+180>: vpaddsw %ymm5,%ymm1,%ymm1
0x00007f174d91cee8 <+184>: vpaddsw %ymm6,%ymm2,%ymm2
0x00007f174d91ceec <+188>: vmovdqa (%rdi,%rcx,1),%ymm3
0x00007f174d91cef1 <+193>: vmovdqa %ymm3,%ymm4
0x00007f174d91cef5 <+197>: vpunpcklbw %ymm0,%ymm3,%ymm3
0x00007f174d91cef9 <+201>: vpunpckhbw %ymm0,%ymm4,%ymm4
---Type <return> to continue, or q <return> to quit---
0x00007f174d91cefd <+205>: vmovdqa 0xc0(%rsi),%xmm5
0x00007f174d91cf05 <+213>: vmovdqa 0xd0(%rsi),%xmm6
0x00007f174d91cf0d <+221>: vinserti128 $0x1,0xe0(%rsi),%ymm5,%ymm5
0x00007f174d91cf17 <+231>: vinserti128 $0x1,0xf0(%rsi),%ymm6,%ymm6
0x00007f174d91cf21 <+241>: vpaddsw %ymm5,%ymm3,%ymm3
0x00007f174d91cf25 <+245>: vpaddsw %ymm6,%ymm4,%ymm4
0x00007f174d91cf29 <+249>: vpackuswb %ymm2,%ymm1,%ymm1
0x00007f174d91cf2d <+253>: vpackuswb %ymm4,%ymm3,%ymm3
0x00007f174d91cf31 <+257>: vmovdqa %ymm1,(%rdi,%rdx,2)
0x00007f174d91cf36 <+262>: vmovdqa %ymm3,(%rdi,%rcx,1)
0x00007f174d91cf3b <+267>: add $0x100,%rsi
0x00007f174d91cf42 <+274>: lea (%rdi,%rdx,4),%rdi
0x00007f174d91cf46 <+278>: dec %r8d
0x00007f174d91cf49 <+281>: jg 0x7f174d91ce3e <ff_hevc_add_residual_32_8_avx2+14>
0x00007f174d91cf4f <+287>: vzeroupper
0x00007f174d91cf52 <+290>: retq
End of assembler dump.
(gdb) info reg
rax 0x7f174d91ce30 139738062376496
rbx 0x7f17300069c0 139737566308800
rcx 0xb40 2880
rdx 0x3c0 960
rsi 0x7f1730009a00 139737566321152
rdi 0x7f17481a0010 139737970638864
rbp 0x7f1730009880 0x7f1730009880
rsp 0x7f17367fb9b8 0x7f17367fb9b8
r8 0x8 8
r9 0x0 0
r10 0xa 10
r11 0xa 10
r12 0x0 0
r13 0x2 2
r14 0x0 0
r15 0x0 0
rip 0x7f174d91ce3e 0x7f174d91ce3e <ff_hevc_add_residual_32_8_avx2+14>
eflags 0x10206 [ PF IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
最佳答案
我做如下解码:
while (!exit) {
avcodec_send_packet(AVCodecConext * ctx, AVPacket* pkt);
// check return value ...
avcodec_receive_frame(AVCodecConext * ctx, AVFrame* frame);
//check return value ...
}
在解码之前,AVCodecContext的公共(public)成员get_buffer2,它是一个回调函数,会在调用avcodec_receive_frame()时被调用。我将以下函数分配给 get_buffer2:
int get_frame_buffer(struct AVCodecContext *c, AVFrame *frame, int flags) {
frame->data[0] = posix_memalign(32, frmaeSize); // previously, I used operator new,which will trigger coredump when decoding HEVC
// ...
}
关于ffmpeg avcodec lib 在 ff_hevc_sao_edge_filter_32_8_avx2() 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71153141/
我一直在尝试从格式 SubRip 转码字幕(.srt) 到 MPEG4 Timed Text将它们混合到一个 MP4 容器中,其中已经有音频和视频。使用 ffmpeg 从命令行执行此操作微不足道: f
我正在尝试在 FFMPEG 库中构建示例代码 我在我的项目中添加 libavcode.h , libavcode.a 并将标题搜索 usr/local/include 和库搜索设置为 usr/loca
我需要知道如何使用 avcodec/avformat 查找视频文件中的总帧数。 我有一个项目,我从使用 ffmpeg 库解码视频流的其他人那里获得。我需要改进一些功能来逐帧搜索,所以我的第一个任务是简
我正在尝试使用 libav 将 MP4 文件转换为 MP3 文件。基本上想达到什么ffmpeg -i filename.mp4 filename.mp3做。我找到了 this官方例子。但是当我使用输入
我一直在到处寻找一个选项来强制 avcodec 为其 AVFrame 数据使用未对齐的内存。 根据像素格式,AVFrame->data 的水平面可能会填充额外的数据以与内存对齐以提高性能。 例如:每个
我在解码 HEVC 时遇到问题使用 avcodec 编码的视频。 修改源代码的一行允许解码mpeg1这不是我需要的。 谢谢 #include #include #include #include
我从这个站点下载了控制 AR Drone 的项目: https://github.com/Ruslan-B/AR.Drone 这个项目很旧。然后我从这个站点下载了 ffmpeg.autogen 库 h
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我将视频数据包从视频流写入缓冲区。然后我尝试将它们写入文件。 av_init_packet( &pkt ); int bufer_size=250;
我正在使用 avcodec 在 linux 上解码一些 hevc 剪辑,avcodec 库是从源包 ffmpeg-4.3.1 构建的,带有命令: configure --prefix=/mnt/pro
我正在使用带有 avcodec 的 OPUS 对声音进行编码并使用我自己的协议(protocol)对其进行流式传输。 到目前为止,它适用于 MP2 编解码器,但是当我切换到 OPUS 时,我遇到了这个
我注意到对于某些视频文件,AVPacket 结构中返回的 PTS 时间戳不是从 0 开始,而是在一段时间后。例如。在 3.128 左右。我测试的 99% 的视频文件都有从 0 开始的 PTS 时间戳,
我正在使用 AVCodec 作为视频流解码器,想知道是否可以通过 FFMPEG 将硬件加速与 hwaccel 一起使用?还是已经默认使用了?我已经列出了可用的编解码器,但我不明白如何在我的代码中实现它
今天在CodeBlocks中运行ffmpeg示例c程序,报错: invalid conversion from int to avcodecid[-fpermissive] 我把部分代码放在这里: s
我正在尝试编写一个应用程序来获取输入视频并将其裁剪为方形视频并忽略音频流。因为如果使用命令性能不佳,我正在尝试使用 libavcodec 和 libavformat 来完成它。但是输出不能被任何视频播
我正在尝试使用 gcc 执行 tutorial01.c,我在同一个文件夹中有 gcc 和 tutorial01.c 以及 libavcodec 和 libavformat 及其相关文件,它给了我这个错
我已经安装了ffmpeg-devel使用 dnf,但包含 "libavcodec/avcodec.h" , g++ 告诉我 a.cpp:1:10: fatal error: libavcodec/av
我正在使用这个项目https://github.com/apc-llc/moviemaker-cpp 我想知道如何在我的视频上设置固定帧率 现在,当我输入 30FPS 作为 c->framerate
我正在使用 C/C++ 中的 FFMpeg 库开发媒体播放器。 This source使用以下代码查找文件中视频流的解码器: pCodec=avcodec_find_decoder(pCodecCtx
我尝试在我的ubuntu1604平台上调试ffmpeg,但它总是说找不到头文件,但实际上我确实在编译代码中包含了头文件。 错误信息如下: error message 这是我的测试代码: #inclu
我是一名优秀的程序员,十分优秀!