Giter Site home page Giter Site logo

ffvvc / ffmpeg Goto Github PK

View Code? Open in Web Editor NEW
50.0 50.0 12.0 173.74 MB

VVC Decoder for ffmpeg

License: Other

Makefile 1.29% C 90.57% C++ 0.17% Perl 0.04% Shell 0.08% Assembly 7.55% Verilog 0.01% Objective-C 0.15% Cuda 0.12% Metal 0.01% Roff 0.01% Awk 0.01% HTML 0.01% Ruby 0.01% Python 0.01%
ffmpeg vvc

ffmpeg's People

Contributors

aconverse avatar aurelj avatar bcoudurier avatar btbn avatar cehoyos avatar cus avatar cyanreg avatar dondiego avatar dwbuiten avatar elenril avatar fhvwy avatar jamrial avatar justinruggles avatar kodawah avatar lance-lmwang avatar lu-zero avatar mansr avatar michaelni avatar mkver avatar mstorsjo avatar mypopydev avatar nevcairiel avatar ramiropolla avatar rbultje avatar rdoeffinger avatar richardpl avatar rouseabout avatar saste avatar ubitux avatar yuvi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ffmpeg's Issues

SPS Range Extension Support

When using bit depths higher than 10-bit, the sps_range_extension may be include in the SPS. This adds five new flags, primarily to increase the dynamic range. It is possible to use higher bit depths without the range extension, however their benefit will be reduced.

Check ARM peformance

Please help run performance tests for the following clips on ARM chip
comand line: ./ffmpeg -i xxx.266 -vsync 0 -f rawvideo /dev/null -y

and fill following table:

clips FPS(3 times average)
RitualDance_1920x1080_60_10_420_32_LD.26
RitualDance_1920x1080_60_10_420_37_RA.266
Tango2_3840x2160_60_10_420_27_LD.266

top 10 functions for Tango2_3840x2160_60_10_420_27_LD.266

functions percent
xxx xx%

Thanks

Add AVX2 assembly code for inter predict

please add AVX for VVCInterDSPContext

function 8 bits 10 bits 12 bits
put
put_uni
put_uni_w
avg
avg_w
put_ciip
put_gpm
fetch_samples
bdof_fetch_samples
prof_grad_filter
apply_prof
apply_prof_uni
apply_prof_uni_w
apply_prof_bi
apply_prof_bi_w
apply_bdof
sad
dmvr

please add functions based on usage
11.96% ffmpeg_g [.] put_vvc_luma_hv_10
5.88% ffmpeg_g [.] alf_get_coeff_and_clip_10
5.25% ffmpeg_g [.] ff_vvc_inv_dct2_64
4.30% [kernel] [k] __lock_text_start
4.22% ffmpeg_g [.] ff_vvc_alf_filter_luma_w16_16bpc_avx2
3.46% ffmpeg_g [.] put_vvc_luma_bi_hv_10
3.45% ffmpeg_g [.] alf_filter_luma_vb_10
3.13% ffmpeg_g [.] vvc_loop_filter_luma_10
2.81% ffmpeg_g [.] lmcs_filter_luma_10
2.46% ffmpeg_g [.] put_vvc_luma_uni_hv_10
2.27% ffmpeg_g [.] put_vvc_chroma_hv_10
2.21% libc-2.31.so [.] 0x000000000018b733
2.05% libc-2.31.so [.] 0x000000000018bb41
1.95% ffmpeg_g [.] put_vvc_chroma_uni_hv_10
1.84% ffmpeg_g [.] put_vvc_chroma_bi_hv_10
1.81% ffmpeg_g [.] vvc_deblock_bs
1.41% ffmpeg_g [.] ff_vvc_predict_inter
1.25% libpthread-2.31.so [.] __pthread_mutex_lock
1.24% libpthread-2.31.so [.] __pthread_mutex_unlock
1.22% ffmpeg_g [.] ff_vvc_residual_coding
1.08% ffmpeg_g [.] alf_filter_cc_10
1.03% ffmpeg_g [.] apply_prof_uni_10
0.99% ffmpeg_g [.] ff_vvc_alf_filter
0.98% ffmpeg_g [.] ff_vvc_inv_dct2_32
0.94% ffmpeg_g [.] vvc_deblock_bs_luma_vertical
0.92% ffmpeg_g [.] add_residual_10

Add AVX2 assembly code for LMCS filter

based on this LMCS consume about 2.81% time for Tango2_3840x2160_60_10_420_27_LD.266, maybe we can use VPGATHERDD to optimize it.

11.96% ffmpeg_g [.] put_vvc_luma_hv_10
5.88% ffmpeg_g [.] alf_get_coeff_and_clip_10
5.25% ffmpeg_g [.] ff_vvc_inv_dct2_64
4.30% [kernel] [k] __lock_text_start
4.22% ffmpeg_g [.] ff_vvc_alf_filter_luma_w16_16bpc_avx2
3.46% ffmpeg_g [.] put_vvc_luma_bi_hv_10
3.45% ffmpeg_g [.] alf_filter_luma_vb_10
3.13% ffmpeg_g [.] vvc_loop_filter_luma_10
2.81% ffmpeg_g [.] lmcs_filter_luma_10
2.46% ffmpeg_g [.] put_vvc_luma_uni_hv_10
2.27% ffmpeg_g [.] put_vvc_chroma_hv_10
2.21% libc-2.31.so [.] 0x000000000018b733
2.05% libc-2.31.so [.] 0x000000000018bb41
1.95% ffmpeg_g [.] put_vvc_chroma_uni_hv_10
1.84% ffmpeg_g [.] put_vvc_chroma_bi_hv_10
1.81% ffmpeg_g [.] vvc_deblock_bs
1.41% ffmpeg_g [.] ff_vvc_predict_inter
1.25% libpthread-2.31.so [.] __pthread_mutex_lock
1.24% libpthread-2.31.so [.] __pthread_mutex_unlock
1.22% ffmpeg_g [.] ff_vvc_residual_coding
1.08% ffmpeg_g [.] alf_filter_cc_10
1.03% ffmpeg_g [.] apply_prof_uni_10
0.99% ffmpeg_g [.] ff_vvc_alf_filter
0.98% ffmpeg_g [.] ff_vvc_inv_dct2_32
0.94% ffmpeg_g [.] vvc_deblock_bs_luma_vertical
0.92% ffmpeg_g [.] add_residual_10

valgrind issue for SAO filter.

run "valgrind ./ffmpeg_g -i SLICES_A_HUAWEI_3.bit -f rawvideo /dev/null -y"

you will get

==5154== Use of uninitialised value of size 8
==5154== at 0x46E433: sao_edge_filter_10 (vvcdsp_template.c:200)
==5154== by 0x50ACE9: ff_vvc_sao_filter (vvc_filter.c:309)
==5154== by 0x52C1DB: run_sao (vvc_thread.c:447)
==5154== by 0x52B462: ff_vvc_task_run (vvc_thread.c:567)
==5154== by 0x500AE9: executor_worker_task (executor.c:79)
==5154== by 0x49C8608: start_thread (pthread_create.c:477)
==5154== by 0x4B02132: clone (clone.S:95)

It's realted to sao temporary buffer lc->sao_buffer, once you memset the buffer here , valgrind will not report any issue.

Windows multithreading test failure

Had some time so did a little bit more research on the Windows CI (#52) test failure.

memsetting the entire lc->sao_buffer like bab47ca does not fix the issue, so I don't think the issue is related to #26. With this change, valgrind and clang's address sanitiser don't report any memory issues.

I have compiled FFmpeg directly with MSVC/MSYS2 (i.e. not via FFVS-Project-Generator) and the problem is similar so I don't think it's anything to do with the build files. I haven't yet got the gcc/MSYS2 toolchain or MinGW gcc cross-compilation working unfortunately.

I can't get the LTRP_A_ERICSSON_3 failure to reproduce on my machine, so I don't think there's anything special about this test. The tests which fail most frequently on my machine are:

  • LMCS_A_Dolby_3.bit
  • WPP_B_Sharp_2.bit

The failures only occur when running tests concurrently, they do not occur when running the tests individually or when running tests using a single thread. I don't know whether this points towards libavcodec/vvc_thread.c at all? This line is part of what is preventing cross-compilation at the moment. Should it not be testing for compiler using _MSC_VER or something instead of checking the OS? See #57 for fix. Don't believe this is related.

Refact Executor to reduce shedule cost

The current executor will use a single queue for not-ready and ready tasks.
So, every task posted to the queue may wake all threads.
Better split it into two queues: 1 for not ready tasks. 1 for ready tasks. it is protected by different locks
The thread adds a task to the executor who will also check readiness for all tasks in the not-ready queue.
once it is ready it will add to the ready queue.

the target is reduce the lock an unlock usage in perf top result
11.96% ffmpeg_g [.] put_vvc_luma_hv_10
5.88% ffmpeg_g [.] alf_get_coeff_and_clip_10
5.25% ffmpeg_g [.] ff_vvc_inv_dct2_64
4.30% [kernel] [k] __lock_text_start
4.22% ffmpeg_g [.] ff_vvc_alf_filter_luma_w16_16bpc_avx2
3.46% ffmpeg_g [.] put_vvc_luma_bi_hv_10
3.45% ffmpeg_g [.] alf_filter_luma_vb_10
3.13% ffmpeg_g [.] vvc_loop_filter_luma_10
2.81% ffmpeg_g [.] lmcs_filter_luma_10
2.46% ffmpeg_g [.] put_vvc_luma_uni_hv_10
2.27% ffmpeg_g [.] put_vvc_chroma_hv_10
2.21% libc-2.31.so [.] 0x000000000018b733
2.05% libc-2.31.so [.] 0x000000000018bb41
1.95% ffmpeg_g [.] put_vvc_chroma_uni_hv_10
1.84% ffmpeg_g [.] put_vvc_chroma_bi_hv_10
1.81% ffmpeg_g [.] vvc_deblock_bs
1.41% ffmpeg_g [.] ff_vvc_predict_inter
1.25% libpthread-2.31.so [.] __pthread_mutex_lock
1.24% libpthread-2.31.so [.] __pthread_mutex_unlock

1.22% ffmpeg_g [.] ff_vvc_residual_coding
1.08% ffmpeg_g [.] alf_filter_cc_10
1.03% ffmpeg_g [.] apply_prof_uni_10
0.99% ffmpeg_g [.] ff_vvc_alf_filter
0.98% ffmpeg_g [.] ff_vvc_inv_dct2_32
0.94% ffmpeg_g [.] vvc_deblock_bs_luma_vertical
0.92% ffmpeg_g [.] add_residual_10

see https://github.com/ffvvc/FFmpeg/wiki/Introduction-to-the-code-structures#executorc for ref.

4:4:4 inter- failure

Conformance tests utilising 4:4:4 colour and inter-prediction are currently failing.

Test vvc 10bit yuv420p10le(tv) / yuv444p10le(tv) JVETVVC

FFmpeg/FFmpeg@567e78b
b146efb
dabc1e6

[vvc @ 0000010ed137d040] Skipping NAL unit 12 0KB sq=    0B f=0/0
[vvc @ 0000010ed137d040] Skipping NAL unit 13
[vvc @ 0000010ed137d040] Skipping NAL unit 24 0KB sq=    0B f=0/0
[vvc @ 0000010ed1374250] Intra Block Copy is not implemented. Update your FFmpeg version to the newest one from Git. 
If the problem still occurs, it means that your file has a feature which has not been implemented.
[vvc @ 0000010ed137d040] Skipping NAL unit 24
    Last message repeated 3 times
[vvc @ 0000010ed1374610] Intra Block Copy is not implemented. Update your FFmpeg version to the newest one from Git. 
If the problem still occurs, it means that your file has a feature which has not been implemented.
[vvc @ 0000010ed137d040] Skipping NAL unit 24
[vvc @ 0000010ed137d040] Skipping NAL unit 24 0KB sq=    0B f=0/0
    Last message repeated 3 times
Input #0, vvc, from 'carvideo_yuv422p10le.vvc':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: vvc (Main 10 4:4:4), yuv422p10le(tv), 640x360, 25 fps, 1200k tbr, 1200k tbn

https://i.ibb.co/H7rPrVt/uiecfbv.png

  Stream #0:0: Video: vvc (Main 10 4:4:4), none(tv), 640x360, 25 fps, 1200k tbr, 1200k tbn
[vvc @ 00000179d5c3fbf0] Skipping NAL unit 12
[vvc @ 00000179d5c3fbf0] Skipping NAL unit 13
[vvc @ 00000179d5c3fbf0] Skipping NAL unit 24
[vvc @ 00000179ce69d330] Palette is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[vvc @ 00000179d5c3fbf0] Skipping NAL unit 24
    Last message repeated 3 times
[vvc @ 00000179d4c2c100] Palette is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[vvc @ 00000179d5c3fbf0] Skipping NAL unit 24

green screenshot

I understand that VVC decoder is only 10bit.

LInk codec ffmpeg | JVETVVC 21.0
https://www.sendspace.com/file/xn02cy

Optimze ALF

For https://github.com/ffvvc/tests/blob/main/performance/RitualDance_1920x1080_60_10_420_37_RA.266, ALF use about 30~40% cpu resources. May need to vectorize the alf filter

the following table is an old one, please do
"./ffmpeg -i RitualDance_1920x1080_60_10_420_37_RA.266 -f rawvideo /dev/null -y" by yourself

28.82% ffmpeg_g ffmpeg_g [.] alf_filter_luma_10
7.43% ffmpeg_g ffmpeg_g [.] put_vvc_luma_hv_10
5.48% ffmpeg_g ffmpeg_g [.] ff_vvc_inv_dct2_64
5.30% ffmpeg_g ffmpeg_g [.] alf_get_coeff_and_clip_10
3.31% ffmpeg_g ffmpeg_g [.] inv_dct2.constprop.4
3.11% ffmpeg_g ffmpeg_g [.] alf_filter_chroma_10
3.04% ffmpeg_g ffmpeg_g [.] lmcs_filter_luma_10
2.50% ffmpeg_g ffmpeg_g [.] ff_vvc_deblocking_ctb_boundary_strengths
2.28% ffmpeg_g [kernel.kallsyms] [k] clear_page_erms
1.81% ffmpeg_g ffmpeg_g [.] put_vvc_luma_bi_hv_10
1.81% ffmpeg_g libc-2.31.so [.] 0x000000000018ba51
1.52% ffmpeg_g ffmpeg_g [.] ff_vvc_inv_dst7_32
1.50% ffmpeg_g ffmpeg_g [.] vvc_loop_filter_luma_10
1.46% ffmpeg_g ffmpeg_g [.] put_vvc_luma_uni_hv_10
1.37% ffmpeg_g [kernel.kallsyms] [k] __lock_text_start
1.30% ffmpeg_g ffmpeg_g [.] itransform.isra.0
1.27% ffmpeg_g ffmpeg_g [.] hls_coding_unit
1.27% ffmpeg_g ffmpeg_g [.] put_vvc_chroma_hv_10
1.27% ffmpeg_g ffmpeg_g [.] put_vvc_chroma_uni_hv_10
1.25% ffmpeg_g libc-2.31.so [.] 0x000000000018b643
1.17% ffmpeg_g ffmpeg_g [.] ff_vvc_residual_coding
1.08% ffmpeg_g ffmpeg_g [.] ff_vvc_deblock_filter
1.01% ffmpeg_g ffmpeg_g [.] ff_vvc_inv_dct2_32
0.85% ffmpeg_g ffmpeg_g [.] alf_filter_cc_10
0.79% ffmpeg_g ffmpeg_g [.] put_vvc_chroma_bi_hv_10
0.69% ffmpeg_g ffmpeg_g [.] alf_prepare_buffer
0.65% ffmpeg_g ffmpeg_g [.] intra_pred_10
0.55% ffmpeg_g ffmpeg_g [.] apply_prof_uni_10
0.53% ffmpeg_g libc-2.31.so [.] 0x000000000018b7b3
0.47% ffmpeg_g ffmpeg_g [.] ff_vvc_apply_dmvr_info_ctb
0.47% ffmpeg_g ffmpeg_g [.] put_vvc_luma_v_10

use tb->max_scan_x and tb->max_scan_y to optimze dct8 and dst7

by the nature of transformation, We only have a few no zero coeffes. the position is recorded by tb->max_scan_x and tb->max_scan_y.

We can use this to optimize

static void matrix_mul(int *out, const ptrdiff_t out_stride, const int *in, const ptrdiff_t in_stride, const int8_t* matrix, const int size)

see https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/blob/master/source/Lib/CommonLib/TrQuant_EMT.cpp#L886 for reference.

Make inter and parser process blockless.

Current inter-predict is blockable, it will wait for another frame's pixels to ready. It may have the following issues:

  1. It will capture the executor's thread, and reduce the worker number.
  2. If all threads are blocked, It maybe introduces a deadlock, cause of #17

non monotonically increasing dts

run ./ffmpeg -i LTRP_A_ERICSSON_3.bit test.yuv -vsync 0
the rawvideo muxer will report:

[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 63
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 64
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 65
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 66
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 67
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 68
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 69
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 70
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 71
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 72
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 73
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 74
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 75
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 76
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 77
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 78
[rawvideo @ 0x55b65f1d6c80] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 79 >= 79
It may be related to some timestamp issues

Reduce temporary buffers VVCLocalContext

We have many temporary buffers in VVCLocalContext,

FFmpeg/libavcodec/vvc_ctu.h

Lines 279 to 291 in b4e85c1

/* +7 is for subpixel interpolation, *2 for high bit depths */
DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
/* The extended size between the new edge emu buffer is abused by SAO */
DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer2)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
DECLARE_ALIGNED(32, int16_t, tmp)[MAX_PB_SIZE * MAX_PB_SIZE];
DECLARE_ALIGNED(32, int16_t, tmp1)[MAX_PB_SIZE * MAX_PB_SIZE];
DECLARE_ALIGNED(32, uint8_t, ciip_tmp1)[MAX_PB_SIZE * MAX_PB_SIZE * 2];
DECLARE_ALIGNED(32, uint8_t, ciip_tmp2)[MAX_PB_SIZE * MAX_PB_SIZE * 2];
DECLARE_ALIGNED(32, uint8_t, sao_buffer)[(MAX_CTU_SIZE + 2 * SAO_PADDING_SIZE) * EDGE_EMU_BUFFER_STRIDE * 2];
DECLARE_ALIGNED(32, uint8_t, alf_buffer_luma)[(MAX_CTU_SIZE + 2 * ALF_PADDING_SIZE) * EDGE_EMU_BUFFER_STRIDE * 2];
DECLARE_ALIGNED(32, uint8_t, alf_buffer_chroma)[(MAX_CTU_SIZE + 2 * ALF_PADDING_SIZE) * EDGE_EMU_BUFFER_STRIDE * 2];

We do not need most of them since we have different local contexts for inter, recon, deblock, sao and alf.

2~4 of the buffers may be enough for the current code. Please help remove sao_buffer, alf_buffer_luma and other buffers

mingw + gcc 11.3.1 build fail

from #91 (comment)

In gcc 11.3.1 and higher. I have such message:
I added this fix plus #88

c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:133:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
133 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:142:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
142 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:301:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
301 | DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
| ^~~~~~~~~~~~~~~
In file included from vvcdsp.c:24:
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:133:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
133 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:142:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
142 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:301:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
301 | DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
| ^~~~~~~~~~~~~~~
In gcc 11.3.1 and higher. I have such message:
I added this fix plus #88

c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:133:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
133 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:142:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
142 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:301:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
301 | DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
| ^~~~~~~~~~~~~~~
In file included from vvcdsp.c:24:
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:133:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
133 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:142:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
142 | DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1
| ^~~~~~~~~~~~~~~
c:\gcc1131\x86_64-w64-mingw32\include\libavcodec\vvc_ctu.h:301:5: error: expected specifier-qualifier-list before 'DECLARE_ALIGNED'
301 | DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[(MAX_PB_SIZE + 7) * EDGE_EMU_BUFFER_STRIDE * 2];
| ^~~~~~~~~~~~~~~

How to setup:
#91 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.