From 95da5b26233403c053e842b8dd0a42ad5b7068f2 Mon Sep 17 00:00:00 2001 From: AryaFeng <1963708638@qq.com> Date: Fri, 19 Jan 2024 08:11:46 +0000 Subject: [PATCH 1/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20CMak?= =?UTF-8?q?eLists.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 795471d..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.24) -project(ffmpeg_c) - -set(CMAKE_CXX_STANDARD 17) -find_package(PkgConfig REQUIRED) -pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET - libavdevice - libavfilter - libavformat - libavcodec - libswresample - libswscale - libavutil -) - -include_directories(/home/feng/project/ffmpeg/ffmpeg-c-thread/include) -include_directories( /home/feng/FFmpeg/include) -add_executable(ffmpeg_c main.cpp src/demux_thread.cpp src/packet_queue.cpp src/frame_queue.cpp) - -target_link_libraries(ffmpeg_c PkgConfig::LIBAV) -- Gitee From c97dce518207fb3b022872de31c14a1f5e1577ea Mon Sep 17 00:00:00 2001 From: AryaFeng <1963708638@qq.com> Date: Fri, 19 Jan 2024 08:11:55 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20.vsc?= =?UTF-8?q?ode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/c_cpp_properties.json | 18 ------------------ .vscode/settings.json | 6 ------ 2 files changed, 24 deletions(-) delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/settings.json diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index a3572bb..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "configurations": [ - { - "name": "Linux", - "includePath": [ - "${default}", - "/home/feng/FFmpeg/include", - "/home/femg/project/ffmpeg/ffmpeg-c-thread/include" - ], - "defines": [], - "compilerPath": "/usr/bin/gcc", - "cStandard": "c17", - "cppStandard": "gnu++17", - "intelliSenseMode": "linux-gcc-x64" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 6437b0d..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "files.associations": { - "*.md": "markdown", - "condition_variable": "cpp" - } -} \ No newline at end of file -- Gitee From 2bd2f5792d68ae223b4722ca46b10a5126f0b28c Mon Sep 17 00:00:00 2001 From: AryaFeng <1963708638@qq.com> Date: Fri, 19 Jan 2024 08:12:01 +0000 Subject: [PATCH 3/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20buil?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/ffmpeg_c | Bin 68184 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 build/ffmpeg_c diff --git a/build/ffmpeg_c b/build/ffmpeg_c deleted file mode 100755 index 37015b8c421ea26accd6ade35355bf1391b939f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68184 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%0As0R#3ee=St<(cUDO+~$rmm6 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�=-o^J#JGY^8 zl6$rf3&TbN$SG^ z(7y>=+S^0l=h8}xk8y=)Xfm5q>3^egZ=Z2$&WGE&2q4spn6 z0FR#^uLGUV@3J7nsvot-X$#jsSEpYm>Eu@zg5HYyCnJAOyG_%9{BL-wU<`n-0(@0C z=c~eJ2Vbg8h{#?61pSA>rO0_kw85vF*RWwm+Sp z-V1tEr>Dw;k^pd3p#K5%WjbBv%3?=IeOv>c({UE=*T;>Zj|1H=F6{#ST+k^tTJung ziwV#dfDT~OwY}tUI9CDa4jofvP$B&$g1!cHgbcgBb~X|Qy%lsn8`gmS80a~AeU1|W z;MRctOVBUZ>8;Yngd!a_foCsxux#3~n_~&Zz44&`8g#LK{}f5TioM$UO?)NbyY)Go zo6>rDzs5)L@pOB=9EUCD7jR!8sJExByXzol9q3}+jk@G$>uwd~y!^cXnzS19S- z+42W%Jvsz>`iuT+>S!FHW`OP&i*i9f5p=))Re(N#_Wfc(9Q1tD_lu|NK&SgzUh$Or zw*~ZDL7%MmkLP6oxR*fxGU&^6x+~uHgXd-NU<%td($>_mQ0_U<{cMm2`YzD@;_)KT ze+#-_JZ=O1pP>8Ma6Rbng6`;p7LT`ro{M{Ze(`uW=x2fMHwOKnSAy>6Lt}9O+5);? zJRTTGIev9Y`gc-{r&DmGhT{2W15Qf+FvVD$eqX9_bNZX9#$74t_$jZir=&lYYCM^8 zGBE2>8wK}B`o8HkS@;Io!&KiGcwj=xDc4qFW0jKrpQ$PD5%Rv&5#LHRewK=lh}7~* zZZ~@l&VKf!q(3m!xGOaucM682KR(oWZU|=Q{st6`IrW;-&{u(qB(8exD*vB95ld$3@a> zjN94L)Qa^7v!Li2i*ZHicwsg8@lx;aq@0A$Fz9zvjo*(~+rp7;PiuhoM|fFrCrH3fAv< zrXy_;7gBh~#no_=SE6zBC9ZsKXf&6HF+}<&E_&96E`{%7!Afs>XCGaxhN0RQc_HwM z@1Fy*e;6l$`k2crx#0mWt9~Bf@UWR=P4=^;&G{lw3Fu*XIVLroBhD#VWF}A-; z@Bl;OEN-7+fMGVne1@eAmoRK%xRPNP!wn2KGwf#A%dn5(0fxre+&;qq!)%863`-d< zVc5iQCBrU;8yHHdNB-~d%}(Cgg@w}t6BjORX^6K3g2AlZtn7<|Eut8_H76%4JNG`~G;dNsSvy2h0?a^e@5N8^Diw#aO|Er=>Jff}3qOhR?scXZ_!OKP zP2~QPesnFwUyAV=L&Yh9#6LIVkL0U$OX1hxLyB>-q2ivxe-|IT^rz-X&Uq6h=gVB- z=YT23C}UicM5Hl(FQAv44}d2*AB#f*+&^Xhk?08Ff14)};>;5tr!zivniH?|IZhmA zV9(2Pls;=+`qV(qVESAgk^+=IN`92_Zu#SzCBN$L3f8lX1_)PB0^_@ke`JnCK%f6e$6EJvJI0Dn9TcqUdum8Yq7@igG6U6tP{`3=C2 z0)Bw!#g{PNbTu>o)=Opid^McM0Q9z(PXp&Y2+*vlyQZJn8u?+n=5(q$^DL z)RPRAze+5gV-x(UWWyys_&D&??tSHwm*ziR^qmaCe}na3Ceh+q5yIbep+wL#sdTMH zLQD8Wr7UwbV+Z5=N+tdb35?y0Usxd#+&$y3jK8eV$$udNpqHKJ08j1yb&lj$Je2~^ zjcMRk=0AC^L>4e@J@7Q&jUPzFM8-eG{2vra#95602zb>NqXfvrMuWyn?dRy;30*

CH@f0+Q|4zI1XIQ_@{u+ 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 Date: Sat, 20 Jan 2024 20:33:31 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=8E=A5?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E5=92=8C=E8=A7=A3=E7=A0=81=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E9=87=87=E7=94=A8=E4=BA=8B=E5=85=88=E5=88=86?= =?UTF-8?q?=E9=85=8D=E5=A5=BD=E7=9A=84=E5=86=85=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/decode_thread.h | 2 +- include/demux_thread.h | 6 +++--- include/frame_queue.h | 9 ++++----- include/packet_queue.h | 12 +++--------- include/queue.h | 35 ++++++++++++++------------------- include/swscale_thread.h | 15 ++++++++++++++ main.cpp | 14 ++++++++++++-- src/decode_thread.cpp | 21 ++++++++++---------- src/demux_thread.cpp | 9 +++++---- src/frame_queue.cpp | 42 +++++++++++++++++++++++++--------------- src/packet_queue.cpp | 41 ++++++++++++++++++--------------------- src/swscale_thread.cpp | 1 + 12 files changed, 114 insertions(+), 93 deletions(-) create mode 100644 include/swscale_thread.h create mode 100644 src/swscale_thread.cpp diff --git a/include/decode_thread.h b/include/decode_thread.h index d41e234..927ddd3 100644 --- a/include/decode_thread.h +++ b/include/decode_thread.h @@ -1,10 +1,10 @@ #ifndef FFMPEG_DECODE_THREAD_H #define FFMPEG_DECODE_THREAD_H #include "frame_queue.h" +#include "libavutil/frame.h" #include "log.h" #include "packet_queue.h" #include "thread" -#include "libavutil/frame.h" extern "C" { #include "libavcodec/avcodec.h" diff --git a/include/demux_thread.h b/include/demux_thread.h index 0b10ba2..593e58d 100644 --- a/include/demux_thread.h +++ b/include/demux_thread.h @@ -1,7 +1,7 @@ #ifndef FFMPEG_DEMUX_THREAD_H #define FFMPEG_DEMUX_THREAD_H #include "log.h" -#include "packet_queue.h" +#include "queue.h" #include "thread" extern "C" { #include "libavformat/avformat.h" @@ -9,7 +9,7 @@ extern "C" { class DemuxThread { public: - DemuxThread(std::string inFile, PacketQueue* packetQ); + DemuxThread(std::string inFile, Queue* packetQ); ~DemuxThread(); int Init(); // 初始化操作 int Start(); // 启动线程 @@ -22,7 +22,7 @@ public: private: std::thread* thread_ = nullptr; // 线程 - PacketQueue* packetQ_; // 存放解封装后的队列 + Queue* packetQ_; // 存放解封装后的队列 AVFormatContext* iFmtCtx_ = nullptr; // 解封装格式上下文 int videoStreamIndex_ = -1; // 视频流索引 char err_[256] = { 0 }; // 打印错误信息 diff --git a/include/frame_queue.h b/include/frame_queue.h index 1bb4b26..f96ca76 100644 --- a/include/frame_queue.h +++ b/include/frame_queue.h @@ -1,16 +1,15 @@ #ifndef FFMPEG_FRAME_QUEUE_H #define FFMPEG_FRAME_QUEUE_H -#include "log.h" #include "queue.h" extern "C" { #include "libavcodec/avcodec.h" } + class FrameQueue : public Queue { public: - FrameQueue(int max); - ~FrameQueue(); - int Init(); - void Push(AVFrame* frame); + int Init(int max) override; + void Push(AVFrame* pkt) override; + void Pop(AVFrame*& pkt) override; }; #endif \ No newline at end of file diff --git a/include/packet_queue.h b/include/packet_queue.h index cc40f2a..b3492bb 100644 --- a/include/packet_queue.h +++ b/include/packet_queue.h @@ -1,17 +1,11 @@ #ifndef FFMPEG_PACKET_QUEUE_H #define FFMPEG_PACKET_QUEUE_H -#include "log.h" #include "queue.h" -extern "C" { -#include "libavcodec/avcodec.h" -} - class PacketQueue : public Queue { public: - PacketQueue(int max); - ~PacketQueue(); - // 重写Init() - int Init() override; + int Init(int max) override; void Push(AVPacket* pkt) override; + void Pop(AVPacket*& pkt) override; }; + #endif \ No newline at end of file diff --git a/include/queue.h b/include/queue.h index ab128ae..65a0afd 100644 --- a/include/queue.h +++ b/include/queue.h @@ -1,18 +1,22 @@ #ifndef FFMPEG_QUEUE_H #define FFMPEG_QUEUE_H +#include "log.h" #include #include #include -#include "log.h" #include +extern "C" { +#include "libavcodec/avcodec.h" +} template class Queue { public: Queue(); - virtual int Init() = 0; // 分配空间,由实现类进行完成 - virtual void Push(T val) = 0; // 子类实现push操作, + ~Queue(); + virtual int Init(int max) = 0; // 分配空间,由实现类进行完成 + virtual void Push(T val) = 0; + virtual void Pop(T& val) = 0; int size(); - T& Pop(); bool isEmpty(); public: @@ -34,28 +38,19 @@ inline Queue::Queue() } template -inline int Queue::size() +inline Queue::~Queue() { - std::unique_lock lock(mtx_); - return size_; + max_ = 0; + front_ = 0; + rear_ = 0; + queue_.resize(0); } template -inline T& Queue::Pop() +inline int Queue::size() { std::unique_lock lock(mtx_); - if (size_ == 0) { - // 表示队列是空的,等待唤醒 - cond_.wait(lock, [this] { - return size_ != 0; - }); - } - T& t = queue_[front_]; - LOGI("front_ == %d",front_); - front_ = (front_ + 1) % max_; // 出队位置重新指定 - size_--; - cond_.notify_one(); - return t; + return size_; } template diff --git a/include/swscale_thread.h b/include/swscale_thread.h new file mode 100644 index 0000000..6e6bbbe --- /dev/null +++ b/include/swscale_thread.h @@ -0,0 +1,15 @@ +#ifndef FFMPEG_SWSCALE_THREAD_H + +#define FFMPEG_SWSCALE_THREAD_H + +class SwscaleThread { + SwscaleThread(); + ~SwscaleThread(); + int Init(); // 初始化操作 + int Start(); // 启动线程 + void Stop(); // 停止线程 + void Run(); // 具体线程执行的操作 + bool isStop(); // 线程是否停止 +}; + +#endif \ No newline at end of file diff --git a/main.cpp b/main.cpp index 0f3d803..ff054c0 100644 --- a/main.cpp +++ b/main.cpp @@ -1,14 +1,24 @@ +#include "decode_thread.h" #include "demux_thread.h" +#include "frame_queue.h" #include "log.h" #include "packet_queue.h" +extern "C" { +#include "libavcodec/avcodec.h" +} int main() { - PacketQueue* packetQ = new PacketQueue(10); + PacketQueue* packetQ = new PacketQueue(); + packetQ->Init(10); // 为队列分配内存 std::string inFile = "/home/feng/project/ffmpeg/out.mp4"; DemuxThread* d = new DemuxThread(inFile, packetQ); d->Init(); d->Start(); - + FrameQueue* frameQ = new FrameQueue(); + frameQ->Init(10); + DecodeThread* decode = new DecodeThread(packetQ, frameQ, 0); + decode->Init(d->GetVideoParams()); + decode->Start(); getchar(); } \ No newline at end of file diff --git a/src/decode_thread.cpp b/src/decode_thread.cpp index 0f69a01..617f81b 100644 --- a/src/decode_thread.cpp +++ b/src/decode_thread.cpp @@ -75,10 +75,13 @@ void DecodeThread::Stop() void DecodeThread::Run() { AVFrame* frame = av_frame_alloc(); + AVPacket* packet = av_packet_alloc(); + AVFrame* t = av_frame_alloc(); LOGI("decode thread run start"); int ret = 0, count = 0; while (!isStop()) { - AVPacket* packet = decodedPacketQueue_->Pop(); + // 队列中拿一个 + decodedPacketQueue_->Pop(packet); if (packet) { // LOGI("111"); ret = avcodec_send_packet(decodeCodecCtx_, packet); @@ -90,7 +93,6 @@ void DecodeThread::Run() } // 读取解码后的数据帧frame while (ret >= 0) { - LOGI("111"); ret = avcodec_receive_frame(decodeCodecCtx_, frame); if (AVERROR(EAGAIN) == ret || ret == AVERROR_EOF) { // 表示还有帧要进行读取 break; @@ -99,16 +101,13 @@ void DecodeThread::Run() av_strerror(ret, err_, sizeof(err_)); LOGE("avcodec_receive_frame failed %s", err_); break; - }else{ + } else { decodedFrameQueue_->Push(frame); LOGI("解码帧数 %d", ++count); -// // 测试: -// AVFrame * t = decodedFrameQueue_->Pop(); -// av_frame_unref(t); // 释放掉这个 - break; - + // 这里需要释放帧,才能继续解码 + decodedFrameQueue_->Pop(t); + av_frame_unref(t); } - } if (packet->stream_index == 5) { // 表示可以到了末尾了,可以停止线程了 @@ -117,10 +116,10 @@ void DecodeThread::Run() Stop(); break; } -// av_frame_unref(frame); - av_packet_unref(packet); // 需要彻底释放packet队列中的packet + av_packet_unref(packet); } } + av_packet_free(&packet); av_frame_free(&frame); } diff --git a/src/demux_thread.cpp b/src/demux_thread.cpp index b3dd54d..c4b4534 100644 --- a/src/demux_thread.cpp +++ b/src/demux_thread.cpp @@ -1,6 +1,6 @@ #include "demux_thread.h" -DemuxThread::DemuxThread(std::string inFile, PacketQueue* packetQ) +DemuxThread::DemuxThread(std::string inFile, Queue* packetQ) : inFile_(inFile) , packetQ_(packetQ) { @@ -72,6 +72,7 @@ void DemuxThread::Run() int ret = 0; AVPacket* packet = av_packet_alloc(); AVPacket* tmp = nullptr; + AVPacket* t = av_packet_alloc(); int count = 0; while (!isStop()) { ret = av_read_frame(iFmtCtx_, packet); @@ -100,9 +101,9 @@ void DemuxThread::Run() // 放入队列 packetQ_->Push(packet); LOGI("decodePacektQueue 插入:%d", ++count); -// // 测试使用 出队列 -// AVPacket * t = packetQ_->Pop(); -// av_packet_unref(t); + // 测试使用 出队列 + // packetQ_->Pop(t); + // av_packet_unref(t); } else { // 释放其他非视频流的packet av_packet_unref(packet); diff --git a/src/frame_queue.cpp b/src/frame_queue.cpp index 6cc00a9..c9dba13 100644 --- a/src/frame_queue.cpp +++ b/src/frame_queue.cpp @@ -1,41 +1,51 @@ #include "frame_queue.h" -int FrameQueue::Init() +int FrameQueue::Init(int max) { + max_ = max; queue_.resize(max_); for (int i = 0; i < max_; i++) { - AVFrame* frame = av_frame_alloc(); - if (!frame) { - LOGE("frame queue init: av_frame_alloc failed"); + AVFrame* packet = av_frame_alloc(); + if (!packet) { + // 表示分配内存失败,释放所有的资源 + for (int i = 0; i < max_; i++) { + if (queue_[i]) { + av_frame_free(&queue_[i]); + } + } return -1; } - queue_[i] = frame; + queue_[i] = packet; } return 0; } -FrameQueue::FrameQueue(int max) -{ - max_ = max; - Init(); -} - void FrameQueue::Push(AVFrame* frame) { std::unique_lock lock(mtx_); if (size_ == max_) { cond_.wait(lock, [this] { - return !size_ == max_; + return size_ != max_; }); } av_frame_move_ref(queue_[rear_], frame); - rear_ = (rear_ + 1) % max_; size_++; + rear_ = (rear_ + 1) % max_; cond_.notify_one(); } -FrameQueue::~FrameQueue() +void FrameQueue::Pop(AVFrame*& frame) { - // 调用父类的析构函数 - Queue::~Queue(); + std::unique_lock lock(mtx_); + if (size_ == 0) { + // 表示队列是空的,等待唤醒 + cond_.wait(lock, [this] { + return size_ != 0; + }); + } + // 这里会将queue中的数据的引用置为0,因此无需调用unref + av_frame_move_ref(frame, queue_[front_]); + front_ = (front_ + 1) % max_; // 出队位置重新指定 + size_--; + cond_.notify_one(); } diff --git a/src/packet_queue.cpp b/src/packet_queue.cpp index e3f9f67..c79e61d 100644 --- a/src/packet_queue.cpp +++ b/src/packet_queue.cpp @@ -1,34 +1,18 @@ #include "packet_queue.h" -PacketQueue::PacketQueue(int max) +int PacketQueue::Init(int max) { - LOGI("init start"); max_ = max; - // 进行Init - Init(); - LOGI("init finshed"); -} - -PacketQueue::~PacketQueue() -{ - // 调用父类的析构函数 - Queue::~Queue(); -} - -int PacketQueue::Init() -{ queue_.resize(max_); for (int i = 0; i < max_; i++) { AVPacket* packet = av_packet_alloc(); if (!packet) { - // 释放已经分配的内存 + // 表示分配内存失败,释放所有的资源 for (int i = 0; i < max_; i++) { if (queue_[i]) { av_packet_free(&queue_[i]); - queue_[i] = nullptr; } } - LOGE("packet queue init: av_packet_alloc failed"); return -1; } queue_[i] = packet; @@ -38,17 +22,30 @@ int PacketQueue::Init() void PacketQueue::Push(AVPacket* pkt) { - // 上锁 std::unique_lock lock(mtx_); - // 如果满了就等待 if (size_ == max_) { cond_.wait(lock, [this] { return !(size_ == max_); }); } - // 插入, 这里不进行流的类型判断 av_packet_move_ref(queue_[rear_], pkt); - rear_ = (rear_ + 1) % max_; size_++; + rear_ = (rear_ + 1) % max_; + cond_.notify_one(); +} + +void PacketQueue::Pop(AVPacket*& pkt) +{ + std::unique_lock lock(mtx_); + if (size_ == 0) { + // 表示队列是空的,等待唤醒 + cond_.wait(lock, [this] { + return size_ != 0; + }); + } + // 这里会将queue中的数据的引用置为0,因此无需调用unref + av_packet_move_ref(pkt, queue_[front_]); + front_ = (front_ + 1) % max_; // 出队位置重新指定 + size_--; cond_.notify_one(); } diff --git a/src/swscale_thread.cpp b/src/swscale_thread.cpp new file mode 100644 index 0000000..7ec0d81 --- /dev/null +++ b/src/swscale_thread.cpp @@ -0,0 +1 @@ +#include "swscale_thread.h" \ No newline at end of file -- Gitee From 7e2713e52ccec0b4c764f981d7ae22e8f5c52181 Mon Sep 17 00:00:00 2001 From: AryaFeng <1963708638@qq.com> Date: Sat, 20 Jan 2024 20:40:39 +0800 Subject: [PATCH 5/5] fsfds Merge branch 'v0.1' of https://gitee.com/AryaFeng/ffmpeg-c-thread into v0.1 --- .vscode/c_cpp_properties.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .vscode/c_cpp_properties.json diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..4039bef --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,16 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c17", + "cppStandard": "gnu++17", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file -- Gitee