首页 > 解决方案 > 从 VVC VTM 参考软件输出值到文本文件

问题描述

来自 CABACWriter.cpp 的编辑代码 这是我用来获取宏块中的位数并将它们输出到文本文件的代码:

    int before;
    int after;
    int diff;
    ofstream outfile;
    outfile.open("Macroblock.txt");
   if (isEncoding())
{
   before = m_BinEncoder.getNumWrittenBits();
}
coding_unit( cu, partitioner, cuCtx );
    if (isEncoding())
    {
        
        after = m_BinEncoder.getNumWrittenBits();
        diff = after - before;
    }
    
    outfile << diff << endl;
    outfile.close();

当我运行时,我只得到文本文件中最后一个宏块中的位数。

这是我用来显示每个宏块中的位数而不将它们放在文本文件中的代码:

    int before;
    int after;
    int diff;
   
   if (isEncoding())
   {
        
       before = m_BinEncoder.getNumWrittenBits();
   }
// coding unit
  coding_unit( cu, partitioner, cuCtx );
    if (isEncoding())
    {
        after = m_BinEncoder.getNumWrittenBits();
        diff = after - before;
    }
    cout<<"The difference is: "<<diff<<endl;

当我这样做时,我可以看到每个宏块中的位数,而不仅仅是最后一个宏块。

有人可以帮我在输出文本文件中显示每个宏块中的位数吗?我正在考虑使用 for 循环,但后来我不知道最大迭代应该是多少,因为每个视频在每帧中都有不同的宏块数。所以我认为应该有一个适用于所有人的变量。

标签: c++codechevcbitstream

解决方案


所以我想通了。这是得到我想要的东西的正确答案:

    int before;
    int after;
    int diff;
   ofstream outfile;
    outfile.open("Macroblock.txt", ofstream::app);
   if (isEncoding())
   {
        
       before = m_BinEncoder.getNumWrittenBits();
   }
  // coding unit
  coding_unit( cu, partitioner, cuCtx );
    if (isEncoding()){
        
        after = m_BinEncoder.getNumWrittenBits();
       
        diff = after - before;

    }
    
   streambuf* stream_buffer_cout = cout.rdbuf();
    
    streambuf* stream_buffer_file = outfile.rdbuf();
    cout.rdbuf(stream_buffer_file);
    cout<<"The difference is: "<<diff<<endl;
    
    outfile.close();

推荐阅读