X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Favisynth.c;h=55a2efd884e287e8b3aacc8f339235059049a37a;hb=347920ca2102d762e4713f101a2e75811791e2b3;hp=250a489321edc6b150e079d2c960c47be48f6b37;hpb=409e684e79b6ee0c511292326f09b13fe230e58e;p=ffmpeg diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 250a489321e..55a2efd884e 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -123,7 +123,8 @@ static av_cold int avisynth_load_library(void) return AVERROR_UNKNOWN; #define LOAD_AVS_FUNC(name, continue_on_fail) \ - avs_library.name = dlsym(avs_library.library, #name); \ + avs_library.name = (name ## _func) \ + dlsym(avs_library.library, #name); \ if (!continue_on_fail && !avs_library.name) \ goto fail; @@ -323,6 +324,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) st->codecpar->format = AV_PIX_FMT_YUVA420P10; planar = 4; break; + case AVS_CS_YUVA422P12: + st->codecpar->format = AV_PIX_FMT_YUVA422P12; + planar = 4; + break; case AVS_CS_YUVA444P16: st->codecpar->format = AV_PIX_FMT_YUVA444P16; planar = 4; @@ -356,6 +361,11 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) st->codecpar->format = AV_PIX_FMT_GBRP16; planar = 3; break; + /* Single precision floating point Planar RGB (AviSynth+) */ + case AVS_CS_RGBPS: + st->codecpar->format = AV_PIX_FMT_GBRPF32; + planar = 3; + break; /* Planar RGB pix_fmts with Alpha (AviSynth+) */ case AVS_CS_RGBAP: st->codecpar->format = AV_PIX_FMT_GBRAP; @@ -373,11 +383,33 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) st->codecpar->format = AV_PIX_FMT_GBRAP16; planar = 5; break; - /* GRAY16 (AviSynth+) */ + /* Single precision floating point Planar RGB with Alpha (AviSynth+) */ + case AVS_CS_RGBAPS: + st->codecpar->format = AV_PIX_FMT_GBRAPF32; + planar = 5; + break; + /* 10~16-bit gray pix_fmts (AviSynth+) */ + case AVS_CS_Y10: + st->codecpar->format = AV_PIX_FMT_GRAY10; + planar = 2; + break; + case AVS_CS_Y12: + st->codecpar->format = AV_PIX_FMT_GRAY12; + planar = 2; + break; + case AVS_CS_Y14: + st->codecpar->format = AV_PIX_FMT_GRAY14; + planar = 2; + break; case AVS_CS_Y16: st->codecpar->format = AV_PIX_FMT_GRAY16; planar = 2; break; + /* Single precision floating point gray (AviSynth+) */ + case AVS_CS_Y32: + st->codecpar->format = AV_PIX_FMT_GRAYF32; + planar = 2; + break; /* pix_fmts added in AviSynth 2.6 */ case AVS_CS_YV24: st->codecpar->format = AV_PIX_FMT_YUV444P; @@ -608,7 +640,7 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, AVS_VideoFrame *frame; unsigned char *dst_p; const unsigned char *src_p; - int n, i, plane, rowsize, planeheight, pitch, bits; + int n, i, plane, rowsize, planeheight, pitch, bits, ret; const char *error; int avsplus av_unused; @@ -644,8 +676,8 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, if (!pkt->size) return AVERROR_UNKNOWN; - if (av_new_packet(pkt, pkt->size) < 0) - return AVERROR(ENOMEM); + if ((ret = av_new_packet(pkt, pkt->size)) < 0) + return ret; pkt->pts = n; pkt->dts = n; @@ -707,7 +739,7 @@ static int avisynth_read_packet_audio(AVFormatContext *s, AVPacket *pkt, { AviSynthContext *avs = s->priv_data; AVRational fps, samplerate; - int samples; + int samples, ret; int64_t n; const char *error; @@ -750,8 +782,8 @@ static int avisynth_read_packet_audio(AVFormatContext *s, AVPacket *pkt, if (!pkt->size) return AVERROR_UNKNOWN; - if (av_new_packet(pkt, pkt->size) < 0) - return AVERROR(ENOMEM); + if ((ret = av_new_packet(pkt, pkt->size)) < 0) + return ret; pkt->pts = n; pkt->dts = n;