// Create a whole 'frame' from VP8 (+ alpha) or lossless. static int SynthesizeFrame(const WebPDemuxer* const dmux, const Frame* const first_frame, int fragment_num, WebPIterator* const iter) { const uint8_t* const mem_buf = dmux->mem_.buf_; int num_fragments; size_t payload_size = 0; const Frame* const fragment = GetFragment(first_frame, fragment_num, &num_fragments); const uint8_t* const payload = GetFramePayload(mem_buf, fragment, &payload_size); if (payload == NULL) return 0; assert(first_frame != NULL); iter->frame_num = first_frame->frame_num_; iter->num_frames = dmux->num_frames_; iter->fragment_num = fragment_num; iter->num_fragments = num_fragments; iter->x_offset = fragment->x_offset_; iter->y_offset = fragment->y_offset_; iter->width = fragment->width_; iter->height = fragment->height_; iter->has_alpha = fragment->has_alpha_; iter->duration = fragment->duration_; iter->dispose_method = fragment->dispose_method_; iter->blend_method = fragment->blend_method_; iter->complete = fragment->complete_; iter->fragment.bytes = payload; iter->fragment.size = payload_size; // TODO(jzern): adjust offsets for 'FRGM's embedded in 'ANMF's return 1; }
// Create a whole 'frame' from VP8 (+ alpha) or lossless. static int SynthesizeFrame(const WebPDemuxer* const dmux, const Frame* const first_frame, int tile_num, WebPIterator* const iter) { const uint8_t* const mem_buf = dmux->mem_.buf_; int num_tiles; size_t payload_size = 0; const Frame* const tile = GetTile(first_frame, tile_num, &num_tiles); const uint8_t* const payload = GetFramePayload(mem_buf, tile, &payload_size); if (payload == NULL) return 0; iter->frame_num_ = first_frame->frame_num_; iter->num_frames_ = dmux->num_frames_; iter->tile_num_ = tile_num; iter->num_tiles_ = num_tiles; iter->x_offset_ = tile->x_offset_; iter->y_offset_ = tile->y_offset_; iter->width_ = tile->width_; iter->height_ = tile->height_; iter->duration_ = tile->duration_; iter->complete_ = tile->complete_; iter->tile_.bytes_ = payload; iter->tile_.size_ = payload_size; // TODO(jzern): adjust offsets for 'TILE's embedded in 'FRM 's return 1; }
// Create a whole 'frame' from VP8 (+ alpha) or lossless. static int SynthesizeFrame(const WebPDemuxer* const dmux, const Frame* const frame, WebPIterator* const iter) { const uint8_t* const mem_buf = dmux->mem_.buf_; size_t payload_size = 0; const uint8_t* const payload = GetFramePayload(mem_buf, frame, &payload_size); if (payload == NULL) return 0; assert(frame != NULL); iter->frame_num = frame->frame_num_; iter->num_frames = dmux->num_frames_; iter->x_offset = frame->x_offset_; iter->y_offset = frame->y_offset_; iter->width = frame->width_; iter->height = frame->height_; iter->has_alpha = frame->has_alpha_; iter->duration = frame->duration_; iter->dispose_method = frame->dispose_method_; iter->blend_method = frame->blend_method_; iter->complete = frame->complete_; iter->fragment.bytes = payload; iter->fragment.size = payload_size; return 1; }
void FFrameGrabberProtocol::CaptureFrame(const FFrameMetrics& FrameMetrics, const ICaptureProtocolHost& Host) { FrameGrabber->CaptureThisFrame(GetFramePayload(FrameMetrics, Host)); }