0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 12:02:23 +02:00

image_writer: allow specifying pixel formats for image writers

This commit is contained in:
wm4 2012-08-06 17:47:28 +02:00
parent e7da13ed86
commit 4de99d9c0c

View File

@ -59,6 +59,7 @@ struct image_writer_ctx {
struct img_writer {
const char *file_ext;
int (*write)(struct image_writer_ctx *ctx, mp_image_t *image, FILE *fp);
int *pixfmts;
};
static int write_png(struct image_writer_ctx *ctx, mp_image_t *image, FILE *fp)
@ -207,7 +208,6 @@ int write_image(struct mp_image *image, const struct mp_csp_details *csp,
const struct image_writer_opts *opts, const char *filename)
{
struct mp_image *allocated_image = NULL;
const int destfmt = IMGFMT_RGB24;
struct image_writer_opts defs = image_writer_opts_defaults;
bool is_anamorphic = image->w != image->width || image->h != image->height;
@ -215,7 +215,18 @@ int write_image(struct mp_image *image, const struct mp_csp_details *csp,
opts = &defs;
const struct img_writer *writer = get_writer(opts);
struct image_writer_ctx ctx = { opts };
struct image_writer_ctx ctx = { opts, writer };
int destfmt = IMGFMT_RGB24;
if (writer->pixfmts) {
destfmt = writer->pixfmts[0]; // default to first pixel format
for (int *fmt = writer->pixfmts; *fmt; fmt++) {
if (*fmt == image->imgfmt) {
destfmt = *fmt;
break;
}
}
}
if (image->imgfmt != destfmt || is_anamorphic) {
struct mp_image *dst = alloc_mpi(image->w, image->h, destfmt);