1
0
forked from blue/mlc
mlc/src/flactomp3.h

66 lines
1.9 KiB
C
Raw Normal View History

2023-07-16 23:36:25 +00:00
#pragma once
2023-07-25 23:39:56 +00:00
#include <FLAC/stream_decoder.h>
#include <lame.h>
#include <jpeglib.h>
2023-07-25 23:39:56 +00:00
#include <id3v2tag.h>
2023-07-16 23:36:25 +00:00
#include <string>
#include <string_view>
#include <map>
#include <stdio.h>
2023-07-16 23:36:25 +00:00
#include "logger/accumulator.h"
2023-07-23 12:04:26 +00:00
class FLACtoMP3 {
2023-07-16 23:36:25 +00:00
public:
FLACtoMP3(Logger::Severity severity = Logger::Severity::info, uint8_t size = 4);
2023-07-16 23:36:25 +00:00
~FLACtoMP3();
void setInputFile(const std::string& path);
void setOutputFile(const std::string& path);
2023-07-19 22:12:18 +00:00
bool run();
2023-07-16 23:36:25 +00:00
std::list<Logger::Message> getHistory() const;
2023-07-16 23:36:25 +00:00
private:
void processTags(const FLAC__StreamMetadata_VorbisComment& tags);
void processInfo(const FLAC__StreamMetadata_StreamInfo& info);
void processPicture(const FLAC__StreamMetadata_Picture& picture);
bool decodeFrame(const int32_t * const buffer[], uint32_t size);
bool flush();
bool initializeOutput();
bool scaleJPEG(const FLAC__StreamMetadata_Picture& picture);
2023-07-25 23:39:56 +00:00
void attachPictureFrame(const FLAC__StreamMetadata_Picture& picture, const TagLib::ByteVector& bytes);
2023-07-23 12:04:26 +00:00
2023-07-16 23:36:25 +00:00
static void error(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
static void metadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
static FLAC__StreamDecoderWriteStatus write(
const FLAC__StreamDecoder *decoder,
const FLAC__Frame *frame,
const FLAC__int32 * const buffer[],
void *client_data
);
private:
Accumulator logger;
2023-07-16 23:36:25 +00:00
std::string inPath;
std::string outPath;
FLAC__StreamDecoder *decoder;
lame_t encoder;
FLAC__StreamDecoderInitStatus statusFLAC;
FILE* output;
uint8_t bufferMultiplier;
uint32_t flacMaxBlockSize;
2023-07-16 23:36:25 +00:00
uint32_t pcmCounter;
uint32_t pcmSize;
int16_t* pcm;
uint8_t* outputBuffer;
uint32_t outputBufferSize;
bool outputInitilized;
bool downscaleAlbumArt;
2023-07-25 23:39:56 +00:00
TagLib::ID3v2::Tag id3v2tag;
2023-07-16 23:36:25 +00:00
};