32 #include "id3/io_decorators.h" 33 #include "io_helpers.h" 34 #include "io_strings.h" 36 #if defined HAVE_SYS_PARAM_H 37 #include <sys/param.h> 49 io::writeTrailingSpaces(writer, id3::v2::getYear(tag),
ID3_V1_LEN_YEAR);
51 size_t track = id3::v2::getTrackNum(tag);
52 String comment = id3::v2::getV1Comment(tag);
63 writer.
writeChar((
char) id3::v2::getGenreNum(tag));
73 if (frame) frame->
Render(writer);
83 ID3D_WARNING(
"id3::v2::render(): no frames to render" );
87 ID3D_NOTICE(
"id3::v2::render(): rendering" );
98 io::StringWriter frmWriter(frms);
101 ID3D_NOTICE(
"id3::v2::render(): rendering frames" );
102 renderFrames(frmWriter, tag);
107 ID3D_NOTICE(
"id3::v2::render(): rendering unsynced frames" );
108 io::UnsyncedWriter uw(frmWriter);
109 renderFrames(uw, tag);
111 ID3D_NOTICE(
"id3::v2::render(): numsyncs = " << uw.getNumSyncs() );
114 size_t frmSize = frms.size();
117 ID3D_WARNING(
"id3::v2::render(): rendered frame size is 0 bytes" );
123 ID3D_NOTICE(
"id3::v2::render(): padding size = " << nPadding );
131 for (
size_t i = 0; i < nPadding; ++i)
142 if (this->NumFrames() == 0)
149 size_t bytesUsed = hdr.
Size();
151 size_t frameBytes = 0;
152 for (
const_iterator cur = _frames.begin(); cur != _frames.end(); ++cur)
156 (*cur)->SetSpec(this->GetSpec());
157 frameBytes += (*cur)->Size();
166 bytesUsed += frameBytes;
168 if (this->GetUnsync())
170 bytesUsed += bytesUsed / 3;
173 bytesUsed += this->PaddingSize(bytesUsed);
188 #define ID3_PADMULTIPLE (2048) 189 #define ID3_PADMAX (4096) 222 newSize = tempSize -
ID3_GetDataSize(*
this) - this->GetAppendedBytes () -
226 return newSize - curSize;
virtual size_type writeChars(const char_type buf[], size_type len)=0
Write up to len characters into buf and advance the internal position accordingly.
ID3_V2Spec GetSpec() const
static const int_type END_OF_WRITER
size_t ID3_GetDataSize(const ID3_TagImpl &tag)
size_t PaddingSize(size_t) const
void render(ID3_Writer &writer, const ID3_TagImpl &tag)
void Render(ID3_Writer &) const
bool GetExperimental() const
void render(ID3_Writer &, const ID3_TagImpl &)
size_t GetExtendedBytes() const
void RenderExtHeader(uchar *)
The representative class of an id3v2 frame.
Frames::const_iterator const_iterator
virtual int_type writeChar(char_type ch)
Write a single character and advance the internal position.