Exemple #1
0
static void image_info(Scene *scene, ImageUser *iuser, Image *ima, ImBuf *ibuf, char *str, size_t len)
{
    size_t ofs = 0;

    str[0] = 0;
    if (ima == NULL)
        return;

    if (ibuf == NULL) {
        ofs += BLI_strncpy_rlen(str + ofs, IFACE_("Can't Load Image"), len - ofs);
    }
    else {
        if (ima->source == IMA_SRC_MOVIE) {
            ofs += BLI_strncpy_rlen(str + ofs, IFACE_("Movie"), len - ofs);
            if (BKE_image_has_anim(ima))
                ofs += BLI_snprintf(str + ofs, len - ofs, IFACE_(" %d frs"),
                                    IMB_anim_get_duration(((ImageAnim *)ima->anims.first)->anim, IMB_TC_RECORD_RUN));
        }
        else {
            ofs += BLI_strncpy_rlen(str, IFACE_("Image"), len - ofs);
        }

        ofs += BLI_snprintf(str + ofs, len - ofs, IFACE_(": size %d x %d,"), ibuf->x, ibuf->y);

        if (ibuf->rect_float) {
            if (ibuf->channels != 4) {
                ofs += BLI_snprintf(str + ofs, len - ofs, IFACE_("%d float channel(s)"), ibuf->channels);
            }
            else if (ibuf->planes == R_IMF_PLANES_RGBA)
                ofs += BLI_strncpy_rlen(str + ofs, IFACE_(" RGBA float"), len - ofs);
            else
                ofs += BLI_strncpy_rlen(str + ofs, IFACE_(" RGB float"), len - ofs);
        }
        else {
            if (ibuf->planes == R_IMF_PLANES_RGBA)
                ofs += BLI_strncpy_rlen(str + ofs, IFACE_(" RGBA byte"), len - ofs);
            else
                ofs += BLI_strncpy_rlen(str + ofs, IFACE_(" RGB byte"), len - ofs);
        }
        if (ibuf->zbuf || ibuf->zbuf_float)
            ofs += BLI_strncpy_rlen(str + ofs, IFACE_(" + Z"), len - ofs);

        if (ima->source == IMA_SRC_SEQUENCE) {
            const char *file = BLI_last_slash(ibuf->name);
            if (file == NULL)
                file = ibuf->name;
            else
                file++;
            ofs += BLI_snprintf(str + ofs, len - ofs, ", %s", file);
        }
    }

    /* the frame number, even if we cant */
    if (ima->source == IMA_SRC_SEQUENCE) {
        /* don't use iuser->framenr directly because it may not be updated if auto-refresh is off */
        const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0, NULL);
        ofs += BLI_snprintf(str + ofs, len - ofs, IFACE_(", Frame: %d"), framenr);
    }
}
static int rna_Image_frame_duration_get(PointerRNA *ptr)
{
	Image *ima = ptr->id.data;
	int duration = 1;

	if (BKE_image_has_anim(ima)) {
		duration = IMB_anim_get_duration(((ImageAnim *)ima->anims.first)->anim, IMB_TC_RECORD_RUN);
	}
	else {
		/* acquire ensures ima->anim is set, if possible! */
		void *lock;
		ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
		BKE_image_release_ibuf(ima, ibuf, lock);
	}

	return duration;
}