-
Notifications
You must be signed in to change notification settings - Fork 85
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introducing MockMediaTransformer (#13)
Doesn't do any transcoding. Instead, synchronously "plays back" events on a listener. This should be very helpful with UI testing.
- Loading branch information
1 parent
34d66b8
commit cdb75af
Showing
3 changed files
with
155 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
96 changes: 96 additions & 0 deletions
96
litr/src/main/java/com/linkedin/android/litr/test/MockMediaTransformer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
package com.linkedin.android.litr.test; | ||
|
||
import android.content.Context; | ||
import android.media.MediaFormat; | ||
import android.net.Uri; | ||
import androidx.annotation.IntRange; | ||
import androidx.annotation.NonNull; | ||
import androidx.annotation.Nullable; | ||
import com.linkedin.android.litr.MediaTransformer; | ||
import com.linkedin.android.litr.TrackTransform; | ||
import com.linkedin.android.litr.TransformationListener; | ||
import com.linkedin.android.litr.codec.Decoder; | ||
import com.linkedin.android.litr.codec.Encoder; | ||
import com.linkedin.android.litr.filter.GlFilter; | ||
import com.linkedin.android.litr.io.MediaSource; | ||
import com.linkedin.android.litr.io.MediaTarget; | ||
import com.linkedin.android.litr.render.Renderer; | ||
|
||
import java.util.List; | ||
|
||
/** | ||
* Mock transformer, meant to be used only in tests. Doesn't do any actual transformations. | ||
*/ | ||
public class MockMediaTransformer extends MediaTransformer { | ||
|
||
private List<TransformationEvent> transformationEvents; | ||
|
||
public MockMediaTransformer(@NonNull Context context) { | ||
super(context, null, null); | ||
} | ||
|
||
public void setEvents(@NonNull List<TransformationEvent> transformationEvents) { | ||
this.transformationEvents = transformationEvents; | ||
} | ||
|
||
@Override | ||
public void transform(@NonNull String requestId, | ||
@NonNull Uri inputUri, | ||
@NonNull String outputFilePath, | ||
@Nullable MediaFormat targetVideoFormat, | ||
@Nullable MediaFormat targetAudioFormat, | ||
@NonNull TransformationListener listener, | ||
@IntRange(from = GRANULARITY_NONE) int granularity, | ||
@Nullable List<GlFilter> filters) { | ||
playEvents(listener); | ||
} | ||
|
||
@Override | ||
public void transform(@NonNull String requestId, | ||
@NonNull MediaSource mediaSource, | ||
@NonNull Decoder decoder, | ||
@NonNull Renderer videoRenderer, | ||
@NonNull Encoder encoder, | ||
@NonNull MediaTarget mediaTarget, | ||
@Nullable MediaFormat targetVideoFormat, | ||
@Nullable MediaFormat targetAudioFormat, | ||
@NonNull TransformationListener listener, | ||
@IntRange(from = GRANULARITY_NONE) int granularity) { | ||
playEvents(listener); | ||
} | ||
|
||
@Override | ||
public void transform(@NonNull String requestId, | ||
List<TrackTransform> trackTransforms, | ||
@NonNull TransformationListener listener, | ||
@IntRange(from = GRANULARITY_NONE) int granularity) { | ||
playEvents(listener); | ||
} | ||
|
||
private void playEvents(@NonNull TransformationListener transformationListener) { | ||
if (transformationEvents == null) { | ||
// nothing to do | ||
return; | ||
} | ||
|
||
for (TransformationEvent event : transformationEvents) { | ||
switch (event.type) { | ||
case TransformationEvent.TYPE_START: | ||
transformationListener.onStarted(event.id); | ||
break; | ||
case TransformationEvent.TYPE_PROGRESS: | ||
transformationListener.onProgress(event.id, event.progress); | ||
break; | ||
case TransformationEvent.TYPE_COMPLETED: | ||
transformationListener.onCompleted(event.id, null); | ||
break; | ||
case TransformationEvent.TYPE_ERROR: | ||
transformationListener.onError(event.id, event.cause, null); | ||
break; | ||
case TransformationEvent.TYPE_CANCELLED: | ||
transformationListener.onCancelled(event.id, null); | ||
break; | ||
} | ||
} | ||
} | ||
} |
37 changes: 37 additions & 0 deletions
37
litr/src/main/java/com/linkedin/android/litr/test/TransformationEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package com.linkedin.android.litr.test; | ||
|
||
import androidx.annotation.FloatRange; | ||
import androidx.annotation.IntDef; | ||
import androidx.annotation.NonNull; | ||
import androidx.annotation.Nullable; | ||
|
||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.RetentionPolicy; | ||
|
||
public class TransformationEvent { | ||
|
||
public static final int TYPE_START = 0; | ||
public static final int TYPE_PROGRESS = 1; | ||
public static final int TYPE_COMPLETED = 2; | ||
public static final int TYPE_ERROR = 3; | ||
public static final int TYPE_CANCELLED = 4; | ||
|
||
@Retention(RetentionPolicy.SOURCE) | ||
@IntDef({ TYPE_START, TYPE_PROGRESS, TYPE_COMPLETED, TYPE_ERROR, TYPE_CANCELLED}) | ||
@interface EventType {} | ||
|
||
@NonNull public final String id; | ||
@EventType public final int type; | ||
public final float progress; | ||
@Nullable public final Throwable cause; | ||
|
||
public TransformationEvent(@NonNull String id, | ||
@EventType int type, | ||
@FloatRange(from = 0, to = 1) float progress, | ||
@Nullable Throwable cause) { | ||
this.id = id; | ||
this.type = type; | ||
this.progress = progress; | ||
this.cause = cause; | ||
} | ||
} |