driver/audiodec/ffmpegdec: cover fix

This commit is contained in:
martii
2013-11-12 14:44:59 +01:00
committed by [CST] Focus
parent 1575fad077
commit 0d55807143

View File

@@ -43,15 +43,18 @@ extern "C" {
#include <OpenThreads/ScopedLock> #include <OpenThreads/ScopedLock>
#include <driver/netfile.h> #include <driver/netfile.h>
#include <system/helpers.h>
extern cAudio * audioDecoder; extern cAudio * audioDecoder;
#define ProgName "FfmpegDec" #define ProgName "FfmpegDec"
#define COVERFILE "/tmp/cover.jpg" #define COVERDIR "/tmp/cover"
static OpenThreads::Mutex mutex; static OpenThreads::Mutex mutex;
static int cover_count = 0;
static void log_callback(void *, int, const char *format, va_list ap) static void log_callback(void *, int, const char *format, va_list ap)
{ {
vfprintf(stderr, format, ap); vfprintf(stderr, format, ap);
@@ -186,7 +189,6 @@ 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);
unlink (COVERFILE);
if (!SetMetaData((FILE *)in, ft, _meta_data)) { if (!SetMetaData((FILE *)in, ft, _meta_data)) {
DeInit(); DeInit();
Status=DATA_ERR; Status=DATA_ERR;
@@ -346,6 +348,8 @@ CBaseDec::RetCode CFfmpegDec::Decoder(FILE *_in, const CFile::FileType ft, int /
//av_free(avcc); //av_free(avcc);
DeInit(); DeInit();
if (!_meta_data->cover.empty())
unlink(_meta_data->cover.c_str());
return Status; return Status;
} }
@@ -432,12 +436,15 @@ bool CFfmpegDec::SetMetaData(FILE *_in, CFile::FileType ft, CAudioMetaData* m)
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 (avc->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) {
FILE *cover = fopen(COVERFILE, "wb"); mkdir(COVERDIR, 0755);
if (cover) { std::string cover(COVERDIR);
cover += "/" + to_string(cover_count++) + ".jpg";
FILE *f = fopen(cover.c_str(), "wb");
if (f) {
AVPacket *pkt = &avc->streams[i]->attached_pic; AVPacket *pkt = &avc->streams[i]->attached_pic;
fwrite(pkt->data, pkt->size, 1, cover); fwrite(pkt->data, pkt->size, 1, f);
fclose(cover); fclose(f);
m->cover = COVERFILE; m->cover = cover;
} }
} }
} }