跳转至内容
  • 0 赞同
    7 帖子
    140 浏览
    hammerersH

    @SPeak ,是的,只要设置了这个透明窗口就无法渲染

  • json库的initializer_list创建问题

    已锁定 已移动 已解决 现代C++ | mcpp
    5
    0 赞同
    5 帖子
    146 浏览
    dustchensD

    @SPeak
    按照这个思路,只保留一个列表初始化,用了一个辅助函数检测了每个元素是否是数组,如果是数组就检测长度是否是2,然后首元素是否是string,如果初始化列表里全部元素都符合就判定为object。这个代码运行成功了,感谢大佬

    Json(std::initializer_list<Json> init) { if (is_object_list(init)) { JsonObject dict; for (const auto &el : init) { auto pair = std::get_if<JsonArray>(&el.m_value); // 必须是长度为2的数组 assert(pair && pair->size() == 2); auto key = std::get_if<std::string>(&(*pair)[0].m_value); // 第一个元素必须是字符串 assert(key); dict.emplace(*key, (*pair)[1]); } m_value = std::move(dict); } else { m_value = JsonArray(init); } } bool is_object_list(std::initializer_list<Json> init) { return std::all_of(init.begin(), init.end(), [](const Json &el) { auto pair = std::get_if<JsonArray>(&el.m_value); if (!pair || pair->size() != 2) return false; return std::holds_alternative<std::string>((*pair)[0].m_value); }); }
  • 0 赞同
    11 帖子
    296 浏览
    Cat-GuijunC

    hi,友友有解决这个情况吗,我也是当speed不为一时就报错了,我完全不知道如何查找崩溃,找了一天了,下面是我的代码:
    void AudioDecodeThread::run()
    {
    // 加入sonic
    // 初始化部分:先创建一个流
    sonicStream stream = sonicCreateStream(m_videoPlayControl->m_audioCodecCtx->sample_rate, 2);
    if (!stream)
    {
    m_videoPlayControl->m_eventHandler->onVideoPlayerError(0, "sonicCreateStream error!");
    }

    if (!initSwrCtx()) { m_videoPlayControl->m_eventHandler->onVideoPlayerError(0, "initSwrCtx error"); return; } while (true) { if (m_videoPlayControl->m_currentState == State::STOP) { break; } else if (m_videoPlayControl->m_currentState == State::PAUSE) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); continue; } AVPacket *pkt = m_videoPlayControl->m_audioPacketQueue.pop(); if (pkt == nullptr) { if (m_videoPlayControl->m_isReadFinished) { break; } continue; } if (memcmp(pkt->data, FLUSHDATA, strlen(FLUSHDATA)) == 0) { avcodec_flush_buffers(m_videoPlayControl->m_audioCodecCtx); av_packet_free(&pkt); continue; } int ret = avcodec_send_packet(m_videoPlayControl->m_audioCodecCtx, pkt); if (ret < 0) { char errbuf[1024] = { 0 }; av_strerror(ret, errbuf, sizeof(errbuf)); fprintf(stderr, "avcodec_send_packet: %s (error pts: %d)\n", errbuf, pkt->pts); av_packet_free(&pkt); continue; } AVFrame *frame = av_frame_alloc(); while (avcodec_receive_frame(m_videoPlayControl->m_audioCodecCtx, frame) == 0) { // 读取frame, swr转换, 放到frameQueue里面去 int inSamples = frame->nb_samples; // int outSamples = av_rescale_rnd(inSamples, 1, 1, AV_ROUND_UP); // 废除手动分配的 audioBuffer,改用 resampleFrame 内部缓冲区 AVFrame *resampleFrame = av_frame_alloc(); resampleFrame->format = AV_SAMPLE_FMT_S16; av_channel_layout_default(&resampleFrame->ch_layout, 2); // 双声道 resampleFrame->sample_rate = frame->sample_rate; // 正确设置采样率 resampleFrame->nb_samples = inSamples; // 让 FFmpeg 自动分配缓冲区(确保地址和大小正确) if (av_frame_get_buffer(resampleFrame, 0) < 0) { av_frame_free(&resampleFrame); continue; } int len = swr_convert(m_swrCtx, resampleFrame->data, resampleFrame->nb_samples, (const uint8_t **)frame->data, inSamples); // 加入sonic sonicSetSpeed(stream, m_videoPlayControl->m_speed); // 4. 写入音频数据到Sonic ,这里的bug short *valid_audio_data = (short *)resampleFrame->data[0]; int total_samples = len; // 单声道总样本数 std::cout << len << std::endl; ret = sonicWriteShortToStream(stream, valid_audio_data, total_samples); if (ret == 0) { m_videoPlayControl->m_eventHandler->onVideoPlayerError(0, "sonicWriteShortToStream error"); continue; } int availableSamples = sonicSamplesAvailable(stream); // if (availableSamples <= 0) { continue; } // 根据实际需要的样本数分配缓冲区 short *output_pcm = new short[availableSamples * 2]; int samples = sonicReadShortFromStream(stream, output_pcm, availableSamples); if (samples <= 0) { delete[] output_pcm; av_frame_free(&resampleFrame); continue; } std::cout << inSamples << "---" << len << "---" << availableSamples << "---" << samples << std::endl; PCMFrame *pcm = new PCMFrame(); pcm->setBuffer((uint8_t *)output_pcm, samples * 4); pcm->setPts(frame->pts); pcm->setSampleRate(frame->sample_rate); m_videoPlayControl->m_audioFrameQueue.push(pcm); delete[] output_pcm; av_frame_free(&resampleFrame); } av_frame_free(&frame); av_packet_free(&pkt); } sonicDestroyStream(stream); }
  • 显示vscode下载成功了 但一使用就显示'code.cmd'is not recognized......

    未解决 xlings
    3
    0 赞同
    3 帖子
    145 浏览
    SPeakS

    测试了一下正常安装过程, 应该是没有问题的, 是不是之前安装过程存在中断或错误呢。 可以尝试卸载然后重新安装试一试

    xlings self clean xlings remove code@1.100.1 xlings install code@1.100.1 code --version

    具体示例

    image.png

  • 1 赞同
    6 帖子
    201 浏览
    SPeakS

    @sky-littlestar 我说的意思就是把你上面的代码 整理一下 用项目(Demo)的方式 放到github, 不是说其他什么写法

  • windows(powershell)安装xlings时出现乱码

    已锁定 已解决 xlings
    3
    0 赞同
    3 帖子
    122 浏览
    X

    谢谢,解决这个问题了

  • 2 赞同
    1 帖子
    113 浏览
    尚无回复
  • [请求支持]markdown+latex数学公式

    已锁定 已解决 Comments & Feedback
    4
    0 赞同
    4 帖子
    252 浏览
    SPeakS

    备注一下使数学公式的使用语法

    单行公式语法 - $ 你的公式 $

    $ log_2^n $

    $ log_2^n $

    多行公式语法 - $$ 你的公式 $$

    $$ log_2^n => log_2^9 = 3 , n = 9 $$

    $$
    log_2^n =>
    log_2^9 = 3, n = 9
    $$

  • 通过快排模拟IDE上qosrt的实现方法

    Maxwell1905's Blog
    2
    1 赞同
    2 帖子
    122 浏览
    SPeakS

    算法复杂度直观通俗理解: 每次比较完成, 被选中的基准值会被放到最终他所在的位置, 所以比较N遍即可完成排序, 而每次比较完后会分裂成2个数组, 总的数组就 $log_2^N$级别

    所以算法复杂度就是 比较的遍数 x 要比较的数组的数量, 即:

    $$
    O(nlog_2^n)
    $$

    注: 文章写完后, 也可以分享到社区群里

  • 1 赞同
    1 帖子
    95 浏览
    尚无回复
  • 如果创建一个新的社区版块?

    Announcements | 公告
    4
    0 赞同
    4 帖子
    366 浏览
    sunrisepeakS

    @johanvx 版块已创建, 可以检查确认一下是否有话题贴/Topic工具的权限

    https://forum.d2learn.org/category/21/blog-johan-xie
  • 0 赞同
    3 帖子
    130 浏览
    SPeakS

    @tenp00 可能是临时的网络波动影响的下载安装包失败, 可以重新运行试一试. 如果还报这个问题, 可以按下面方法分两步安装试一试: https://xlings.d2learn.org/documents/qa.html

    image.png

  • Linux & Win 游戏性能随手记录

    General Discussion | 综合讨论
    16
    1 赞同
    16 帖子
    904 浏览
    MoYingJiM

    我用错驱动了...
    理论上 上述linux的测试结果还能再提升?

    图片.png

  • 3 赞同
    1 帖子
    73 浏览
    尚无回复
  • 0 赞同
    4 帖子
    175 浏览
    johanvxJ

    为方便描述,称上游 GitHub 仓库为 upstream,自己 fork 的 GitHub 仓库为 origin。如果没有理解错的话,你应该是遇到下面这个场景并想做到 Step 4:

    = Step 1: Fork * aaaaaa (HEAD -> main, origin/main, upstream/main) ... = Step 2: Make local changes and push them to origin * bbbbbb (HEAD -> main, origin/main) * aaaaaa (upstream/main) ... = Step 3: Check (fetch) upstream's update * bbbbbb (HEAD -> main, origin/main) | * cccccc (upstream/main) |/ * aaaaaa ... = Step 4: Rebase (but how?) * bbbbbb (HEAD -> main, origin/main) * cccccc (upstream/main) * aaaaaa ...

    如果是这样的话,我通常的做法是在本地进行这样的操作:

    git pull -r upstream main # Resolve conflict git rebase --continue

    至于 GitHub 有没有一键(或者几键)的做法,我没有找到。

    参考阅读:https://gitolite.com/git-pull--rebase

  • hello-mcpp中编译报错'auto' not allowed in function return type

    已锁定 已解决 现代C++ | mcpp
    5
    0 赞同
    5 帖子
    229 浏览
    SPeakS

    刚刚更新优化了一下工具在macos平台上的控制台刷新机制

    如果macos上遇到控制台的输出不刷新或重复输出问题, 可以运行下面命令进行更新一下工具(默认只会覆盖xlings的核心代码, 不用但心之前的安装或配置的环境和数据缓存

    curl -fsSL https://d2learn.org/xlings-install.sh | bash
  • 0 赞同
    1 帖子
    71 浏览
    尚无回复
  • 0 赞同
    1 帖子
    99 浏览
    尚无回复
  • 0 赞同
    1 帖子
    89 浏览
    尚无回复
  • 0 赞同
    5 帖子
    178 浏览
    SPeakS

    @javis 是一运行就报这个错误, 还是vscode一编辑文件就报错啊

    尝试把项目目录下的config.xlings下面这一行删除(即不自动用vscode打开代码文件)

    8f166822-5e51-4fb8-8e16-c03a2e36191b-image.png

    然后使用其他 手动 用其他编辑器(本地文本编辑器或其他非vscode) 打开对应的代码文件修改保存 会有这个问题吗

    看看是不是和vscode有关系问题