Add BT.601/BT.709 guessing to the Avisynth video provider along with support for Force BT.601

Originally committed to SVN as r6707.
This commit is contained in:
Thomas Goyne 2012-04-16 23:55:15 +00:00
parent c28a2d33ed
commit eceac482d0
2 changed files with 28 additions and 3 deletions

View file

@ -38,6 +38,8 @@
#ifdef WITH_AVISYNTH #ifdef WITH_AVISYNTH
#include "video_provider_avs.h"
#ifndef AGI_PRE #ifndef AGI_PRE
#include <wx/filename.h> #include <wx/filename.h>
#include <wx/msw/registry.h> #include <wx/msw/registry.h>
@ -47,11 +49,12 @@
#include <vfw.h> #include <vfw.h>
#endif #endif
#include <libaegisub/log.h>
#include "charset_conv.h" #include "charset_conv.h"
#include "compat.h" #include "compat.h"
#include <libaegisub/log.h> #include "main.h"
#include "standard_paths.h" #include "standard_paths.h"
#include "video_provider_avs.h"
AvisynthVideoProvider::AvisynthVideoProvider(wxString filename) AvisynthVideoProvider::AvisynthVideoProvider(wxString filename)
: last_fnum(-1) : last_fnum(-1)
@ -152,7 +155,27 @@ file_exit:
if (!script.IsClip() || !script.AsClip()->GetVideoInfo().HasVideo()) if (!script.IsClip() || !script.AsClip()->GetVideoInfo().HasVideo())
throw VideoNotSupported("No usable video found"); throw VideoNotSupported("No usable video found");
RGB32Video = (avs.GetEnv()->Invoke("Cache", avs.GetEnv()->Invoke("ConvertToRGB32", script))).AsClip(); vi = script.AsClip()->GetVideoInfo();
if (!vi.IsRGB()) {
/// @todo maybe read ColorMatrix hints for d2v files?
AVSValue args[2] = { script, "Rec601" };
if (!OPT_GET("Provider/Video/FFmpegSource/Force BT.601")->GetBool() && (vi.width > 1024 || vi.height >= 600)) {
args[1] = "Rec709";
colorspace = "BT.709";
}
else
colorspace = "BT.601";
const char *argnames[2] = { 0, "matrix" };
script = avs.GetEnv()->Invoke("ConvertToRGB32", AVSValue(args, 2), argnames);
}
else if (extension != ".avs")
colorspace = "RGB";
// Don't set the colorspace to RGB if we're opening an Avisynth script
// as we can't tell RGB source video apart from a script that happens
// to convert to rgb
RGB32Video = avs.GetEnv()->Invoke("Cache", script).AsClip();
vi = RGB32Video->GetVideoInfo(); vi = RGB32Video->GetVideoInfo();
fps = (double)vi.fps_numerator / vi.fps_denominator; fps = (double)vi.fps_numerator / vi.fps_denominator;
} }

View file

@ -52,6 +52,7 @@ class AvisynthVideoProvider: public VideoProvider {
agi::vfr::Framerate fps; agi::vfr::Framerate fps;
std::vector<int> KeyFrames; std::vector<int> KeyFrames;
wxString warning; wxString warning;
wxString colorspace;
PClip RGB32Video; PClip RGB32Video;
VideoInfo vi; VideoInfo vi;
@ -74,5 +75,6 @@ public:
std::vector<int> GetKeyFrames() const { return KeyFrames; }; std::vector<int> GetKeyFrames() const { return KeyFrames; };
wxString GetWarning() const { return warning; } wxString GetWarning() const { return warning; }
wxString GetDecoderName() const { return decoderName; } wxString GetDecoderName() const { return decoderName; }
wxString GetColorSpace() const { return colorspace; }
}; };
#endif #endif