001/*******************************************************************************
002 * Copyright (c) 2024, 2026, Olivier Ayache.  All rights reserved.
003 *
004 * This file is part of AVPKit.
005 *
006 * AVPKit is free software: you can redistribute it and/or modify
007 * it under the terms of the GNU Lesser General Public License as published by
008 * the Free Software Foundation, either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * AVPKit is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with AVPKit.  If not, see <http://www.gnu.org/licenses/>.
018 *******************************************************************************/
019
020package com.avpkit.mediatool;
021
022
023import com.avpkit.mediatool.event.IAddStreamEvent;
024import com.avpkit.mediatool.event.IAudioSamplesEvent;
025import com.avpkit.mediatool.event.ICloseCoderEvent;
026import com.avpkit.mediatool.event.ICloseEvent;
027import com.avpkit.mediatool.event.IFlushEvent;
028import com.avpkit.mediatool.event.IOpenCoderEvent;
029import com.avpkit.mediatool.event.IOpenEvent;
030import com.avpkit.mediatool.event.IReadPacketEvent;
031import com.avpkit.mediatool.event.IVideoPictureEvent;
032import com.avpkit.mediatool.event.IWriteHeaderEvent;
033import com.avpkit.mediatool.event.IWritePacketEvent;
034import com.avpkit.mediatool.event.IWriteTrailerEvent;
035
036
037/**
038 * An abstract implementation of all
039 * {@link IMediaTool} methods, but does not declare {@link IMediaTool}.
040 *
041 * <p>
042 * 
043 * Forwards every call on the {@link IMediaListener} interface methods to all 
044 * listeners added on the {@link IMediaGenerator} interface, but
045 * does not declare it implements those interfaces.
046 * 
047 * </p>
048 * <p>
049 * 
050 * Mixin classes can be extended by anyone, but the extending class
051 * gets to decide which, if any, of the interfaces they actually
052 * want to support.
053 * 
054 * </p>
055 * 
056 * @author trebor
057 * @author aclarke
058 *
059 */
060
061public abstract class AMediaToolMixin extends AMediaGeneratorMixin
062{
063  /**
064   * Create an AMediaToolMixin
065   */
066  public AMediaToolMixin()
067  {
068    super();
069  }
070
071  /**
072   * Calls {@link IMediaListener#onAddStream(IAddStreamEvent)} on all
073   * registered listeners.
074   */
075  public void onAddStream(IAddStreamEvent event)
076  {
077    for (IMediaListener listener : getListeners())
078      listener.onAddStream(event);
079  }
080
081  /**
082   * Calls {@link IMediaListener#onAudioSamples(IAudioSamplesEvent)}
083   *  on all
084   * registered listeners.
085   */
086  public void onAudioSamples(IAudioSamplesEvent event)
087  {
088    for (IMediaListener listener : getListeners())
089      listener.onAudioSamples(event);
090  }
091
092  /**
093   * Calls {@link IMediaListener#onClose(ICloseEvent)}
094   *  on all
095   * registered listeners.
096   */
097  public void onClose(ICloseEvent event)
098  {
099    for (IMediaListener listener : getListeners())
100      listener.onClose(event);
101  }
102
103  /**
104   * Calls {@link IMediaListener#onCloseCoder(ICloseCoderEvent)}
105   *  on all
106   * registered listeners.
107   */
108  public void onCloseCoder(ICloseCoderEvent event)
109  {
110    for (IMediaListener listener : getListeners())
111      listener.onCloseCoder(event);
112  }
113
114  /**
115   * Calls {@link IMediaListener#onFlush(IFlushEvent)}
116   *  on all
117   * registered listeners.
118   */
119  public void onFlush(IFlushEvent event)
120  {
121    for (IMediaListener listener : getListeners())
122      listener.onFlush(event);
123  }
124
125  /**
126   * Calls {@link IMediaListener#onOpen(IOpenEvent)}
127   *  on all
128   * registered listeners.
129   */
130  public void onOpen(IOpenEvent event)
131  {
132    for (IMediaListener listener : getListeners())
133      listener.onOpen(event);
134  }
135
136  /**
137   * Calls {@link IMediaListener#onOpenCoder(IOpenCoderEvent)}
138   *  on all
139   * registered listeners.
140   */
141  public void onOpenCoder(IOpenCoderEvent event)
142  {
143    for (IMediaListener listener : getListeners())
144      listener.onOpenCoder(event);
145  }
146
147  /**
148   * Calls {@link IMediaListener#onReadPacket(IReadPacketEvent)}
149   *  on all
150   * registered listeners.
151   */
152  public void onReadPacket(IReadPacketEvent event)
153  {
154    for (IMediaListener listener : getListeners())
155      listener.onReadPacket(event);
156  }
157
158  /**
159   * Calls {@link IMediaListener#onVideoPicture(IVideoPictureEvent)}
160   *  on all
161   * registered listeners.
162   */
163  public void onVideoPicture(IVideoPictureEvent event)
164  {
165    for (IMediaListener listener : getListeners())
166      listener.onVideoPicture(event);
167  }
168
169  /**
170   * Calls {@link IMediaListener#onWriteHeader(IWriteHeaderEvent)}
171   *  on all
172   * registered listeners.
173   */
174  public void onWriteHeader(IWriteHeaderEvent event)
175  {
176    for (IMediaListener listener : getListeners())
177      listener.onWriteHeader(event);
178  }
179
180  /**
181   * Calls {@link IMediaListener#onWritePacket(IWritePacketEvent)}
182   *  on all
183   * registered listeners.
184   */
185  public void onWritePacket(IWritePacketEvent event)
186  {
187    for (IMediaListener listener : getListeners())
188      listener.onWritePacket(event);
189  }
190
191  /**
192   * Calls {@link IMediaListener#onWriteTrailer(IWriteTrailerEvent)}
193   *  on all
194   * registered listeners.
195   */
196  public void onWriteTrailer(IWriteTrailerEvent event)
197  {
198    for (IMediaListener listener : getListeners())
199      listener.onWriteTrailer(event);
200  }
201
202}