static int aio_pthread_write(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb) { struct aio_extra *aio_ex = (struct aio_extra *)aiocb->aio_sigevent.sigev_value.sival_ptr; struct aio_private_data *pd = NULL; int ret; if (!init_aio_threadpool(handle)) { return -1; } pd = create_private_data(aio_ex, aiocb); if (pd == NULL) { DEBUG(10, ("aio_pthread_write: Could not create private data.\n")); return -1; } pd->write_command = true; ret = pthreadpool_add_job(pool, pd->jobid, aio_worker, (void *)pd); if (ret) { errno = ret; return -1; } DEBUG(10, ("aio_pthread_write: jobid=%d pwrite requested " "of %llu bytes at offset %llu\n", pd->jobid, (unsigned long long)pd->aiocb->aio_nbytes, (unsigned long long)pd->aiocb->aio_offset)); return 0; }
int mpeg1_2_video_packetizer_c::process(packet_cptr packet) { if (0.0 > m_fps) extract_fps(packet->data->get_buffer(), packet->data->get_size()); if (!m_aspect_ratio_extracted) extract_aspect_ratio(packet->data->get_buffer(), packet->data->get_size()); if (m_framed) return process_framed(packet); int state = m_parser.GetState(); if ((MPV_PARSER_STATE_EOS == state) || (MPV_PARSER_STATE_ERROR == state)) return FILE_STATUS_DONE; memory_cptr old_memory = packet->data; unsigned char *data_ptr = old_memory->get_buffer(); int new_bytes = old_memory->get_size(); if (packet->has_timecode()) m_parser.AddTimecode(packet->timecode); do { int bytes_to_add = (m_parser.GetFreeBufferSpace() < new_bytes) ? m_parser.GetFreeBufferSpace() : new_bytes; if (0 < bytes_to_add) { m_parser.WriteData(data_ptr, bytes_to_add); data_ptr += bytes_to_add; new_bytes -= bytes_to_add; } state = m_parser.GetState(); while (MPV_PARSER_STATE_FRAME == state) { MPEGFrame *frame = m_parser.ReadFrame(); if (NULL == frame) break; if (NULL == m_hcodec_private) create_private_data(); packet_cptr new_packet = packet_cptr(new packet_t(new memory_c(frame->data, frame->size, true), frame->timecode, frame->duration, frame->firstRef, frame->secondRef)); new_packet->time_factor = MPEG2_PICTURE_TYPE_FRAME == frame->pictureStructure ? 1 : 2; put_sequence_headers_into_codec_state(new_packet); video_packetizer_c::process(new_packet); frame->data = NULL; delete frame; state = m_parser.GetState(); } } while (0 < new_bytes); return FILE_STATUS_MOREDATA; }
gp_tool * tool_color_pick_init ( gp_canvas * canvas ) { create_private_data (); m_priv->cv = canvas; m_priv->tool.button_press = button_press; m_priv->tool.button_release = button_release; m_priv->tool.button_motion = button_motion; m_priv->tool.draw = draw; m_priv->tool.reset = reset; m_priv->tool.destroy = destroy; return &m_priv->tool; }
int mpeg1_2_video_packetizer_c::process_unframed(packet_cptr packet) { int state = m_parser.GetState(); if ((MPV_PARSER_STATE_EOS == state) || (MPV_PARSER_STATE_ERROR == state)) return FILE_STATUS_DONE; auto old_memory = packet->data; auto data_ptr = old_memory->get_buffer(); int new_bytes = old_memory->get_size(); if (packet->has_timecode()) m_parser.AddTimecode(packet->timecode); do { int bytes_to_add = std::min<int>(m_parser.GetFreeBufferSpace(), new_bytes); if (0 < bytes_to_add) { m_parser.WriteData(data_ptr, bytes_to_add); data_ptr += bytes_to_add; new_bytes -= bytes_to_add; } state = m_parser.GetState(); while (MPV_PARSER_STATE_FRAME == state) { auto frame = std::shared_ptr<MPEGFrame>(m_parser.ReadFrame()); if (!frame) break; if (!m_hcodec_private) create_private_data(); packet_cptr new_packet = packet_cptr(new packet_t(new memory_c(frame->data, frame->size, true), frame->timecode, frame->duration, frame->refs[0], frame->refs[1])); new_packet->time_factor = MPEG2_PICTURE_TYPE_FRAME == frame->pictureStructure ? 1 : 2; remove_stuffing_bytes_and_handle_sequence_headers(new_packet); generic_video_packetizer_c::process(new_packet); frame->data = nullptr; state = m_parser.GetState(); } } while (0 < new_bytes); return FILE_STATUS_MOREDATA; }