Вывод значений из эталонного программного обеспечения 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();

Когда я запускаю, я получаю только биты no.of в последнем макроблоке в текстовом файле.

Это код, который я использую для отображения количества битов в каждом макроблоке, не помещая их в текстовый файл:

    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, но тогда я не знаю, какой должна быть максимальная итерация, потому что каждое видео будет иметь разное количество макроблоков в каждом кадре. Поэтому я думаю, что должна быть переменная, которая работает для всех.


person Yusra    schedule 09.08.2020    source источник


Ответы (1)


Итак, я понял это. Это правильный ответ, чтобы получить то, что я искал:

    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();
person Yusra    schedule 12.08.2020