- /* Ensure that the row fits in the image. */
- if (img->height - img->currenty <= yval || xval >= img->width) {
- lbx_errno = LBX_EFORMAT;
+ return new;
+}
+
+int lbx_img_seek(struct lbx_image *pub, unsigned frame)
+{
+ struct lbx_image_priv *img = (struct lbx_image_priv *)pub;
+
+ if (frame >= pub->frames) {
+ lbx_error_raise(LBX_EINVAL);
+ return -1;
+ }
+
+ if (img->fops->seek(img->f, img->offsets[frame], SEEK_SET)) {
+ return -1;
+ }
+
+ if (!(img->flags & FLAG_RAW)) {
+ unsigned char buf[4];
+
+ /* Read frame header */
+ if (img->fops->read(buf, 4, img->f) != 4) {
+ if (img->fops->eof(img->f))
+ lbx_error_raise(LBX_EEOF);