001package net.bramp.ffmpeg.builder; 002 003import com.google.common.collect.ImmutableList; 004import javax.annotation.CheckReturnValue; 005import net.bramp.ffmpeg.options.EncodingOptions; 006import net.bramp.ffmpeg.probe.FFmpegProbeResult; 007 008public abstract class AbstractFFmpegInputBuilder<T extends AbstractFFmpegInputBuilder<T>> 009 extends AbstractFFmpegStreamBuilder<T> { 010 private final FFmpegProbeResult probeResult; 011 012 private boolean readAtNativeFrameRate; 013 014 /** 015 * Number of times input stream shall be looped. Loop 0 means no loop, loop -1 means infinite 016 * loop. 017 */ 018 private int streamLoop; 019 020 protected AbstractFFmpegInputBuilder(FFmpegBuilder parent, String filename) { 021 this(parent, null, filename); 022 } 023 024 protected AbstractFFmpegInputBuilder( 025 FFmpegBuilder parent, FFmpegProbeResult probeResult, String filename) { 026 super(parent, filename); 027 this.probeResult = probeResult; 028 } 029 030 public T readAtNativeFrameRate() { 031 this.readAtNativeFrameRate = true; 032 return getThis(); 033 } 034 035 /** 036 * Sets number of times input stream shall be looped. Loop 0 means no loop, loop -1 means infinite 037 * loop. 038 * 039 * @param streamLoop loop counter 040 * @return this 041 */ 042 public T setStreamLoop(int streamLoop) { 043 this.streamLoop = streamLoop; 044 045 return getThis(); 046 } 047 048 public FFmpegProbeResult getProbeResult() { 049 return probeResult; 050 } 051 052 @Override 053 @CheckReturnValue 054 @SuppressWarnings("unchecked") 055 protected T getThis() { 056 return (T) this; 057 } 058 059 @Override 060 public EncodingOptions buildOptions() { 061 return null; 062 } 063 064 @Override 065 protected void addGlobalFlags(FFmpegBuilder parent, ImmutableList.Builder<String> args) { 066 if (this.readAtNativeFrameRate) { 067 args.add("-re"); 068 } 069 070 if (this.streamLoop != 0) { 071 args.add("-stream_loop", Integer.toString(this.streamLoop)); 072 } 073 074 super.addGlobalFlags(parent, args); 075 } 076 077 public int getStreamLoop() { 078 return streamLoop; 079 } 080}