driver/audiodec/ffmpegdec.cpp: try to save cover only at play start time,

looks like race, but CAudioPlayerGui::updateMetaData should detect changed metadata and display cover
This commit is contained in:
[CST] Focus
2013-12-12 15:28:35 +04:00
parent 6a62051032
commit c263bdba51
2 changed files with 6 additions and 5 deletions

View File

@@ -206,7 +206,7 @@ CBaseDec::RetCode CFfmpegDec::Decoder(FILE *_in, const CFile::FileType ft, int /
RetCode Status=OK; RetCode Status=OK;
is_stream = fseek((FILE *)in, 0, SEEK_SET); is_stream = fseek((FILE *)in, 0, SEEK_SET);
if (!SetMetaData((FILE *)in, ft, _meta_data)) { if (!SetMetaData((FILE *)in, ft, _meta_data, true)) {
DeInit(); DeInit();
Status=DATA_ERR; Status=DATA_ERR;
return Status; return Status;
@@ -399,7 +399,7 @@ CFfmpegDec* CFfmpegDec::getInstance()
return FfmpegDec; return FfmpegDec;
} }
bool CFfmpegDec::SetMetaData(FILE *_in, CFile::FileType ft, CAudioMetaData* m) bool CFfmpegDec::SetMetaData(FILE *_in, CFile::FileType ft, CAudioMetaData* m, bool save_cover)
{ {
if (!meta_data_valid) if (!meta_data_valid)
{ {
@@ -462,7 +462,7 @@ bool CFfmpegDec::SetMetaData(FILE *_in, CFile::FileType ft, CAudioMetaData* m)
for(unsigned int i = 0; i < avc->nb_streams; i++) { for(unsigned int i = 0; i < avc->nb_streams; i++) {
if (avc->streams[i]->codec->bit_rate > 0) if (avc->streams[i]->codec->bit_rate > 0)
bitrate += avc->streams[i]->codec->bit_rate; bitrate += avc->streams[i]->codec->bit_rate;
if (avc->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) { if (save_cover && (avc->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC)) {
mkdir(COVERDIR, 0755); mkdir(COVERDIR, 0755);
std::string cover(COVERDIR); std::string cover(COVERDIR);
cover += "/" + to_string(cover_count++) + ".jpg"; cover += "/" + to_string(cover_count++) + ".jpg";
@@ -491,7 +491,8 @@ bool CFfmpegDec::SetMetaData(FILE *_in, CFile::FileType ft, CAudioMetaData* m)
m->total_time = total_time; m->total_time = total_time;
} }
m->type_info = type_info; m->type_info = type_info;
m->bitrate = bitrate; // make sure bitrate is set to prevent refresh metadata from gui, its a flag
m->bitrate = bitrate ? bitrate : 1;
m->samplerate = samplerate; m->samplerate = samplerate;
return true; return true;

View File

@@ -81,6 +81,6 @@ public:
int64_t Seek(int64_t offset, int whence); int64_t Seek(int64_t offset, int whence);
protected: protected:
virtual bool SetMetaData(FILE* in, const CFile::FileType ft, CAudioMetaData* m); virtual bool SetMetaData(FILE* in, const CFile::FileType ft, CAudioMetaData* m, bool save_cover = false);
}; };
#endif #endif