本文整理汇总了C++中AP4_DataBuffer::UseData方法的典型用法代码示例。如果您正苦于以下问题:C++ AP4_DataBuffer::UseData方法的具体用法?C++ AP4_DataBuffer::UseData怎么用?C++ AP4_DataBuffer::UseData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AP4_DataBuffer
的用法示例。
在下文中一共展示了AP4_DataBuffer::UseData方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
/*----------------------------------------------------------------------
| AP4_OmaDcfCbcSampleEncrypter::EncryptSampleData
+---------------------------------------------------------------------*/
AP4_Result
AP4_OmaDcfCbcSampleEncrypter::EncryptSampleData(AP4_DataBuffer& data_in,
AP4_DataBuffer& data_out,
AP4_UI64 counter,
bool /*skip_encryption*/)
{
// make sure there is enough space in the output buffer
data_out.Reserve(data_in.GetDataSize()+2*AP4_CIPHER_BLOCK_SIZE+1);
// setup the buffers
AP4_Size out_size = data_in.GetDataSize()+AP4_CIPHER_BLOCK_SIZE;
unsigned char* out = data_out.UseData();
// selective encryption flag
*out++ = 0x80;
// IV on 16 bytes: [SSSSSSSSXXXXXXXX]
// where SSSSSSSS is the 64-bit salt and
// XXXXXXXX is the 64-bit base counter
AP4_CopyMemory(out, m_Salt, 8);
AP4_BytesFromUInt64BE(&out[8], counter);
// encrypt the payload
m_Cipher->SetIV(out);
m_Cipher->ProcessBuffer(data_in.GetData(),
data_in.GetDataSize(),
out+AP4_CIPHER_BLOCK_SIZE,
&out_size,
true);
AP4_CHECK(data_out.SetDataSize(out_size+AP4_CIPHER_BLOCK_SIZE+1));
return AP4_SUCCESS;
}
示例2:
/*----------------------------------------------------------------------
| AP4_MarlinIpmpTrackDecrypter:ProcessSample
+---------------------------------------------------------------------*/
AP4_Result
AP4_MarlinIpmpTrackDecrypter::ProcessSample(AP4_DataBuffer& data_in,
AP4_DataBuffer& data_out)
{
AP4_Result result;
const AP4_UI08* in = data_in.GetData();
AP4_Size in_size = data_in.GetDataSize();
// default to 0 output
data_out.SetDataSize(0);
// check that we have at least the minimum size
if (in_size < 2*AP4_AES_BLOCK_SIZE) return AP4_ERROR_INVALID_FORMAT;
// process the sample data
AP4_Size out_size = in_size-AP4_AES_BLOCK_SIZE; // worst case
data_out.SetDataSize(out_size);
AP4_UI08* out = data_out.UseData();
// decrypt the data
m_Cipher->SetIV(in);
result = m_Cipher->ProcessBuffer(in+AP4_AES_BLOCK_SIZE,
in_size-AP4_AES_BLOCK_SIZE,
out,
&out_size,
true);
if (AP4_FAILED(result)) return result;
// update the payload size
data_out.SetDataSize(out_size);
return AP4_SUCCESS;
}
示例3: while
/*----------------------------------------------------------------------
| AP4_IsmaCipher::DecryptSample
+---------------------------------------------------------------------*/
AP4_Result
AP4_IsmaCipher::DecryptSample(AP4_DataBuffer& data_in,
AP4_DataBuffer& data_out)
{
bool is_encrypted = true;
const unsigned char* in = data_in.GetData();
if (m_SelectiveEncryption) {
is_encrypted = ((in[0]&1)==1);
in++;
}
// get the IV (this implementation only supports un to 32 bits of IV)
// so we skip anything beyond the last 4 bytes
unsigned int to_read = m_IvLength;
if (to_read > 16 || to_read == 0) return AP4_ERROR_INVALID_FORMAT;
while (to_read > 4) {
to_read--;
in++;
}
AP4_UI32 iv = 0;
while (to_read--) {
iv = (iv<<8) | *in++;
}
// get the key indicator (we only support up to 32 bits as well)
to_read = m_KeyIndicatorLength;
if (to_read > 4 ) return AP4_ERROR_INVALID_FORMAT;
while (to_read > 4) {
to_read--;
in++;
}
AP4_UI32 key_indicator = 0;
while (to_read--) {
key_indicator = (key_indicator<<8) | *in++;
}
// we only support key indicator = 0 for now... (TODO)
if (key_indicator != 0) {
return AP4_FAILURE;
}
// process the sample data
unsigned int header_size = in-data_in.GetData();
unsigned int payload_size = data_in.GetDataSize()-header_size;
data_out.SetDataSize(payload_size);
unsigned char* out = data_out.UseData();
if (is_encrypted) {
m_Cipher->SetStreamOffset(iv);
m_Cipher->ProcessBuffer(in, out, payload_size);
} else {
memcpy(out, in, payload_size);
}
return AP4_SUCCESS;
}
示例4: fprintf
/*----------------------------------------------------------------------
| MakeFramePrefix
+---------------------------------------------------------------------*/
static AP4_Result
MakeFramePrefix(AP4_SampleDescription* sdesc, AP4_DataBuffer& prefix, unsigned int& nalu_length_size)
{
AP4_AvcSampleDescription* avc_desc = AP4_DYNAMIC_CAST(AP4_AvcSampleDescription, sdesc);
if (avc_desc == NULL) {
fprintf(stderr, "ERROR: track does not contain an AVC stream\n");
return AP4_FAILURE;
}
if (sdesc->GetFormat() == AP4_SAMPLE_FORMAT_AVC3 || sdesc->GetFormat() == AP4_SAMPLE_FORMAT_AVC4) {
// no need for a prefix, SPS/PPS NALs should be in the elementary stream already
return AP4_SUCCESS;
}
// make the SPS/PPS prefix
nalu_length_size = avc_desc->GetNaluLengthSize();
for (unsigned int i=0; i<avc_desc->GetSequenceParameters().ItemCount(); i++) {
AP4_DataBuffer& buffer = avc_desc->GetSequenceParameters()[i];
unsigned int prefix_size = prefix.GetDataSize();
prefix.SetDataSize(prefix_size+4+buffer.GetDataSize());
unsigned char* p = prefix.UseData()+prefix_size;
*p++ = 0;
*p++ = 0;
*p++ = 0;
*p++ = 1;
AP4_CopyMemory(p, buffer.GetData(), buffer.GetDataSize());
}
for (unsigned int i=0; i<avc_desc->GetPictureParameters().ItemCount(); i++) {
AP4_DataBuffer& buffer = avc_desc->GetPictureParameters()[i];
unsigned int prefix_size = prefix.GetDataSize();
prefix.SetDataSize(prefix_size+4+buffer.GetDataSize());
unsigned char* p = prefix.UseData()+prefix_size;
*p++ = 0;
*p++ = 0;
*p++ = 0;
*p++ = 1;
AP4_CopyMemory(p, buffer.GetData(), buffer.GetDataSize());
}
return AP4_SUCCESS;
}
示例5:
/*----------------------------------------------------------------------
| AP4_SgpdAtom::AP4_SgpdAtom
+---------------------------------------------------------------------*/
AP4_SgpdAtom::AP4_SgpdAtom(AP4_UI32 size,
AP4_UI08 version,
AP4_UI32 flags,
AP4_ByteStream& stream) :
AP4_Atom(AP4_ATOM_TYPE_SGPD, size, version, flags),
m_GroupingType(0),
m_DefaultLength(0)
{
AP4_Size bytes_available = size-AP4_FULL_ATOM_HEADER_SIZE;
stream.ReadUI32(m_GroupingType);
bytes_available -= 4;
if (version >= 1) {
stream.ReadUI32(m_DefaultLength);
bytes_available -= 4;
}
// read the number of entries
AP4_UI32 entry_count = 0;
AP4_Result result = stream.ReadUI32(entry_count);
if (AP4_FAILED(result)) return;
bytes_available -= 4;
// read all entries
for (unsigned int i=0; i<entry_count; i++) {
AP4_UI32 description_length = m_DefaultLength;
if (m_Version == 0) {
// entry size unknown, read the whole thing
description_length = bytes_available;
} else {
if (m_DefaultLength == 0) {
description_length = stream.ReadUI32(description_length);
}
}
if (description_length <= bytes_available) {
AP4_DataBuffer* payload = new AP4_DataBuffer(description_length);
payload->SetDataSize(description_length);
stream.Read(payload->UseData(), description_length);
m_Entries.Add(payload);
}
}
}
示例6:
/*----------------------------------------------------------------------
| AP4_IsmaCipher::EncryptSample
+---------------------------------------------------------------------*/
AP4_Result
AP4_IsmaCipher::EncryptSample(AP4_DataBuffer& data_in,
AP4_DataBuffer& data_out,
AP4_Offset iv,
bool skip_encryption)
{
// setup the buffers
const unsigned char* in = data_in.GetData();
data_out.SetDataSize(data_in.GetDataSize()+4);
unsigned char* out = data_out.UseData();
// IV on 4 bytes
AP4_BytesFromUInt32BE(out, iv);
out += 4;
// encrypt the payload
m_Cipher->SetStreamOffset(iv);
m_Cipher->ProcessBuffer(in, out, data_in.GetDataSize());
return AP4_FAILURE;
}
示例7: fprintf
/*----------------------------------------------------------------------
| MakeFramePrefix
+---------------------------------------------------------------------*/
static AP4_Result
MakeFramePrefix(AP4_SampleDescription* sdesc, AP4_DataBuffer& prefix, unsigned int& nalu_length_size)
{
AP4_HevcSampleDescription* hevc_desc = AP4_DYNAMIC_CAST(AP4_HevcSampleDescription, sdesc);
if (hevc_desc == NULL) {
fprintf(stderr, "ERROR: track does not contain an HEVC stream\n");
return AP4_FAILURE;
}
// extract the nalu length size
nalu_length_size = hevc_desc->GetNaluLengthSize();
// make the VPS/SPS/PPS prefix
for (unsigned int i=0; i<hevc_desc->GetSequences().ItemCount(); i++) {
const AP4_HvccAtom::Sequence& seq = hevc_desc->GetSequences()[i];
if (seq.m_NaluType == AP4_HEVC_NALU_TYPE_VPS_NUT) {
for (unsigned int j=0; j<seq.m_Nalus.ItemCount(); j++) {
const AP4_DataBuffer& buffer = seq.m_Nalus[j];
unsigned int prefix_size = prefix.GetDataSize();
prefix.SetDataSize(prefix_size+4+buffer.GetDataSize());
unsigned char* p = prefix.UseData()+prefix_size;
*p++ = 0;
*p++ = 0;
*p++ = 0;
*p++ = 1;
AP4_CopyMemory(p, buffer.GetData(), buffer.GetDataSize());
}
}
}
for (unsigned int i=0; i<hevc_desc->GetSequences().ItemCount(); i++) {
const AP4_HvccAtom::Sequence& seq = hevc_desc->GetSequences()[i];
if (seq.m_NaluType == AP4_HEVC_NALU_TYPE_SPS_NUT) {
for (unsigned int j=0; j<seq.m_Nalus.ItemCount(); j++) {
const AP4_DataBuffer& buffer = seq.m_Nalus[j];
unsigned int prefix_size = prefix.GetDataSize();
prefix.SetDataSize(prefix_size+4+buffer.GetDataSize());
unsigned char* p = prefix.UseData()+prefix_size;
*p++ = 0;
*p++ = 0;
*p++ = 0;
*p++ = 1;
AP4_CopyMemory(p, buffer.GetData(), buffer.GetDataSize());
}
}
}
for (unsigned int i=0; i<hevc_desc->GetSequences().ItemCount(); i++) {
const AP4_HvccAtom::Sequence& seq = hevc_desc->GetSequences()[i];
if (seq.m_NaluType == AP4_HEVC_NALU_TYPE_PPS_NUT) {
for (unsigned int j=0; j<seq.m_Nalus.ItemCount(); j++) {
const AP4_DataBuffer& buffer = seq.m_Nalus[j];
unsigned int prefix_size = prefix.GetDataSize();
prefix.SetDataSize(prefix_size+4+buffer.GetDataSize());
unsigned char* p = prefix.UseData()+prefix_size;
*p++ = 0;
*p++ = 0;
*p++ = 0;
*p++ = 1;
AP4_CopyMemory(p, buffer.GetData(), buffer.GetDataSize());
}
}
}
return AP4_SUCCESS;
}
示例8: if
static prMALError
SDKImportAudio7(
imStdParms *stdParms,
imFileRef SDKfileRef,
imImportAudioRec7 *audioRec7)
{
prMALError result = malNoError;
// privateData
ImporterLocalRec8H ldataH = reinterpret_cast<ImporterLocalRec8H>(audioRec7->privateData);
stdParms->piSuites->memFuncs->lockHandle(reinterpret_cast<char**>(ldataH));
ImporterLocalRec8Ptr localRecP = reinterpret_cast<ImporterLocalRec8Ptr>( *ldataH );
if(localRecP && localRecP->audio_track && localRecP->alac)
{
assert(localRecP->reader != NULL);
assert(localRecP->file != NULL && localRecP->file->GetMovie() != NULL);
assert(audioRec7->position >= 0); // Do they really want contiguous samples?
assert(audioRec7->position < localRecP->duration);
if(audioRec7->size > localRecP->duration - audioRec7->position)
{
// this does happen, we get asked for audio data past the duration
// let's make sure there's no garbage there and re-set audioRec7->size
for(int c=0; c < localRecP->numChannels; c++)
{
memset(audioRec7->buffer[c], 0, sizeof(float) * audioRec7->size);
}
audioRec7->size = localRecP->duration - audioRec7->position;
}
const AP4_UI32 timestamp_ms = audioRec7->position * 1000 / localRecP->audioSampleRate;
const size_t bytes_per_sample = (localRecP->alac->mConfig.bitDepth <= 16 ? 2 : 4);
const size_t alac_buf_size = localRecP->alac->mConfig.frameLength * localRecP->alac->mConfig.numChannels *
bytes_per_sample + kALACMaxEscapeHeaderBytes;
uint8_t *alac_buffer = (uint8_t *)malloc(alac_buf_size);
AP4_Ordinal sample_index = 0;
AP4_Result ap4_result = localRecP->audio_track->GetSampleIndexForTimeStampMs(timestamp_ms, sample_index);
if(ap4_result == AP4_SUCCESS)
{
// for surround channels
// Premiere uses Left, Right, Left Rear, Right Rear, Center, LFE
// ALAC uses Center, Left, Right, Left Rear, Right Rear, LFE
// http://alac.macosforge.org/trac/browser/trunk/ReadMe.txt
static const int surround_swizzle[] = {4, 0, 1, 2, 3, 5};
static const int stereo_swizzle[] = {0, 1, 2, 3, 4, 5}; // no swizzle, actually
const int *swizzle = localRecP->numChannels > 2 ? surround_swizzle : stereo_swizzle;
csSDK_uint32 samples_needed = audioRec7->size;
PrAudioSample pos = 0;
AP4_DataBuffer dataBuffer;
while(samples_needed > 0 && ap4_result == AP4_SUCCESS && result == malNoError)
{
AP4_Sample sample;
ap4_result = localRecP->audio_track->ReadSample(sample_index, sample, dataBuffer);
if(ap4_result == AP4_SUCCESS)
{
const PrAudioSample sample_pos = sample.GetDts() *
localRecP->audioSampleRate /
localRecP->audio_track->GetMediaTimeScale();
const PrAudioSample sample_len = sample.GetDuration() *
localRecP->audioSampleRate /
localRecP->audio_track->GetMediaTimeScale();
const PrAudioSample skip_samples = (audioRec7->position > sample_pos) ? (audioRec7->position - sample_pos) : 0;
long samples_to_read = sample_len - skip_samples;
if(samples_to_read > samples_needed)
samples_to_read = samples_needed;
else if(samples_to_read < 0)
samples_to_read = 0;
if(samples_to_read > 0)
{
BitBuffer bits;
BitBufferInit(&bits, dataBuffer.UseData(), dataBuffer.GetDataSize());
uint32_t outSamples = 0;
//.........这里部分代码省略.........