1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.tools.imagecollection.collection.video.selection;
31
32 import java.text.ParseException;
33
34 import org.openimaj.image.MBFImage;
35 import org.openimaj.tools.imagecollection.collection.ImageCollectionEntrySelection;
36 import org.openimaj.tools.imagecollection.collection.config.ImageCollectionConfig;
37 import org.openimaj.video.xuggle.XuggleVideo;
38
39 public abstract class XuggleVideoFrameSelection implements ImageCollectionEntrySelection<MBFImage> {
40 public static class Proxy extends XuggleVideoFrameSelection {
41 private ImageCollectionEntrySelection<MBFImage> proxy;
42
43 public Proxy(ImageCollectionEntrySelection<MBFImage> proxy) {
44 this.proxy = proxy;
45 }
46
47 @Override
48 public boolean acceptEntry(MBFImage image){
49 return proxy.acceptEntry(image);
50 }
51 }
52 public XuggleVideoFrameSelection(ImageCollectionConfig config){
53
54 }
55
56 public XuggleVideoFrameSelection() {
57 }
58
59 @Override
60 public boolean acceptEntry(MBFImage image){
61 return true;
62 }
63
64 public void init(XuggleVideo video){
65
66 }
67 public static class All extends XuggleVideoFrameSelection{
68
69 public All(ImageCollectionConfig config) {
70 super(config);
71 }
72 }
73
74 public static class FramesPerSecond extends XuggleVideoFrameSelection{
75
76 private Integer framesPerSecond;
77 private int framesToSkip;
78 private int framesCount;
79
80 public FramesPerSecond(ImageCollectionConfig config) throws ParseException {
81 super(config);
82 this.framesPerSecond = config.read("video.framespersecond");
83 if(this.framesPerSecond == null){
84 this.framesPerSecond = 2;
85 }
86 }
87
88 @Override
89 public void init(XuggleVideo video){
90 this.framesToSkip = (int) (video.getFPS() / this.framesPerSecond);
91 if(this.framesToSkip < 1) this.framesToSkip = 1;
92 this.framesCount = 0;
93 }
94
95 @Override
96 public boolean acceptEntry(MBFImage image){
97 boolean good = (this.framesCount % this.framesToSkip) == 0;
98 this.framesCount++;
99 return good;
100 }
101 }
102
103 private enum Styles{
104 ALL {
105 @Override
106 public XuggleVideoFrameSelection style(ImageCollectionConfig config) {
107 return new XuggleVideoFrameSelection.All(config);
108 }
109 },FRAMESPERSECOND {
110 @Override
111 public XuggleVideoFrameSelection style(ImageCollectionConfig config) throws ParseException {
112 return new XuggleVideoFrameSelection.FramesPerSecond(config);
113 }
114 }
115
116
117
118
119
120
121 ;
122 public abstract XuggleVideoFrameSelection style(ImageCollectionConfig config) throws ParseException;
123 }
124 public static XuggleVideoFrameSelection byName(String read,ImageCollectionConfig config) throws ParseException {
125 return Styles.valueOf(read).style(config);
126 }
127
128 }