Make sure that 748x574 resolution resolves to 576p
This commit is contained in:
parent
7a7af2b386
commit
e10ef895cc
|
@ -53,6 +53,7 @@ import net.filebot.Settings;
|
|||
import net.filebot.hash.HashType;
|
||||
import net.filebot.media.MetaAttributes;
|
||||
import net.filebot.media.NamingStandard;
|
||||
import net.filebot.media.VideoFormat;
|
||||
import net.filebot.mediainfo.ImageMetadata;
|
||||
import net.filebot.mediainfo.MediaInfo;
|
||||
import net.filebot.mediainfo.MediaInfo.StreamKind;
|
||||
|
@ -352,27 +353,11 @@ public class MediaBindingBean {
|
|||
|
||||
@Define("vf")
|
||||
public String getVideoFormat() {
|
||||
int width = Integer.parseInt(getMediaInfo(StreamKind.Video, 0, "Width"));
|
||||
int height = Integer.parseInt(getMediaInfo(StreamKind.Video, 0, "Height"));
|
||||
int w = Integer.parseInt(getMediaInfo(StreamKind.Video, 0, "Width"));
|
||||
int h = Integer.parseInt(getMediaInfo(StreamKind.Video, 0, "Height"));
|
||||
|
||||
int[] ws = new int[] { 15360, 7680, 3840, 1920, 1280, 1024, 854, 748, 720, 688, 512, 320 };
|
||||
int[] hs = new int[] { 8640, 4320, 2160, 1080, 720, 576, 576, 480, 480, 360, 240, 240 };
|
||||
|
||||
int ns = 0;
|
||||
|
||||
for (int i = 0; i < ws.length - 1; i++) {
|
||||
if ((width >= ws[i] || height >= hs[i]) || (width > ws[i + 1] && height > hs[i + 1])) {
|
||||
ns = hs[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ns > 0) {
|
||||
// e.g. 720p, nobody actually wants files to be tagged as interlaced, e.g. 720i
|
||||
return String.format("%dp", ns);
|
||||
}
|
||||
|
||||
return null; // video too small
|
||||
// e.g. 720p, nobody actually wants files to be tagged as interlaced, e.g. 720i
|
||||
return String.format("%dp", VideoFormat.DEFAULT_GROUPS.guessFormat(w, h));
|
||||
}
|
||||
|
||||
@Define("hpi")
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package net.filebot.media;
|
||||
|
||||
import static java.util.ResourceBundle.*;
|
||||
import static net.filebot.util.RegularExpressions.*;
|
||||
|
||||
public class VideoFormat {
|
||||
|
||||
public static final VideoFormat DEFAULT_GROUPS = new VideoFormat();
|
||||
|
||||
private final int[] ws;
|
||||
private final int[] hs;
|
||||
|
||||
public VideoFormat() {
|
||||
this.ws = getIntArrayProperty("resolution.steps.w");
|
||||
this.hs = getIntArrayProperty("resolution.steps.h");
|
||||
}
|
||||
|
||||
public int guessFormat(int width, int height) {
|
||||
int ns = 0;
|
||||
|
||||
for (int i = 0; i < ws.length - 1; i++) {
|
||||
if ((width >= ws[i] || height >= hs[i]) || (width > ws[i + 1] && height > hs[i + 1])) {
|
||||
ns = hs[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ns > 0) {
|
||||
return ns;
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException(String.format("Illegal resolution: [%d, %d]", width, height));
|
||||
}
|
||||
|
||||
private int[] getIntArrayProperty(String key) {
|
||||
return SPACE.splitAsStream(getBundle(getClass().getName()).getString(key)).mapToInt(Integer::parseInt).toArray();
|
||||
}
|
||||
|
||||
}
|
|
@ -8,6 +8,7 @@ import net.filebot.format.ExpressionFormatTest;
|
|||
import net.filebot.hash.VerificationFormatTest;
|
||||
import net.filebot.media.MediaDetectionTest;
|
||||
import net.filebot.media.ReleaseInfoTest;
|
||||
import net.filebot.media.VideoFormatTest;
|
||||
import net.filebot.mediainfo.MediaInfoTest;
|
||||
import net.filebot.similarity.EpisodeMetricsTest;
|
||||
import net.filebot.similarity.SimilarityTestSuite;
|
||||
|
@ -18,7 +19,7 @@ import net.filebot.util.UtilTestSuite;
|
|||
import net.filebot.web.WebTestSuite;
|
||||
|
||||
@RunWith(Suite.class)
|
||||
@SuiteClasses({ ExpressionFormatTest.class, VerificationFormatTest.class, MatchModelTest.class, SupportDialogTest.class, EpisodeMetricsTest.class, ReleaseInfoTest.class, MediaDetectionTest.class, MediaInfoTest.class, SimilarityTestSuite.class, WebTestSuite.class, SubtitleReaderTestSuite.class, UtilTestSuite.class })
|
||||
@SuiteClasses({ ExpressionFormatTest.class, VerificationFormatTest.class, MatchModelTest.class, SupportDialogTest.class, EpisodeMetricsTest.class, ReleaseInfoTest.class, VideoFormatTest.class, MediaDetectionTest.class, MediaInfoTest.class, SimilarityTestSuite.class, WebTestSuite.class, SubtitleReaderTestSuite.class, UtilTestSuite.class })
|
||||
public class AllTests {
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package net.filebot.media;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class VideoFormatTest {
|
||||
|
||||
VideoFormat vf = new VideoFormat();
|
||||
|
||||
@Test
|
||||
public void trickyResolutions() {
|
||||
assertEquals(1080, vf.guessFormat(1920, 1040));
|
||||
assertEquals(720, vf.guessFormat(1280, 528));
|
||||
assertEquals(576, vf.guessFormat(748, 574));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue