示例#1
0
文件: tkiMisc.c 项目: qyqx/scotty
char* 
findfile (Tcl_Interp *interp, char *name)
{
    int i;
    char *library, *file;
    static Tcl_DString *dsPtr = NULL;
    static char *dirs[] = { "/bitmaps/", "/site/", "/apps/", "/", NULL };

    if (! dsPtr) {
	dsPtr = (Tcl_DString *) ckalloc(sizeof(Tcl_DString));
	Tcl_DStringInit(dsPtr);
    }

    file = Tcl_TranslateFileName(interp, name, dsPtr);
    if (file && access(file, R_OK) == 0) {
	Tcl_ResetResult(interp);
	return FixPath(file);
    }

    buffersize(strlen(name)+20);
    strcpy(buffer, "~/.tkined/");
    strcat(buffer, name);
    file = Tcl_TranslateFileName(interp, buffer, dsPtr);
    if (file && access(file, R_OK) == 0) {
	Tcl_ResetResult(interp);
	return FixPath(file);
    }

    library = Tcl_GetVar2(interp, "tkined", "library", TCL_GLOBAL_ONLY);
    if (! library) {
	Tcl_ResetResult(interp);
	return (char *) NULL;
    }
    
    buffersize(strlen(library)+strlen(name)+20);
    for (i = 0; dirs[i]; i++) {
	strcpy(buffer, library);
	strcat(buffer, dirs[i]);
	strcat(buffer, name);
	file = Tcl_TranslateFileName(interp, buffer, dsPtr);
	if (file && access(file, R_OK) == 0) {
	    Tcl_ResetResult(interp);
	    return FixPath(file);
	}
    }

    return (char *) NULL;
}
示例#2
0
void
OpenDDS::DCPS::ReliableMulticast::detail::ReceiverLogic::buffer_packet(
  const Packet& p,
  PacketVector& delivered
  )
{
  buffer_.insert(std::make_pair(p.id_, p));

  if (buffersize() == receiver_buffer_size_)
  {
    handle_unreliable_operation(delivered);
  }
}
示例#3
0
int AVPictureFill(AVPicture *pic, const VideoFrame *frame, AVPixelFormat fmt)
{
    if (fmt == AV_PIX_FMT_NONE)
    {
        fmt = FrameTypeToPixelFormat(frame->codec);
    }

    avpicture_fill(pic, frame->buf, fmt, frame->width, frame->height);
    pic->data[1] = frame->buf + frame->offsets[1];
    pic->data[2] = frame->buf + frame->offsets[2];
    pic->linesize[0] = frame->pitches[0];
    pic->linesize[1] = frame->pitches[1];
    pic->linesize[2] = frame->pitches[2];
    return (int)buffersize(frame->codec, frame->width, frame->height);
}
示例#4
0
void
TAO::DCPS::ReliableMulticast::detail::SenderLogic::buffer_packet(
  const TAO::DCPS::ReliableMulticast::detail::Packet& p,
  PacketVector& delivered
  )
{
  TAO::DCPS::ReliableMulticast::detail::Packet tmp(p);

  if (buffersize() == sender_history_size_)
  {
    buffer_.erase(current_id_ - sender_history_size_);
  }
  tmp.id_ = current_id_;
  ++current_id_;
  buffer_.insert(std::make_pair(tmp.id_, tmp));
  delivered.push_back(tmp);
}
示例#5
0
bool VideoOutputOpenGL::CreatePauseFrame(void)
{
    int size = buffersize(FMT_YV12,
                          vbuffers.GetScratchFrame()->width,
                          vbuffers.GetScratchFrame()->height);
    unsigned char *buffer = (unsigned char *)av_malloc(size);
    init(&av_pause_frame, FMT_YV12,
         buffer,
         vbuffers.GetScratchFrame()->width,
         vbuffers.GetScratchFrame()->height,
         size);

    av_pause_frame.frameNumber = vbuffers.GetScratchFrame()->frameNumber;

    if (!av_pause_frame.buf)
        return false;

    clear(&av_pause_frame);
    return true;
}
void PrivateDecoderCrystalHD::FillFrame(BC_DTS_PROC_OUT *out)
{
    bool second_field = false;
    if (m_frame)
    {
        if (out->PicInfo.picture_number != m_frame->frameNumber)
        {
            LOG(VB_PLAYBACK, LOG_WARNING, LOC + "Missing second field");
            AddFrameToQueue();
        }
        else
        {
            second_field = true;
        }
    }

    int in_width   = out->PicInfo.width;
    int in_height  = out->PicInfo.height;
    int out_width  = (in_width + 15) & (~0xf);
    int out_height = in_height;
    uint8_t* src   = out->Ybuff;

    if (!m_frame)
    {
        int size = buffersize(FMT_YV12, out_width, out_height);
        unsigned char* buf = (unsigned char*)av_malloc(size);
        m_frame = new VideoFrame();
        init(m_frame, FMT_YV12, buf, out_width, out_height, size);
        m_frame->timecode = (int64_t)out->PicInfo.timeStamp;
        m_frame->frameNumber = out->PicInfo.picture_number;
    }

    // line 21 data (608/708 captions)
    // this appears to be unimplemented in the driver
    if (out->UserData && out->UserDataSz)
    {
        int size = out->UserDataSz > 1024 ? 1024 : out->UserDataSz;
        m_frame->priv[0] = (unsigned char*)av_malloc(size);
        memcpy(m_frame->priv[0], out->UserData, size);
        m_frame->qstride = size; // don't try this at home
    }

    AVPixelFormat out_fmt = AV_PIX_FMT_YUV420P;
    AVPixelFormat in_fmt  = bcmpixfmt_to_pixfmt(m_pix_fmt);
    AVPicture img_in;

    avpicture_fill(&img_in, src, in_fmt, in_width, in_height);

    if (!(out->PicInfo.flags & VDEC_FLAG_INTERLACED_SRC))
    {
        m_copyCtx.Copy(m_frame, &img_in, in_fmt);
        m_frame->interlaced_frame = 0;
        AddFrameToQueue();
    }
    else
    {
        AVPicture img_out;

        AVPictureFill(&img_out, m_frame);
        img_out.linesize[0] *= 2;
        img_out.linesize[1] *= 2;
        img_out.linesize[2] *= 2;
        m_frame->top_field_first = out->PicInfo.pulldown == vdecTopBottom;
        int field = out->PoutFlags & BC_POUT_FLAGS_FLD_BOT;
        if (field)
        {
            img_out.data[0] += out_width;
            img_out.data[1] += out_width >> 1;
            img_out.data[2] += out_width >> 1;
        }
        m_copyCtx.Copy(&img_out, out_fmt, &img_in, in_fmt, in_width, in_height / 2);
        if (second_field)
            AddFrameToQueue();
    }
}