Libmpeg2 解码错误

问题描述 投票:0回答:1

当我尝试使用 libmpeg2 解码视频时,出现错误 31c 和 301,我在代码中找不到它们,并且输出视频已损坏。

我已经从 https://android.googlesource.com/platform/external/libmpeg2/ 下载了 libmpeg2。要在 x86 上重现此内容,请创建一个构建目录并运行 cmake.. 和 make。对于我下载的测试视频https://filesamples.com/samples/video/mpeg/sample_1280x720.mpeg对于我使用的配置文件:

--input sample.mpeg
--output out.yuv
--save_output 1
--num_frames -1
--chroma_format YUV_420P
--share_display_buf 0
--max_wd 1280
--max_ht 720
--num_cores 1
--loopback 0
--display 0
--fps 30
--arch X86_GENERIC
--soc GENERIC

当我运行

./mpeg2dec x86_test.cfg
时,我得到以下输出:

FrameNum:    1 TimeTaken(microsec):    400 AvgTime:    400 PeakAvgTimeMax:     50 Output:  0 NumBytes:   1993 
FrameNum:    2 TimeTaken(microsec):   1942 AvgTime:   1171 PeakAvgTimeMax:    292 Output:  0 NumBytes: 143360 
FrameNum:    3 TimeTaken(microsec):   3644 AvgTime:   1995 PeakAvgTimeMax:    748 Output:  1 NumBytes: 278528 
FrameNum:    4 TimeTaken(microsec):   2374 AvgTime:   2090 PeakAvgTimeMax:   1045 Output:  1 NumBytes: 147456 
FrameNum:    5 TimeTaken(microsec):   3193 AvgTime:   2310 PeakAvgTimeMax:   1444 Output:  1 NumBytes:  77824 
FrameNum:    6 TimeTaken(microsec):   1274 AvgTime:   2137 PeakAvgTimeMax:   1603 Output:  1 NumBytes:  36864 
FrameNum:    7 TimeTaken(microsec):    788 AvgTime:   1945 PeakAvgTimeMax:   1701 Output:  0 NumBytes:  12291 
Error in video Frame decode : ret 1 Error 301
FrameNum:    8 TimeTaken(microsec):    996 AvgTime:   1826 PeakAvgTimeMax:   1826 Output:  1 NumBytes:  18429 
FrameNum:    9 TimeTaken(microsec):   3218 AvgTime:   1981 PeakAvgTimeMax:   2178 Output:  1 NumBytes:  14336 
FrameNum:   10 TimeTaken(microsec):   1688 AvgTime:   1951 PeakAvgTimeMax:   2178 Output:  1 NumBytes:   4096 
FrameNum:   11 TimeTaken(microsec):   1436 AvgTime:   1904 PeakAvgTimeMax:   2178 Output:  1 NumBytes:   6144

***

FrameNum:  367 TimeTaken(microsec):   1570 AvgTime:   1549 PeakAvgTimeMax:   2218 Output:  1 NumBytes:   6132 
FrameNum:  368 TimeTaken(microsec):   1666 AvgTime:   1549 PeakAvgTimeMax:   2218 Output:  1 NumBytes:   6144 
FrameNum:  369 TimeTaken(microsec):   1091 AvgTime:   1548 PeakAvgTimeMax:   2218 Output:  1 NumBytes:   4096 
FrameNum:  370 TimeTaken(microsec):    784 AvgTime:   1546 PeakAvgTimeMax:   2218 Output:  0 NumBytes:  11212 
Error in video Frame decode : ret 1 Error 31c
FrameNum:  371 TimeTaken(microsec):   1127 AvgTime:   1545 PeakAvgTimeMax:   2218 Output:  1 NumBytes:   1076 
FrameNum:  372 TimeTaken(microsec):    634 AvgTime:   1542 PeakAvgTimeMax:   2218 Output:  1 NumBytes:   6144 
FrameNum:  373 TimeTaken(microsec):   1046 AvgTime:   1541 PeakAvgTimeMax:   2218 Output:  1 NumBytes:   4096 
FrameNum:  374 TimeTaken(microsec):   2412 AvgTime:   1543 PeakAvgTimeMax:   2218 Output:  1 NumBytes:  43008 

***

Summary
Input filename                  : sample.mpeg
Output Width                    : 1280
Output Height                   : 720 
Bitrate @ 30 fps(mbps)          : 2.12  
Average decode time(micro sec)  : 1497  
Avg Peak decode time( 8 frames) : 5334  
FPS achieved (with format conv) : 667.96

所以我得到了这两个在代码中找不到的错误,解码的视频已损坏并且摘要数字不正确。我使用

ffplay -video_size 1280x720 -pixel_format yuv420p -f rawvideo out.yuv
.

播放 .yuv 文件
c debugging video-processing
1个回答
0
投票

错误代码以十六进制打印,错误代码0x301和0x31c是“decoder/impeg2d.h”中定义的枚举常量

IMPEG2D_UNKNOWN_ERROR
IMPEG2D_INVALID_PIC_TYPE
的值:

typedef enum
{

    IMPEG2D_UNKNOWN_ERROR = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,

更多常数如下……
这是枚举中的第 28 个常量:

    IMPEG2D_INVALID_PIC_TYPE,

更多常数如下……


} IMPEG2D_ERROR_CODES_T;

IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS
是“decoder/ivd.h”中定义的枚举常量:

    IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS      = 0x300,

所以:

  • IMPEG2D_UNKNOWN_ERROR
    = 0x301
  • IMPEG2D_INVALID_PIC_TYPE
    = 0x31c
© www.soinside.com 2019 - 2024. All rights reserved.