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}