本文整理汇总了C++中BMediaTrack::Flush方法的典型用法代码示例。如果您正苦于以下问题:C++ BMediaTrack::Flush方法的具体用法?C++ BMediaTrack::Flush怎么用?C++ BMediaTrack::Flush使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BMediaTrack
的用法示例。
在下文中一共展示了BMediaTrack::Flush方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
AudioProducer::~AudioProducer()
{
TRACE("%p->AudioProducer::~AudioProducer()\n", this);
#if DEBUG_TO_FILE
BMediaTrack* track;
if (BMediaFile* file = init_media_file(fPreferredFormat, &track)) {
printf("deleting file...\n");
track->Flush();
file->ReleaseTrack(track);
file->CloseFile();
delete file;
}
#endif // DEBUG_TO_FILE
// Stop the BMediaEventLooper thread
Quit();
TRACE("AudioProducer::~AudioProducer() done\n");
}
示例2: RefsReceived
//.........这里部分代码省略.........
#ifndef __VM_SYSTEM //RAM
float *mem = Pool.sample_memory + save_start*Pool.sample_type; // src memory
#else
float *convert_buffer = (float*)malloc(buffer_step*channels*4); // make sure there can be floats in it
// read audio from source and write to destination, if necessary
if (convert_buffer) {
VM.ReadBlockAt(save_start, convert_buffer, buffer_step*channels );
float *mem = convert_buffer;
#endif
Pool.StartProgress(Language.get("SAVING_FILE"), save_end-save_start);
for (int64 i=save_start; i<save_end; i+=buffer_step){
// fill up the buffer
int32 block = MIN( (save_end-i) , buffer_step);
switch(format.u.raw_audio.format){
case 0x24: // 0 == mid, -1.0 == bottom, 1.0 == top (the preferred format for non-game audio)
{ float *tmp = (float*)buffer;
for (int32 count = 0; count<block*channels; count++){
*tmp++ = *mem++;
}
} break;
case 0x4: // 0 == mid, 0x80000001 == bottom, 0x7fffffff == top (all >16-bit formats, left-adjusted)
{ int32 *tmp = (int32*)buffer;
for (int32 count = 0; count<block*channels; count++){
t = *mem++;
*tmp++ = ROUND(t*0x7fffffff);
}
} break;
case 0x2: // 0 == mid, -32767 == bottom, +32767 == top
{ int16 *tmp = (int16*)buffer;
for (int32 count = 0; count<block*channels; count++){
t = *mem++;
*tmp++ = ROUND(t*32767.0);
}
} break;
case 0x11: // 128 == mid, 1 == bottom, 255 == top (discouraged but supported format)
{ uint8 *tmp = (uint8*)buffer;
for (int32 count = 0; count<block*channels; count++){
t = *mem++;
*tmp = ROUND(t*127.0);
tmp++;
*tmp = *tmp ^ 0x80;
}
} break;
case 0x1: // 0 == mid, -127 == bottom, +127 == top (not officially supported format)
{ int8 *tmp = (int8*)buffer;
for (int32 count = 0; count<block*channels; count++){
t = *mem++;
*tmp++ = ROUND(t*127.0); // xor 128 to invert sign bit
}
} break;
}
Pool.ProgressUpdate( block );
outTrack->WriteFrames(buffer, block);
#ifdef __VM_SYSTEM //RAM
VM.ReadBlock(convert_buffer, block*channels );
mem = convert_buffer;
#endif
}
#ifdef __VM_SYSTEM //RAM
free(convert_buffer);
}
#endif
Pool.changed = false;
outTrack->Flush();
BMimeType result;
BEntry ent(&dir,name);
entry_ref fref;
ent.GetRef(&fref);
BMimeType::GuessMimeType(&fref,&result);
BNodeInfo ninfo(&newFile);
ninfo.SetType(result.Type());
}else{
(new BAlert(NULL, Language.get("CODEC_FORMAT_ERROR"), Language.get("OK")))->Go();
}
file.CloseFile();
free(buffer);
Pool.HideProgress();
}
}else{
(new BAlert(NULL, Language.get("SAVE_ERROR"), Language.get("OK")))->Go();
}
if (Pool.save_mode == 2)
PostMessage(B_QUIT_REQUESTED);
if (Pool.save_mode == 1)
mainWindow->PostMessage(OPEN);
Pool.save_mode = 0;
}
示例3: sizeof
//.........这里部分代码省略.........
fprintf(stderr, "Error reading video frame %" B_PRId64 ": %s\n", i,
strerror(ret));
snprintf(status.LockBuffer(128), 128,
B_TRANSLATE("Error read video frame %" B_PRId64), i);
status.UnlockBuffer();
SetStatusMessage(status.String());
break;
}
if ((ret = outVidTrack->WriteFrames(videoBuffer, framesRead,
mh.u.encoded_video.field_flags)) != B_OK) {
fprintf(stderr, "Error writing video frame %" B_PRId64 ": %s\n", i,
strerror(ret));
snprintf(status.LockBuffer(128), 128,
B_TRANSLATE("Error writing video frame %" B_PRId64), i);
status.UnlockBuffer();
SetStatusMessage(status.String());
break;
}
completePercent = (float)(i - start) / (float)(end - start) * 100;
currPercent = (int32)completePercent;
if (currPercent > lastPercent) {
lastPercent = currPercent;
snprintf(status.LockBuffer(128), 128,
B_TRANSLATE("Writing video track: %" B_PRId32 "%% complete"),
currPercent);
status.UnlockBuffer();
SetStatusMessage(status.String());
}
}
outVidTrack->Flush();
inFile->ReleaseTrack(inVidTrack);
}
// read audio from source and write to destination, if necessary
if (outAudTrack != NULL) {
lastPercent = -1;
audioFrameCount = inAudTrack->CountFrames();
if (endDuration == 0 || endDuration < startDuration) {
start = 0;
end = audioFrameCount;
} else {
inAudTrack->SeekToTime(&endDuration, stat);
end = inAudTrack->CurrentFrame();
inAudTrack->SeekToTime(&startDuration, stat);
start = inAudTrack->CurrentFrame();
if (end > audioFrameCount)
end = audioFrameCount;
if (start > end)
start = 0;
}
for (int64 i = start; (i <= end) && !fCancel; i += framesRead) {
if ((ret = inAudTrack->ReadFrames(audioBuffer, &framesRead,
&mh)) != B_OK) {
fprintf(stderr, "Error reading audio frames: %s\n", strerror(ret));
snprintf(status.LockBuffer(128), 128,
B_TRANSLATE("Error read audio frame %" B_PRId64), i);
status.UnlockBuffer();
SetStatusMessage(status.String());