Skip to content

Commit

Permalink
Report invalid param of SelectEvery to user.
Browse files Browse the repository at this point in the history
  • Loading branch information
pylorak committed Mar 13, 2015
1 parent 7d5f276 commit 3cb1122
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 16 deletions.
12 changes: 6 additions & 6 deletions avs_core/convert/convert_planar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1822,13 +1822,13 @@ ConvertToPlanarGeneric::ConvertToPlanarGeneric(PClip src, int dst_space, bool in
PClip *tbUsource = new PClip[2]; // Interleave()::~Interleave() will delete these
PClip *tbVsource = new PClip[2];

tbUsource[0] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 0), uv_width, uv_height, tUsubSampling, filter, env);
tbUsource[1] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 1), uv_width, uv_height, bUsubSampling, filter, env);
tbVsource[0] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 0), uv_width, uv_height, tVsubSampling, filter, env);
tbVsource[1] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 1), uv_width, uv_height, bVsubSampling, filter, env);
tbUsource[0] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 0, env), uv_width, uv_height, tUsubSampling, filter, env);
tbUsource[1] = FilteredResize::CreateResize(new SelectEvery(Usource, 2, 1, env), uv_width, uv_height, bUsubSampling, filter, env);
tbVsource[0] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 0, env), uv_width, uv_height, tVsubSampling, filter, env);
tbVsource[1] = FilteredResize::CreateResize(new SelectEvery(Vsource, 2, 1, env), uv_width, uv_height, bVsubSampling, filter, env);

Usource = new SelectEvery(new DoubleWeaveFields(new Interleave(2, tbUsource, env)), 2, 0);
Vsource = new SelectEvery(new DoubleWeaveFields(new Interleave(2, tbVsource, env)), 2, 0);
Usource = new SelectEvery(new DoubleWeaveFields(new Interleave(2, tbUsource, env)), 2, 0, env);
Vsource = new SelectEvery(new DoubleWeaveFields(new Interleave(2, tbVsource, env)), 2, 0, env);
}
else {
AVSValue UsubSampling[4] = { ChrOffset(P, xsIn, xdInU, xsOut, xdOutU), ChrOffset(P, ysIn, ydInU, ysOut, ydOutU), AVSValue(), AVSValue() };
Expand Down
17 changes: 10 additions & 7 deletions avs_core/filters/field.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -650,9 +650,12 @@ AVSValue __cdecl Interleave::Create(AVSValue args, void*, IScriptEnvironment* en
*********************************/


SelectEvery::SelectEvery(PClip _child, int _every, int _from)
SelectEvery::SelectEvery(PClip _child, int _every, int _from, IScriptEnvironment* env)
: NonCachedGenericVideoFilter(_child), every(_every), from(_from)
{
if (_every == 0)
env->ThrowError("Parameter 'every' of SelectEvery cannot be zero.");

vi.MulDivFPS(1, every);
vi.num_frames = (vi.num_frames-1-from) / every + 1;
}
Expand All @@ -662,11 +665,11 @@ AVSValue __cdecl SelectEvery::Create(AVSValue args, void*, IScriptEnvironment* e
{
const int num_vals = args[2].ArraySize();
if (num_vals <= 1)
return new SelectEvery(args[0].AsClip(), args[1].AsInt(), num_vals>0 ? args[2][0].AsInt() : 0);
return new SelectEvery(args[0].AsClip(), args[1].AsInt(), num_vals>0 ? args[2][0].AsInt() : 0, env);
else {
PClip* child_array = new PClip[num_vals];
for (int i=0; i<num_vals; ++i)
child_array[i] = new SelectEvery(args[0].AsClip(), args[1].AsInt(), args[2][i].AsInt());
child_array[i] = new SelectEvery(args[0].AsClip(), args[1].AsInt(), args[2][i].AsInt(), env);
return new Interleave(num_vals, child_array, env);
}
}
Expand Down Expand Up @@ -839,24 +842,24 @@ static AVSValue __cdecl Create_Weave(AVSValue args, void*, IScriptEnvironment* e
PClip clip = args[0].AsClip();
if (!clip->GetVideoInfo().IsFieldBased())
env->ThrowError("Weave: Weave should be applied on field-based material: use AssumeFieldBased() beforehand");
return new SelectEvery(Create_DoubleWeave(args, 0, env).AsClip(), 2, 0);
return new SelectEvery(Create_DoubleWeave(args, 0, env).AsClip(), 2, 0, env);
}


static AVSValue __cdecl Create_Pulldown(AVSValue args, void*, IScriptEnvironment* env)
{
PClip clip = args[0].AsClip();
PClip* child_array = new PClip[2];
child_array[0] = new SelectEvery(clip, 5, args[1].AsInt() % 5);
child_array[1] = new SelectEvery(clip, 5, args[2].AsInt() % 5);
child_array[0] = new SelectEvery(clip, 5, args[1].AsInt() % 5, env);
child_array[1] = new SelectEvery(clip, 5, args[2].AsInt() % 5, env);
return new AssumeFrameBased(new Interleave(2, child_array, env));
}


static AVSValue __cdecl Create_SwapFields(AVSValue args, void*, IScriptEnvironment* env)
{
return new SelectEvery(new DoubleWeaveFields(new ComplementParity(
new SeparateFields(args[0].AsClip(), env))), 2, 0);
new SeparateFields(args[0].AsClip(), env))), 2, 0, env);
}


Expand Down
6 changes: 3 additions & 3 deletions avs_core/filters/field.h
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ class SelectEvery : public NonCachedGenericVideoFilter
**/
{
public:
SelectEvery(PClip _child, int _every, int _from);
SelectEvery(PClip _child, int _every, int _from, IScriptEnvironment* env);

inline PVideoFrame __stdcall GetFrame(int n, IScriptEnvironment* env) {
return child->GetFrame(n*every+from, env);
Expand All @@ -368,11 +368,11 @@ class SelectEvery : public NonCachedGenericVideoFilter
static AVSValue __cdecl Create(AVSValue args, void*, IScriptEnvironment* env);

inline static AVSValue __cdecl Create_SelectEven(AVSValue args, void*, IScriptEnvironment* env) {
return new SelectEvery(args[0].AsClip(), 2, 0);
return new SelectEvery(args[0].AsClip(), 2, 0, env);
}

inline static AVSValue __cdecl Create_SelectOdd(AVSValue args, void*, IScriptEnvironment* env) {
return new SelectEvery(args[0].AsClip(), 2, 1);
return new SelectEvery(args[0].AsClip(), 2, 1, env);
}

private:
Expand Down

0 comments on commit 3cb1122

Please sign in to comment.