VOID DoEncodeBuffer(CPacket* pckt, BOOL bHidden, std::vector<BYTE>& vb) { if (!bHidden) EncodeBuffer(pckt, 0, &vb[0], vb.size()); else _EncodeBuffer(pckt, &vb[0], vb.size()); }
///////////////////////////////////////////////////////////////////// // Stores band value from given position bandPos into buffer m_value at position m_valuePos // If buffer is full encode it to file // It might throw an IOException. void CEncoder::WriteValue(CSubband* band, int bandPos) { if (m_currentBlock->m_valuePos == BufferSize) { EncodeBuffer(ROIBlockHeader(BufferSize, false)); } DataT val = m_currentBlock->m_value[m_currentBlock->m_valuePos++] = band->GetData(bandPos); UINT32 v = abs(val); if (v > m_currentBlock->m_maxAbsValue) m_currentBlock->m_maxAbsValue = v; }
////////////////////////////////////////////////////// /// Pad buffer with zeros and encode buffer. /// It might throw an IOException. void CEncoder::Flush() { if (m_currentBlock->m_valuePos > 0) { // pad buffer with zeros memset(&(m_currentBlock->m_value[m_currentBlock->m_valuePos]), 0, (BufferSize - m_currentBlock->m_valuePos)*DataTSize); m_currentBlock->m_valuePos = BufferSize; // encode buffer m_forceWriting = true; // makes sure that the following EncodeBuffer is really written into the stream EncodeBuffer(ROIBlockHeader(m_currentBlock->m_valuePos, true)); } }
status_t MP3Encoder::Flush() { if (m_cookie == 0) return B_OK; if (m_bufAvail > 0) { memset(m_buffer+m_bufAvail, 0, m_chunkSize-m_bufAvail); status_t err = EncodeBuffer(m_buffer, m_chunkSize); if (err < B_OK) return err; } return WriteChunk(m_buffer, mp3_encode(m_cookie, NULL, 0, m_buffer), m_LastEncodeInfo); }
int RecordInput() { struct BurnInputInfo bii; memset(&bii, 0, sizeof(bii)); for (unsigned int i = 0; i < nGameInpCount; i++) { BurnDrvGetInputInfo(&bii, i); if (bii.pVal) { if (bii.nType & BIT_GROUP_ANALOG) { if (*bii.pShortVal != nPrevInputs[i]) { EncodeBuffer(i); EncodeBuffer(*bii.pShortVal >> 8); EncodeBuffer(*bii.pShortVal & 0xFF); nPrevInputs[i] = *bii.pShortVal; } } else { if (*bii.pVal != nPrevInputs[i]) { EncodeBuffer(i); EncodeBuffer(*bii.pVal); nPrevInputs[i] = *bii.pVal; } } }
status_t MP3Encoder::Encode( const void *in_buffer, int64 num_frames, media_encode_info *info) { char *buf = (char *)in_buffer; size_t src_length = num_frames * m_format.channel_count * (m_format.format & 0xf); status_t err; m_LastEncodeInfo = info; if (!m_cookie) { return B_NO_INIT; } if (m_bufAvail > 0) { if (m_bufAvail + xform(src_length) < m_chunkSize) { // just copy into FIFO char *buf = (char *)in_buffer; convert(buf, src_length); return B_OK; } // copy part into FIFO convert(buf, src_length); // encode FIFO err = EncodeBuffer(m_buffer, m_chunkSize); // update variables m_bufAvail = 0; if (err < 0) { return err; } } while (xform(src_length) >= m_chunkSize) { // encode from buffer if (m_format.format == 0x2) { err = EncodeBuffer(buf, m_chunkSize); buf += m_chunkSize; src_length -= m_chunkSize; } else { convert(buf, src_length); err = EncodeBuffer(m_buffer, m_chunkSize); m_bufAvail = 0; } if (err < 0) { return err; } } convert(buf, src_length); return B_OK; }