/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.transcode.ffmpeg.track;
import java.util.ArrayList;
import java.util.List;
import com.ttProject.media.Unit;
import com.ttProject.transcode.ITrackListener;
/**
* ffmpegのtrackManagerの動作定義
* @author taktod
*/
public class FfmpegTrackManager implements IFfmpegTrackManager {
/** 動作ID */
private final int id;
/** 出来上がったデータを参照するlistener */
private ITrackListener trackListener = null;
/** unit選択プログラム */
private IUnitSelector unitSelector = null;
/** 処理unit */
private List<Unit> units;
/**
* コンストラクタ
* @param id
*/
public FfmpegTrackManager(int id) {
this.id = id;
}
/**
* id参照
*/
@Override
public int getId() {
return id;
}
/**
* データ参照リスナー設定
*/
@Override
public void setTrackListener(ITrackListener listener) {
this.trackListener = listener;
}
/**
* unit選択動作を設定します。
*/
@Override
public void setUnitSelector(IUnitSelector selector) {
this.unitSelector = selector;
}
/**
* データを登録する
* @param unit
*/
public void applyData(Unit unit) {
if(!unitSelector.check(unit)) {
return;
}
if(units == null) {
units = new ArrayList<Unit>();
}
units.add(unit);
}
/**
* データを送信する
*/
public void commit() {
trackListener.receiveData(units);
units = null;
}
/**
* 停止処理
*/
public void close() {
if(units != null) {
units.clear();
units = null;
}
if(unitSelector != null) {
unitSelector.close();
unitSelector = null;
}
if(trackListener != null) {
trackListener.close();
trackListener = null;
}
}
}