|
|
@@ -3,6 +3,7 @@ |
|
|
|
* Copyright (c) 2012 AvxSynth Team |
|
|
|
* |
|
|
|
* This file is part of FFmpeg |
|
|
|
* |
|
|
|
* FFmpeg is free software; you can redistribute it and/or |
|
|
|
* modify it under the terms of the GNU Lesser General Public |
|
|
|
* License as published by the Free Software Foundation; either |
|
|
@@ -18,8 +19,11 @@ |
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
|
|
*/ |
|
|
|
|
|
|
|
#include "libavutil/attributes.h" |
|
|
|
#include "libavutil/internal.h" |
|
|
|
|
|
|
|
#include "libavcodec/internal.h" |
|
|
|
|
|
|
|
#include "avformat.h" |
|
|
|
#include "internal.h" |
|
|
|
#include "config.h" |
|
|
@@ -245,7 +249,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
|
|
|
|
switch (avs->vi->pixel_type) { |
|
|
|
#ifdef USING_AVISYNTH |
|
|
|
/* 10~16-bit YUV pix_fmts (AviSynth+) */ |
|
|
|
/* 10~16-bit YUV pix_fmts (AviSynth+) */ |
|
|
|
case AVS_CS_YUV444P10: |
|
|
|
st->codecpar->format = AV_PIX_FMT_YUV444P10; |
|
|
|
planar = 1; |
|
|
@@ -294,7 +298,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
st->codecpar->format = AV_PIX_FMT_YUV420P16; |
|
|
|
planar = 1; |
|
|
|
break; |
|
|
|
/* 8~16-bit YUV pix_fmts with Alpha (AviSynth+) */ |
|
|
|
/* 8~16-bit YUV pix_fmts with Alpha (AviSynth+) */ |
|
|
|
case AVS_CS_YUVA444: |
|
|
|
st->codecpar->format = AV_PIX_FMT_YUVA444P; |
|
|
|
planar = 4; |
|
|
@@ -331,7 +335,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
st->codecpar->format = AV_PIX_FMT_YUVA420P16; |
|
|
|
planar = 4; |
|
|
|
break; |
|
|
|
/* Planar RGB pix_fmts (AviSynth+) */ |
|
|
|
/* Planar RGB pix_fmts (AviSynth+) */ |
|
|
|
case AVS_CS_RGBP: |
|
|
|
st->codecpar->format = AV_PIX_FMT_GBRP; |
|
|
|
planar = 3; |
|
|
@@ -352,7 +356,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
st->codecpar->format = AV_PIX_FMT_GBRP16; |
|
|
|
planar = 3; |
|
|
|
break; |
|
|
|
/* Planar RGB pix_fmts with Alpha (AviSynth+) */ |
|
|
|
/* Planar RGB pix_fmts with Alpha (AviSynth+) */ |
|
|
|
case AVS_CS_RGBAP: |
|
|
|
st->codecpar->format = AV_PIX_FMT_GBRAP; |
|
|
|
planar = 5; |
|
|
@@ -369,12 +373,12 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
st->codecpar->format = AV_PIX_FMT_GBRAP16; |
|
|
|
planar = 5; |
|
|
|
break; |
|
|
|
/* GRAY16 (AviSynth+) */ |
|
|
|
/* GRAY16 (AviSynth+) */ |
|
|
|
case AVS_CS_Y16: |
|
|
|
st->codecpar->format = AV_PIX_FMT_GRAY16; |
|
|
|
planar = 2; |
|
|
|
break; |
|
|
|
/* pix_fmts added in AviSynth 2.6 */ |
|
|
|
/* pix_fmts added in AviSynth 2.6 */ |
|
|
|
case AVS_CS_YV24: |
|
|
|
st->codecpar->format = AV_PIX_FMT_YUV444P; |
|
|
|
planar = 1; |
|
|
@@ -391,7 +395,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
st->codecpar->format = AV_PIX_FMT_GRAY8; |
|
|
|
planar = 2; |
|
|
|
break; |
|
|
|
/* 16-bit packed RGB pix_fmts (AviSynth+) */ |
|
|
|
/* 16-bit packed RGB pix_fmts (AviSynth+) */ |
|
|
|
case AVS_CS_BGR48: |
|
|
|
st->codecpar->format = AV_PIX_FMT_BGR48; |
|
|
|
break; |
|
|
@@ -399,7 +403,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) |
|
|
|
st->codecpar->format = AV_PIX_FMT_BGRA64; |
|
|
|
break; |
|
|
|
#endif |
|
|
|
/* AviSynth 2.5 and AvxSynth pix_fmts */ |
|
|
|
/* AviSynth 2.5 and AvxSynth pix_fmts */ |
|
|
|
case AVS_CS_BGR24: |
|
|
|
st->codecpar->format = AV_PIX_FMT_BGR24; |
|
|
|
break; |
|
|
@@ -606,6 +610,7 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, |
|
|
|
const unsigned char *src_p; |
|
|
|
int n, i, plane, rowsize, planeheight, pitch, bits; |
|
|
|
const char *error; |
|
|
|
int avsplus av_unused; |
|
|
|
|
|
|
|
if (avs->curr_frame >= avs->vi->num_frames) |
|
|
|
return AVERROR_EOF; |
|
|
@@ -618,9 +623,6 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, |
|
|
|
#ifdef USING_AVISYNTH |
|
|
|
/* Detect whether we're using AviSynth 2.6 or AviSynth+ by |
|
|
|
* looking for whether avs_is_planar_rgb exists. */ |
|
|
|
|
|
|
|
int avsplus; |
|
|
|
|
|
|
|
if (GetProcAddress(avs_library.library, "avs_is_planar_rgb") == NULL) |
|
|
|
avsplus = 0; |
|
|
|
else |
|
|
@@ -683,7 +685,7 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef USING_AVISYNTH |
|
|
|
/* Flip Planar RGB video. */ |
|
|
|
/* Flip Planar RGB video */ |
|
|
|
if (avsplus && (avs_library.avs_is_planar_rgb(avs->vi) || |
|
|
|
avs_library.avs_is_planar_rgba(avs->vi))) { |
|
|
|
src_p = src_p + (planeheight - 1) * pitch; |
|
|
|