本文整理汇总了C++中LOGF函数的典型用法代码示例。如果您正苦于以下问题:C++ LOGF函数的具体用法?C++ LOGF怎么用?C++ LOGF使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LOGF函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: on_connect
void on_connect (uv_stream_t* server_handle, int status)
{
CHECK (status, "connect");
int r;
assert ( (uv_tcp_t*) server_handle == &server);
client_t* client = malloc (sizeof (client_t) );
client->request_num = request_num;
LOGF ("[ %5d ] new connection", request_num++);
uv_tcp_init (uv_loop, &client->handle);
http_parser_init (&client->parser, HTTP_REQUEST);
client->parser.data = client;
client->handle.data = client;
r = uv_accept (server_handle, (uv_stream_t*) &client->handle);
CHECK (r, "accept");
uv_read_start ( (uv_stream_t*) &client->handle, on_alloc, on_read);
}
示例2: VBoxMPMapVideoMemory
/* Called for IOCTL_VIDEO_MAP_VIDEO_MEMORY.
* Maps FrameBuffer and video RAM to a caller's virtual adress space.
*/
BOOLEAN VBoxMPMapVideoMemory(PVBOXMP_DEVEXT pExt, PVIDEO_MEMORY pRequestedAddress,
PVIDEO_MEMORY_INFORMATION pMapInfo, PSTATUS_BLOCK pStatus)
{
PHYSICAL_ADDRESS framebuffer;
ULONG inIoSpace = 0;
LOGF(("framebuffer offset %#x", pExt->ulFrameBufferOffset));
framebuffer.QuadPart = VBoxCommonFromDeviceExt(pExt)->phVRAM.QuadPart + pExt->ulFrameBufferOffset;
pMapInfo->VideoRamBase = pRequestedAddress->RequestedVirtualAddress;
VBOXMPIOCTL_HIDE(pRequestedAddress);
pMapInfo->VideoRamLength = pExt->pPrimary->u.primary.ulMaxFrameBufferSize;
pStatus->Status = VideoPortMapMemory(pExt, framebuffer, &pMapInfo->VideoRamLength,
&inIoSpace, &pMapInfo->VideoRamBase);
if (NO_ERROR == pStatus->Status)
{
pMapInfo->FrameBufferBase = (PUCHAR)pMapInfo->VideoRamBase;
pMapInfo->FrameBufferLength =
VBoxMPXpdmCurrentVideoMode(pExt)->VisScreenHeight*
VBoxMPXpdmCurrentVideoMode(pExt)->ScreenStride;
pStatus->Information = sizeof(VIDEO_MEMORY_INFORMATION);
/* Save the new framebuffer size */
pExt->ulFrameBufferSize = pMapInfo->FrameBufferLength;
HGSMIAreaInitialize(&pExt->areaDisplay, pMapInfo->FrameBufferBase,
pMapInfo->FrameBufferLength, pExt->ulFrameBufferOffset);
}
VBOXMPIOCTL_UNHIDE();
LOGF_LEAVE();
return NO_ERROR == pStatus->Status;
}
示例3: repeat_1_cb
static void repeat_1_cb(uv_timer_t* handle, int status) {
int r;
ASSERT(handle == &repeat_1);
ASSERT(status == 0);
ASSERT(uv_timer_get_repeat((uv_timer_t*)handle) == 50);
LOGF("repeat_1_cb called after %ld ms\n",
(long int)(uv_now(uv_default_loop()) - start_time));
repeat_1_cb_called++;
r = uv_timer_again(&repeat_2);
ASSERT(r == 0);
if (uv_now(uv_default_loop()) >= start_time + 500) {
uv_close((uv_handle_t*)handle, close_cb);
/* We're not calling uv_timer_again on repeat_2 any more, so after this */
/* timer_2_cb is expected. */
repeat_2_cb_allowed = 1;
return;
}
}
示例4: test_peer_does_not_have
void test_peer_does_not_have (void *context, void *peer_context, void *key_context, const sync_key_t *key){
struct test_peer *state = (struct test_peer *)context;
struct test_peer *peer = (struct test_peer *)peer_context;
struct test_key *test_key = (struct test_key *)key_context;
LOGF("%s - %s does not have %s that we need to send",
state->name, peer->name, alloca_sync_key(key));
assert(sync_key_exists(state->state, key)==1);
assert(sync_key_exists(peer->state, key)==0);
assert(test_key->initial_peer);
struct test_transfer *transfer = allocate(sizeof(struct test_transfer));
transfer->src = state;
transfer->dest = peer;
transfer->key = test_key;
transfer->delay_till = packets_sent + 10;
if (transfer_tail){
transfer_tail->next = transfer;
}else{
transfer_head = transfer;
}
transfer_tail = transfer;
}
示例5: getchar
/* Ugly tokenizer :3 */
char *token() {
char c;
c = getchar();
while ((c != EOF) && (strchr(skip_chars, c) != NULL)) {
c = getchar();
if (c == '#') {
while ((c != EOF) && (c != '\n'))
c = getchar();
LOGF("skip comment to EOL");
}
}
if (c == EOF)
return NULL;
char buf[256], *cur = buf;
while ((c != EOF) && (strchr(skip_chars, c) == NULL)) {
*(cur++) = c;
c = getchar();
}
*cur = 0;
//LOGF("token=%s", buf);
// you should care about freeing memory :3
return strdup(buf);
}
示例6: seek_backwards
static spx_int64_t seek_backwards(spx_ogg_sync_state *oy, spx_ogg_page *og,
spx_int64_t wantedpos)
{
spx_int64_t crofs;
spx_int64_t *curoffset=&crofs;
*curoffset=ci->curpos;
spx_int64_t begin=*curoffset;
spx_int64_t end=begin;
spx_int64_t ret;
spx_int64_t offset=-1;
spx_int64_t avgpagelen=-1;
spx_int64_t lastgranule=-1;
short time = -1;
while (offset == -1) {
begin -= SEEK_CHUNKSIZE;
if (begin < 0) {
if (time < 0) {
begin = 0;
time++;
} else {
LOGF("Can't seek that early:%lld\n",begin);
return -3; /* too early */
}
}
*curoffset = begin;
ci->seek_buffer(*curoffset);
spx_ogg_sync_reset(oy);
lastgranule = -1;
while (*curoffset < end) {
ret = get_next_page(oy,og,end-*curoffset);
if (ret > 0) {
if (lastgranule != -1) {
if (avgpagelen < 0)
avgpagelen = (spx_ogg_page_granulepos(og)-lastgranule);
else
avgpagelen=((spx_ogg_page_granulepos(og)-lastgranule)
+ avgpagelen) / 2;
}
lastgranule=spx_ogg_page_granulepos(og);
if ((lastgranule - (avgpagelen/4)) < wantedpos &&
(lastgranule + avgpagelen + (avgpagelen/4)) > wantedpos) {
/*wanted offset found Yeay!*/
/*LOGF("GnPagefound:%d,%d,%d,%d\n",ret,
lastgranule,wantedpos,avgpagelen);*/
return ret;
} else if (lastgranule > wantedpos) { /*too late, seek more*/
if (offset != -1) {
LOGF("Toolate, returnanyway:%lld,%lld,%lld,%lld\n",
ret,lastgranule,wantedpos,avgpagelen);
return ret;
}
break;
} else{ /*if (spx_ogg_page_granulepos(&og)<wantedpos)*/
/*too early*/
offset = ret;
continue;
}
} else if (ret == -3)
return(-3);
else if (ret<=0)
break;
else if (*curoffset < end) {
/*this should not be possible*/
//LOGF("Seek:get_earlier_page:Offset:not_cached by granule:"\"%d,%d,%d,%d,%d\n",*curoffset,end,begin,wantedpos,curpos);
offset=ret;
}
}
}
return -1;
}
示例7: speex_seek_page_granule
static int speex_seek_page_granule(spx_int64_t pos, spx_int64_t curpos,
spx_ogg_sync_state *oy,
spx_int64_t headerssize)
{
/* TODO: Someone may want to try to implement seek to packet,
instead of just to page (should be more accurate, not be any
faster) */
spx_int64_t crofs;
spx_int64_t *curbyteoffset = &crofs;
*curbyteoffset = ci->curpos;
spx_int64_t curoffset;
curoffset = *curbyteoffset;
spx_int64_t offset = 0;
spx_ogg_page og = {0,0,0,0};
spx_int64_t avgpagelen = -1;
spx_int64_t lastgranule = -1;
if(abs(pos-curpos)>10000 && headerssize>0 && curoffset-headerssize>10000) {
/* if seeking for more that 10sec,
headersize is known & more than 10kb is played,
try to guess a place to seek from the number of
bytes playe for this position, this works best when
the bitrate is relativly constant.
*/
curoffset = (((*curbyteoffset-headerssize) * pos)/curpos)*98/100;
if (curoffset < 0)
curoffset=0;
//spx_int64_t toffset=curoffset;
ci->seek_buffer(curoffset);
spx_ogg_sync_reset(oy);
offset = get_next_page(oy,&og,-1);
if (offset < 0) { /* could not find new page,use old offset */
LOGF("Seek/guess/fault:%lld->-<-%d,%lld:%lld,%d,%ld,%d\n",
curpos,0,pos,offset,0,
ci->curpos,/*stream_length*/0);
curoffset = *curbyteoffset;
ci->seek_buffer(curoffset);
spx_ogg_sync_reset(oy);
} else {
if (spx_ogg_page_granulepos(&og) == 0 && pos > 5000) {
LOGF("SEEK/guess/fault:%lld->-<-%lld,%lld:%lld,%d,%ld,%d\n",
curpos,spx_ogg_page_granulepos(&og),pos,
offset,0,ci->curpos,/*stream_length*/0);
curoffset = *curbyteoffset;
ci->seek_buffer(curoffset);
spx_ogg_sync_reset(oy);
} else {
curoffset = offset;
curpos = spx_ogg_page_granulepos(&og);
}
}
}
/* which way do we want to seek? */
if (curpos > pos) { /* backwards */
offset = seek_backwards(oy,&og,pos);
if (offset > 0) {
*curbyteoffset = curoffset;
return 1;
}
} else { /* forwards */
while ( (offset = get_next_page(oy,&og,-1)) > 0) {
if (lastgranule != -1) {
if (avgpagelen < 0)
avgpagelen = (spx_ogg_page_granulepos(&og) - lastgranule);
else
avgpagelen = ((spx_ogg_page_granulepos(&og) - lastgranule)
+ avgpagelen) / 2;
}
lastgranule = spx_ogg_page_granulepos(&og);
if ( ((lastgranule - (avgpagelen/4)) < pos && ( lastgranule +
avgpagelen + (avgpagelen / 4)) > pos) ||
lastgranule > pos) {
/*wanted offset found Yeay!*/
*curbyteoffset = offset;
return offset;
}
}
}
//.........这里部分代码省略.........
示例8: LOGF
//------------------------------------------------------------------------
void TcpServer::listen() {
if (espconn_accept(_conn) != ESPCONN_OK) {
LOGF("ERR : espconn_accept");
}
espconn_regist_connectcb(_conn, connectCb);
}
示例9: worker_start
struct worker *
worker_start(EV_P_ struct session *session)
{
struct worker *w;
pid_t pid;
int stdin_fds [2] = {-1, -1};
int stdout_fds[2] = {-1, -1};
int stderr_fds[2] = {-1, -1};
int msgin_fds [2] = {-1, -1};
int msgout_fds[2] = {-1, -1};
#if WORKER_TIMINGS
uint64_t _start = now_us();
#endif
if ((w = calloc(1, sizeof(*w))) == NULL) {
goto fail;
}
w->session = session;
writeq_init(&w->stdin_writeq);
writeq_init(&w->msgin_writeq);
if (pipe(stdin_fds ) < 0 ||
pipe(stdout_fds) < 0 ||
pipe(stderr_fds) < 0 ||
pipe(msgin_fds ) < 0 ||
pipe(msgout_fds) < 0) {
LOG_ERRNO("pipe()");
goto fail;
}
maxfd_update(stdin_fds [0]);
maxfd_update(stdin_fds [1]);
maxfd_update(stdout_fds[0]);
maxfd_update(stdout_fds[1]);
maxfd_update(stderr_fds[0]);
maxfd_update(stderr_fds[1]);
maxfd_update(msgin_fds [0]);
maxfd_update(msgin_fds [1]);
maxfd_update(msgout_fds[0]);
maxfd_update(msgout_fds[1]);
pid = fork();
if (pid < 0) {
LOG_ERRNO("fork()");
goto fail;
}
if (pid == 0) {
/* child. */
if (dup2(stdin_fds [0], 0) < 0 ||
dup2(stdout_fds[1], 1) < 0 ||
dup2(stderr_fds[1], 2) < 0 ||
dup2(msgin_fds [0], 3) < 0 ||
dup2(msgout_fds[1], 4) < 0) {
exit(EXIT_FAILURE);
}
maxfd_closeall(5);
pyenv_child_after_fork();
exit(EXIT_SUCCESS);
} else {
/* parent. */
close(stdin_fds [0]);
close(stdout_fds[1]);
close(stderr_fds[1]);
close(msgin_fds [0]);
close(msgout_fds[1]);
set_fd_nonblocking(stdin_fds [1]);
set_fd_nonblocking(stdout_fds[0]);
set_fd_nonblocking(stderr_fds[0]);
set_fd_nonblocking(msgin_fds [1]);
set_fd_nonblocking(msgout_fds[0]);
ev_child_init(&w->child_watcher, worker_exited_cb, pid, 0);
ev_child_start(EV_A_ &w->child_watcher);
ev_io_init(&w->stdin_w , worker_write_stdin_cb, stdin_fds [1],
EV_WRITE);
ev_io_init(&w->stdout_w, worker_read_stdout_cb, stdout_fds[0],
EV_READ);
ev_io_init(&w->stderr_w, worker_read_stderr_cb, stderr_fds[0],
EV_READ);
ev_io_init(&w->msgin_w , worker_write_msgin_cb, msgin_fds [1],
EV_WRITE);
ev_io_init(&w->msgout_w, worker_read_msgout_cb, msgout_fds[0],
EV_READ);
ev_io_start(EV_A_ &w->stdout_w);
ev_io_start(EV_A_ &w->stderr_w);
ev_io_start(EV_A_ &w->msgout_w);
LOGF(3, "=== %d: worker started, fds=[%d, %d, %d, %d, %d]\n",
worker_pid(w), stdin_fds[1], stdout_fds[0], stderr_fds[0],
msgin_fds[1], msgout_fds[0]);
w->f_alive = true;
}
#if WORKER_TIMINGS
worker_start_time += now_us() - _start;
worker_start_calls++;
#endif
//.........这里部分代码省略.........
示例10: Xgetsockname
/*!
** @brief Get the full DAG of the local socket.
**
** @param sockfd An Xsocket of type SOCK_STREAM
** @param dag A sockaddr to hold the returned DAG.
** @param len On input contans the size of the sockaddr,
** on output contains sizeof(sockaddr_x).
**
** @returns 0 on success
** @returns -1 on failure with errno set
** @returns errno = EFAULT if dag is NULL
** @returns errno = EOPNOTSUPP if sockfd is not of type XSSOCK_STREAM
** @returns errno = ENOTCONN if sockfd is not in a connected state
**
*/
int Xgetsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
int rc;
int flags;
char buf[MAXBUFLEN];
if (!addr || !addrlen) {
LOG("pointer is null!\n");
errno = EFAULT;
return -1;
}
if (*addrlen < sizeof(sockaddr_x)) {
errno = EINVAL;
return -1;
}
if (validateSocket(sockfd, XSOCK_STREAM, EOPNOTSUPP) < 0) {
LOG("Xgetsockname is only valid with stream sockets.");
return -1;
}
if (connState(sockfd) != CONNECTED) {
LOGF("Socket %d is not connected", sockfd);
errno = ENOTCONN;
return -1;
}
xia::XSocketMsg xsm;
xsm.set_type(xia::XGETSOCKNAME);
flags = Xfcntl(sockfd, F_GETFL);
fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK);
// send the protobuf containing the user data to click
if ((rc = click_send(sockfd, &xsm)) < 0) {
LOGF("Error talking to Click: %s", strerror(errno));
fcntl(sockfd, F_SETFL, flags);
return -1;
}
// get the dag
// FIXME: loop here till done or error
if ((rc = click_reply(sockfd, xia::XGETSOCKNAME, buf, sizeof(buf))) < 0) {
LOGF("Error retrieving status from Click: %s", strerror(errno));
fcntl(sockfd, F_SETFL, flags);
return -1;
}
fcntl(sockfd, F_SETFL, flags);
xsm.Clear();
xsm.ParseFromString(buf);
if (xsm.type() != xia::XGETSOCKNAME) {
LOGF("error: expected %d, got %d\n", xia::XGETPEERNAME, xsm.type());
return -1;
}
xia::X_GetSockname_Msg *msg = xsm.mutable_x_getsockname();
Graph g(msg->dag().c_str());
g.fill_sockaddr((sockaddr_x*)addr);
*addrlen = sizeof(sockaddr_x);
return 0;
}
示例11: vrdpDrvStrokePath
void vrdpDrvStrokePath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo,
BRUSHOBJ *pbo, POINTL *pptlBrushOrg, LINEATTRS *plineattrs, MIX mix)
{
PVBOXDISPDEV pDev = (PVBOXDISPDEV)pso->dhpdev;
/*
* StrokePath operation is supported by RDP_ORDER_POLYGON/POLYLINE/ELLIPSE.
*/
VRDPCLIPRECTS clipRects;
int clipResult;
RECTFX rcfxBounds;
RECTL rclBoundsOrdered;
LOGF(("pso = %p, ppo = %p, pco = %p, pxo = %p, pbo = %p, pptlBrushOrg = %p, plineattrs = %p, mix = 0x%08X",
pso, ppo, pco, pxo, pbo, pptlBrushOrg, plineattrs, mix));
LOGF(("ppo: fl = 0x%08X, cCurves = %d", ppo->fl, ppo->cCurves));
PATHOBJ_vGetBounds(ppo, &rcfxBounds);
rclBoundsOrdered.left = FXTOLFLOOR(rcfxBounds.xLeft);
rclBoundsOrdered.right = FXTOLCEILING(rcfxBounds.xRight);
rclBoundsOrdered.top = FXTOLFLOOR(rcfxBounds.yTop);
rclBoundsOrdered.bottom = FXTOLCEILING(rcfxBounds.yBottom);
vrdpOrderRect(&rclBoundsOrdered);
LOG(("ppo: bounds %x-%x, %x-%x, %d-%d %d-%d",
rcfxBounds.xLeft, rcfxBounds.xRight, rcfxBounds.yTop, rcfxBounds.yBottom,
rclBoundsOrdered.left, rclBoundsOrdered.right, rclBoundsOrdered.top, rclBoundsOrdered.bottom));
clipResult = vrdpGetIntersectingClipRects(&clipRects, pso, &rclBoundsOrdered, pco, NULL);
if (clipResult == VRDP_CLIP_NO_INTERSECTION)
{
/* Do nothing. The operation does not affect anything. */
LOG(("VRDP_CLIP_NO_INTERSECTION!!!"));
dumpPCO (&rclBoundsOrdered, pco);
}
else if (clipResult == VRDP_CLIP_TOO_MANY_RECTS)
{
/* A very complex clip. Better to emulate it. */
LOG(("VRDP_CLIP_TOO_MANY_RECTS!!!"));
dumpPCO (&rclBoundsOrdered, pco);
vrdpReportDirtyRects(pDev, &clipRects);
}
else if (pbo->iSolidColor == 0xFFFFFFFF)
{
/* Not solid brushes are not supported. */
vrdpReportDirtyRects(pDev, &clipRects);
}
else if (ppo->fl & PO_ELLIPSE)
{
if (VBoxVBVAOrderSupported(&pDev->vbvaCtx, VRDE_ORDER_ELLIPSE))
{
VRDEORDERELLIPSE order;
order.pt1.x = (int16_t)FXTOLROUND(rcfxBounds.xLeft + 4);
order.pt1.y = (int16_t)FXTOLROUND(rcfxBounds.yTop + 4);
order.pt2.x = (int16_t)FXTOLROUND(rcfxBounds.xRight - 4);
order.pt2.y = (int16_t)FXTOLROUND(rcfxBounds.yBottom - 4);
order.mix = (uint8_t)(mix & 0x1F);
order.fillMode = 0;
order.rgb = vrdpColor2RGB(pso, pbo->iSolidColor);
vrdpReportOrderGeneric(pDev, &clipRects, &order, sizeof (order), VRDE_ORDER_ELLIPSE);
}
else
{
WARN(("ELLIPSE not supported"));
vrdpReportDirtyRects (pDev, &clipRects);
}
}
else if ( (ppo->fl & PO_BEZIERS) == 0
&& (plineattrs->fl & LA_GEOMETRIC) == 0
&& plineattrs->pstyle == NULL)
{
unsigned i;
PATHDATA pd;
BOOL bMore;
VRDEORDERPOLYLINE order;
VRDEORDERPOINT ptStart;
VRDEORDERBOUNDS bounds;
order.rgb = vrdpColor2RGB(pso, pbo->iSolidColor);
order.mix = (uint8_t)(mix & 0x1F);
PATHOBJ_vEnumStart(ppo);
order.points.c = 0;
do {
POINTFIX *pptfx;
VRDEORDERPOINT pt;
bMore = PATHOBJ_bEnum (ppo, &pd);
LOG(("pd: flags = 0x%08X, count = %d", pd.flags, pd.count));
//.........这里部分代码省略.........
示例12: ssbCopy
static BOOL ssbCopy(SSB *pSSB, SURFOBJ *pso, RECTL *prcl, BOOL bToScreen)
{
BYTE *pSrc;
BYTE *pDst;
LONG lDeltaSrc;
LONG lDeltaDst;
ULONG cWidth;
ULONG cHeight;
int cbPixel = format2BytesPerPixel(pso);
LOGF(("pSSB = %p, pso = %p, prcl = %p, bToScreen = %d", pSSB, pso, prcl, bToScreen));
if (cbPixel == 0)
{
WARN(("unsupported pixel format!!!"));
return FALSE;
}
cWidth = prcl->right - prcl->left;
cHeight = prcl->bottom - prcl->top;
if (bToScreen)
{
if (pSSB->pBuffer == NULL)
{
WARN(("source buffer is NULL!!!"));
return FALSE;
}
pSrc = pSSB->pBuffer;
lDeltaSrc = cWidth * cbPixel;
pDst = (BYTE *)pso->pvScan0 +
pso->lDelta * prcl->top +
cbPixel * prcl->left;
lDeltaDst = pso->lDelta;
}
else
{
if (pSSB->pBuffer != NULL)
{
WARN(("source buffer is not NULL!!!"));
return FALSE;
}
pSSB->pBuffer = (BYTE *)EngAllocMem (0, cWidth * cHeight * cbPixel, MEM_ALLOC_TAG);
if (pSSB->pBuffer == NULL)
{
WARN(("Failed to allocate buffer!!!"));
return FALSE;
}
pDst = pSSB->pBuffer;
lDeltaDst = cWidth * cbPixel;
pSrc = (BYTE *)pso->pvScan0 +
pso->lDelta * prcl->top +
cbPixel * prcl->left;
lDeltaSrc = pso->lDelta;
}
LOG(("cHeight = %d, pDst = %p, pSrc = %p, lDeltaSrc = %d, lDeltaDst = %d",
cHeight, pDst, pSrc, lDeltaSrc, lDeltaDst));
while (cHeight--)
{
memcpy (pDst, pSrc, cWidth * cbPixel);
pDst += lDeltaDst;
pSrc += lDeltaSrc;
}
LOGF(("completed."));
return TRUE;
}
示例13: codec_run
/* this is called for each file to process */
enum codec_status codec_run(void)
{
size_t n;
demux_res_t demux_res;
stream_t input_stream;
uint32_t samplesdone;
uint32_t elapsedtime = 0;
int samplesdecoded;
unsigned int i;
unsigned char* buffer;
alac_file alac;
intptr_t param;
/* Clean and initialize decoder structures */
memset(&demux_res , 0, sizeof(demux_res));
if (codec_init()) {
LOGF("ALAC: Error initialising codec\n");
return CODEC_ERROR;
}
ci->configure(DSP_SET_FREQUENCY, ci->id3->frequency);
codec_set_replaygain(ci->id3);
ci->seek_buffer(0);
stream_create(&input_stream,ci);
/* Read from ci->id3->offset before calling qtmovie_read. */
samplesdone = (uint32_t)(((uint64_t)(ci->id3->offset) * ci->id3->frequency) /
(ci->id3->bitrate*128));
/* if qtmovie_read returns successfully, the stream is up to
* the movie data, which can be used directly by the decoder */
if (!qtmovie_read(&input_stream, &demux_res)) {
LOGF("ALAC: Error initialising file\n");
return CODEC_ERROR;
}
/* initialise the sound converter */
alac_set_info(&alac, demux_res.codecdata);
/* Set i for first frame, seek to desired sample position for resuming. */
i=0;
if (samplesdone > 0) {
if (m4a_seek(&demux_res, &input_stream, samplesdone,
&samplesdone, (int*) &i)) {
elapsedtime = (samplesdone * 10) / (ci->id3->frequency / 100);
ci->set_elapsed(elapsedtime);
} else {
samplesdone = 0;
}
}
ci->set_elapsed(elapsedtime);
/* The main decoding loop */
while (i < demux_res.num_sample_byte_sizes) {
enum codec_command_action action = ci->get_command(¶m);
if (action == CODEC_ACTION_HALT)
break;
/* Request the required number of bytes from the input buffer */
buffer=ci->request_buffer(&n, ALAC_BYTE_BUFFER_SIZE);
/* Deal with any pending seek requests */
if (action == CODEC_ACTION_SEEK_TIME) {
if (m4a_seek(&demux_res, &input_stream,
(param/10) * (ci->id3->frequency/100),
&samplesdone, (int *)&i)) {
elapsedtime=(samplesdone*10)/(ci->id3->frequency/100);
}
ci->set_elapsed(elapsedtime);
ci->seek_complete();
}
/* Request the required number of bytes from the input buffer */
buffer=ci->request_buffer(&n, ALAC_BYTE_BUFFER_SIZE);
/* Decode one block - returned samples will be host-endian */
samplesdecoded=alac_decode_frame(&alac, buffer, outputbuffer, ci->yield);
ci->yield();
/* Advance codec buffer by amount of consumed bytes */
ci->advance_buffer(alac.bytes_consumed);
/* Output the audio */
ci->pcmbuf_insert(outputbuffer[0], outputbuffer[1], samplesdecoded);
/* Update the elapsed-time indicator */
samplesdone+=samplesdecoded;
elapsedtime=(samplesdone*10)/(ci->id3->frequency/100);
ci->set_elapsed(elapsedtime);
i++;
}
LOGF("ALAC: Decoded %lu samples\n",(unsigned long)samplesdone);
return CODEC_OK;
//.........这里部分代码省略.........
示例14: VBoxDispDrvEscape
ULONG APIENTRY VBoxDispDrvEscape(SURFOBJ *pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut)
{
PVBOXDISPDEV pDev = (PVBOXDISPDEV)pso->dhpdev;
LOGF_ENTER();
switch (iEsc)
{
#ifdef VBOX_WITH_CROGL
case OPENGL_GETINFO:
{
if (pvOut && cjOut >= sizeof(OPENGL_INFO))
{
POPENGL_INFO pInfo = (POPENGL_INFO)pvOut;
pInfo->dwVersion = 2;
pInfo->dwDriverVersion = 1;
pInfo->szDriverName[0] = 'V';
pInfo->szDriverName[1] = 'B';
pInfo->szDriverName[2] = 'o';
pInfo->szDriverName[3] = 'x';
pInfo->szDriverName[4] = 'O';
pInfo->szDriverName[5] = 'G';
pInfo->szDriverName[6] = 'L';
pInfo->szDriverName[7] = 0;
LOG(("OPENGL_GETINFO ok"));
return cjOut;
}
else
{
WARN(("OPENGL_GETINFO invalid parms"));
return 0;
}
}
case QUERYESCSUPPORT:
{
if (pvIn && cjIn == sizeof(DWORD))
{
DWORD nEscapeQuery = *(DWORD *)pvIn;
if (nEscapeQuery==OPENGL_GETINFO)
{
LOG(("QUERYESCSUPPORT OPENGL_GETINFO"));
return 1;
}
else
{
LOG(("QUERYESCSUPPORT unsupported query %d", nEscapeQuery));
return 0;
}
}
else
{
WARN(("QUERYESCSUPPORT invalid parms"));
return 0;
}
}
#endif
case VBOXESC_ISVRDPACTIVE:
{
if (pDev && pDev->vbvaCtx.pVBVA && pDev->vbvaCtx.pVBVA->hostFlags.u32HostEvents&VBVA_F_MODE_VRDP)
{
LOGF(("VBOXESC_ISVRDPACTIVE: 1"));
return 1;
}
LOGF(("VBOXESC_ISVRDPACTIVE: 0"));
return 0;
}
case VBOXESC_SETVISIBLEREGION:
{
LOGF(("VBOXESC_SETVISIBLEREGION"));
LPRGNDATA lpRgnData = (LPRGNDATA)pvIn;
DWORD cRects;
if ( cjIn >= sizeof(RGNDATAHEADER)
&& pvIn
&& lpRgnData->rdh.dwSize == sizeof(RGNDATAHEADER)
&& lpRgnData->rdh.iType == RDH_RECTANGLES
&& (cRects = lpRgnData->rdh.nCount) <= _1M
&& cjIn == cRects * (uint64_t)sizeof(RECT) + sizeof(RGNDATAHEADER))
{
/** @todo this whole conversion thing could maybe be skipped
* since RTRECT matches the RECT layout. */
#if 0
AssertCompile(sizeof(RTRECT) == sizeof(RECT));
AssertCompileMembersSameSizeAndOffset(RTRECT, xLeft, RECT, left);
AssertCompileMembersSameSizeAndOffset(RTRECT, xBottom, RECT, bottom);
AssertCompileMembersSameSizeAndOffset(RTRECT, xRight, RECT, right);
AssertCompileMembersSameSizeAndOffset(RTRECT, xTop, RECT, top);
rc = VBoxDispMPSetVisibleRegion(pDev->hDriver, (PRTRECT)&lpRgnData->Buffer[0], cRects);
VBOX_WARNRC(rc);
#else
DWORD i;
PRTRECT pRTRect;
int rc;
RECT *pRect = (RECT *)&lpRgnData->Buffer;
pRTRect = (PRTRECT) EngAllocMem(0, cRects*sizeof(RTRECT), MEM_ALLOC_TAG);
if (!pRTRect)
//.........这里部分代码省略.........
示例15: VBoxDispDrvAssertMode
/* Called to reset device to default mode or to mode specified with dhpdev */
BOOL APIENTRY VBoxDispDrvAssertMode(DHPDEV dhpdev, BOOL bEnable)
{
PVBOXDISPDEV pDev = (PVBOXDISPDEV) dhpdev;
DWORD dwrc;
int rc;
LOGF_ENTER();
if (!bEnable)
{
LOGF(("!bEnable"));
#ifdef VBOX_WITH_VIDEOHWACCEL
/* tells we can not process host commands any more and ensures that
* we've completed processing of the host VHWA commands
*/
VBoxDispVHWADisable(pDev);
#endif
/* disable VBVA */
if (pDev->hgsmi.bSupported)
{
VBoxVBVADisable(&pDev->vbvaCtx, &pDev->hgsmi.ctx, -1);
}
/* reset the device to default mode */
rc = VBoxDispMPResetDevice(pDev->hDriver);
VBOX_WARNRC_RETV(rc, FALSE);
}
else
{
LOGF(("bEnable"));
/* switch device to previous pDev mode */
rc = VBoxDispMPSetCurrentMode(pDev->hDriver, pDev->mode.ulIndex);
VBOX_WARNRC_RETV(rc, NULL);
/* enable VBVA */
if (pDev->hgsmi.bSupported)
{
if (pDev->mode.ulBitsPerPel==16 || pDev->mode.ulBitsPerPel==24 || pDev->mode.ulBitsPerPel==32)
{
VBVABUFFER *pVBVA = (VBVABUFFER *)((uint8_t *)pDev->memInfo.VideoRamBase+pDev->layout.offVBVABuffer);
pDev->hgsmi.bSupported = VBoxVBVAEnable(&pDev->vbvaCtx, &pDev->hgsmi.ctx, pVBVA, -1);
LogRel(("VBoxDisp[%d]: VBVA %senabled\n", pDev->iDevice, pDev->hgsmi.bSupported? "":"not "));
}
}
/* inform host */
if (pDev->hgsmi.bSupported)
{
VBoxHGSMIProcessDisplayInfo(&pDev->hgsmi.ctx, pDev->iDevice, pDev->orgDev.x, pDev->orgDev.y,
0, abs(pDev->mode.lScanlineStride), pDev->mode.ulWidth, pDev->mode.ulHeight,
(uint16_t)pDev->mode.ulBitsPerPel, VBVA_SCREEN_F_ACTIVE);
}
#ifdef VBOX_WITH_VIDEOHWACCEL
/* tells we can process host commands */
VBoxDispVHWAEnable(pDev);
#endif
/* Associate back GDI bitmap residing in our framebuffer memory with GDI's handle to our device */
dwrc = EngAssociateSurface((HSURF)pDev->surface.hBitmap, pDev->hDevGDI, 0);
if (dwrc != NO_ERROR)
{
WARN(("EngAssociateSurface on bitmap failed with %#x", dwrc));
return FALSE;
}
/* Associate device managed surface with GDI's handle to our device */
dwrc = EngAssociateSurface(pDev->surface.hSurface, pDev->hDevGDI, pDev->flDrawingHooks);
if (dwrc != NO_ERROR)
{
WARN(("EngAssociateSurface on surface failed with %#x", dwrc));
return FALSE;
}
}
LOGF_LEAVE();
return TRUE;
}