QTfrontend/util/LibavInteraction.cpp
branchios-develop
changeset 13413 ba39a1d396c0
parent 13286 1fbf2ac1f13e
child 14630 957db6db1a49
equal deleted inserted replaced
13411:6e8b807bda4b 13413:ba39a1d396c0
   300             continue;
   300             continue;
   301         AVCodecContext* pCodec = pContext->streams[i]->codec;
   301         AVCodecContext* pCodec = pContext->streams[i]->codec;
   302         if (!pCodec)
   302         if (!pCodec)
   303             continue;
   303             continue;
   304 
   304 
       
   305 
       
   306         AVCodec* pDecoder = avcodec_find_decoder(pCodec->codec_id);
       
   307         QString decoderName = pDecoder ? pDecoder->name : tr("unknown");
   305         if (pCodec->codec_type == AVMEDIA_TYPE_VIDEO)
   308         if (pCodec->codec_type == AVMEDIA_TYPE_VIDEO)
   306         {
   309         {
   307             desc += QString(tr("Video: %1x%2")).arg(pCodec->width).arg(pCodec->height) + ", ";
       
   308             if (pStream->avg_frame_rate.den)
   310             if (pStream->avg_frame_rate.den)
   309             {
   311             {
   310                 float fps = float(pStream->avg_frame_rate.num)/pStream->avg_frame_rate.den;
   312                 float fps = float(pStream->avg_frame_rate.num)/pStream->avg_frame_rate.den;
   311                 desc += QString(tr("%1 FPS")).arg(fps, 0, 'f', 2) + ", ";
   313                 //: Video metadata. %1 = video width, %2 = video height, %3 = frames per second = %4 = decoder name
       
   314                 desc += QString(tr("Video: %1x%2, %3 FPS, %4")).arg(pCodec->width).arg(pCodec->height).arg(QLocale().toString(fps, 'f', 2)).arg(decoderName);
   312             }
   315             }
       
   316             else
       
   317             {
       
   318                 //: Video metadata. %1 = video width, %2 = video height, %3 = decoder name
       
   319                 desc += QString(tr("Video: %1x%2, %3")).arg(pCodec->width).arg(pCodec->height).arg(decoderName);
       
   320             }
   313         }
   321         }
   314         else if (pCodec->codec_type == AVMEDIA_TYPE_AUDIO)
   322         else if (pCodec->codec_type == AVMEDIA_TYPE_AUDIO)
       
   323         {
   315             desc += tr("Audio: ");
   324             desc += tr("Audio: ");
       
   325             desc += decoderName;
       
   326         }
   316         else
   327         else
   317             continue;
   328             continue;
   318         AVCodec* pDecoder = avcodec_find_decoder(pCodec->codec_id);
       
   319         desc += pDecoder? pDecoder->name : tr("unknown");
       
   320         desc += "\n";
   329         desc += "\n";
   321     }
   330     }
   322     AVDictionaryEntry* pComment = av_dict_get(pContext->metadata, "comment", NULL, 0);
   331     AVDictionaryEntry* pComment = av_dict_get(pContext->metadata, "comment", NULL, 0);
   323     if (pComment)
   332     if (pComment)
   324         desc += QString("\n") + pComment->value;
   333     {
       
   334         // Video comment. We expect a simple key value storage in a particular format
       
   335         // and parse it here so the key names can be localized.
       
   336         desc += QString("\n");
       
   337         QStringList strings = QString(pComment->value).split('\n');
       
   338         QString sPlayer, sTheme, sMap, sRecord;
       
   339         for(int i=0; i < strings.count(); i++)
       
   340         {
       
   341             QString s = strings.at(i);
       
   342             // Original key names are in English, like:
       
   343             //     Key: Value
       
   344             if (s.startsWith("Player: "))
       
   345                 sPlayer = QString(s.mid(8));
       
   346             else if (s.startsWith("Theme: "))
       
   347                 sTheme = QString(s.mid(7));
       
   348             else if (s.startsWith("Map: "))
       
   349                 sMap = QString(s.mid(5));
       
   350             else if (s.startsWith("Record: "))
       
   351                 sRecord = QString(s.mid(8));
       
   352         }
       
   353         if(!sPlayer.isNull())
       
   354             desc += QString(tr("Player: %1")).arg(sPlayer) + "\n";
       
   355         if(!sTheme.isNull())
       
   356             desc += QString(tr("Theme: %1")).arg(sTheme) + "\n";
       
   357         if(!sMap.isNull())
       
   358             desc += QString(tr("Map: %1")).arg(sMap) + "\n";
       
   359         if(!sRecord.isNull())
       
   360             //: As in ‘recording’
       
   361             desc += QString(tr("Record: %1")).arg(sRecord);
       
   362     }
   325     avformat_close_input(&pContext);
   363     avformat_close_input(&pContext);
   326     return desc;
   364     return desc;
   327 }
   365 }
   328 
   366 
   329 #else
   367 #else