Skip to content

Commit

Permalink
Generalize media input for use with Audio.
Browse files Browse the repository at this point in the history
  • Loading branch information
alan-signal authored and alex-signal committed May 14, 2020
1 parent 5937a50 commit 3db5da1
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.thoughtcrime.securesms.video;
package org.thoughtcrime.securesms.media;

import android.content.Context;
import android.media.MediaDataSource;
Expand All @@ -12,30 +12,30 @@
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.PartUriParser;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.video.videoconverter.VideoInput;
import org.thoughtcrime.securesms.media.MediaInput;

import java.io.IOException;

@RequiresApi(api = 23)
public final class DecryptableUriVideoInput {
public final class DecryptableUriMediaInput {

private DecryptableUriVideoInput() {
private DecryptableUriMediaInput() {
}

public static VideoInput createForUri(@NonNull Context context, @NonNull Uri uri) throws IOException {
public static @NonNull MediaInput createForUri(@NonNull Context context, @NonNull Uri uri) throws IOException {

if (BlobProvider.isAuthority(uri)) {
return new VideoInput.MediaDataSourceVideoInput(BlobProvider.getInstance().getMediaDataSource(context, uri));
return new MediaInput.MediaDataSourceMediaInput(BlobProvider.getInstance().getMediaDataSource(context, uri));
}

if (PartAuthority.isLocalUri(uri)) {
return createForAttachmentUri(context, uri);
}

return new VideoInput.UriVideoInput(context, uri);
return new MediaInput.UriMediaInput(context, uri);
}

private static VideoInput createForAttachmentUri(@NonNull Context context, @NonNull Uri uri) {
private static @NonNull MediaInput createForAttachmentUri(@NonNull Context context, @NonNull Uri uri) {
AttachmentId partId = new PartUriParser(uri).getPartId();

if (!partId.isValid()) {
Expand All @@ -49,6 +49,6 @@ private static VideoInput createForAttachmentUri(@NonNull Context context, @NonN
throw new AssertionError();
}

return new VideoInput.MediaDataSourceVideoInput(mediaDataSource);
return new MediaInput.MediaDataSourceMediaInput(mediaDataSource);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.thoughtcrime.securesms.video.videoconverter;
package org.thoughtcrime.securesms.media;

import android.content.Context;
import android.media.MediaDataSource;
Expand All @@ -12,16 +12,16 @@
import java.io.File;
import java.io.IOException;

public abstract class VideoInput implements Closeable {
public abstract class MediaInput implements Closeable {

@NonNull
abstract MediaExtractor createExtractor() throws IOException;
public abstract MediaExtractor createExtractor() throws IOException;

public static class FileVideoInput extends VideoInput {
public static class FileMediaInput extends MediaInput {

final File file;
private final File file;

public FileVideoInput(final @NonNull File file) {
public FileMediaInput(@NonNull File file) {
this.file = file;
}

Expand All @@ -37,13 +37,13 @@ public void close() {
}
}

public static class UriVideoInput extends VideoInput {
public static class UriMediaInput extends MediaInput {

final Uri uri;
final Context context;
private final Uri uri;
private final Context context;

public UriVideoInput(final @NonNull Context context, final @NonNull Uri uri) {
this.uri = uri;
public UriMediaInput(@NonNull Context context, @NonNull Uri uri) {
this.uri = uri;
this.context = context;
}

Expand All @@ -60,11 +60,11 @@ public void close() {
}

@RequiresApi(23)
public static class MediaDataSourceVideoInput extends VideoInput {
public static class MediaDataSourceMediaInput extends MediaInput {

private final MediaDataSource mediaDataSource;

public MediaDataSourceVideoInput(final @NonNull MediaDataSource mediaDataSource) {
public MediaDataSourceMediaInput(@NonNull MediaDataSource mediaDataSource) {
this.mediaDataSource = mediaDataSource;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.VideoSlide;
import org.thoughtcrime.securesms.video.DecryptableUriVideoInput;
import org.thoughtcrime.securesms.media.DecryptableUriMediaInput;
import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView;

import java.io.IOException;
Expand Down Expand Up @@ -69,7 +69,7 @@ public void setVideoSource(VideoSlide slide) throws IOException {
return;
}

videoTimeLine.setInput(DecryptableUriVideoInput.createForUri(getContext(), uri));
videoTimeLine.setInput(DecryptableUriMediaInput.createForUri(getContext(), uri));

videoTimeLine.setOnRangeChangeListener(new VideoThumbnailsRangeSelectorView.OnRangeChangeListener() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
import org.thoughtcrime.securesms.video.videoconverter.EncodingException;
import org.thoughtcrime.securesms.video.videoconverter.MediaConverter;
import org.thoughtcrime.securesms.video.videoconverter.VideoInput;
import org.thoughtcrime.securesms.media.MediaInput;

import java.io.Closeable;
import java.io.FileDescriptor;
Expand Down Expand Up @@ -129,7 +129,7 @@ public InMemoryTranscoder(@NonNull Context context, @NonNull MediaDataSource dat

final MediaConverter converter = new MediaConverter();

converter.setInput(new VideoInput.MediaDataSourceVideoInput(dataSource));
converter.setInput(new MediaInput.MediaDataSourceMediaInput(dataSource));
converter.setOutput(memoryFileFileDescriptor);
converter.setVideoResolution(outputFormat);
converter.setVideoBitrate(targetVideoBitRate);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import androidx.annotation.Nullable;

import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.media.MediaInput;
import org.thoughtcrime.securesms.video.VideoUtil;

import java.io.FileNotFoundException;
Expand Down Expand Up @@ -62,7 +63,7 @@ final class AudioTrackConverter {

static @Nullable
AudioTrackConverter create(
final @NonNull VideoInput input,
final @NonNull MediaInput input,
final long timeFrom,
final long timeTo,
final int audioBitrate) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import androidx.annotation.WorkerThread;

import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.media.MediaInput;

import java.io.File;
import java.io.FileDescriptor;
Expand All @@ -49,7 +50,7 @@ public final class MediaConverter {
public static final String VIDEO_CODEC_H264 = "video/avc";
public static final String VIDEO_CODEC_H265 = "video/hevc";

private VideoInput mInput;
private MediaInput mInput;
private Output mOutput;

private long mTimeFrom;
Expand All @@ -69,7 +70,7 @@ public interface Listener {
public MediaConverter() {
}

public void setInput(final @NonNull VideoInput videoInput) {
public void setInput(final @NonNull MediaInput videoInput) {
mInput = videoInput;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import androidx.annotation.RequiresApi;

import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.media.MediaInput;

import java.io.IOException;
import java.nio.ByteBuffer;
Expand All @@ -28,7 +29,7 @@ interface Callback {
void failed();
}

static void extractThumbnails(final @NonNull VideoInput input,
static void extractThumbnails(final @NonNull MediaInput input,
final int thumbnailCount,
final int thumbnailResolution,
final @NonNull Callback callback)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import androidx.annotation.RequiresApi;

import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.media.MediaInput;

import java.io.IOException;
import java.lang.ref.WeakReference;
Expand All @@ -26,7 +27,7 @@ public class VideoThumbnailsView extends View {

private static final String TAG = Log.tag(VideoThumbnailsView.class);

private VideoInput input;
private MediaInput input;
private ArrayList<Bitmap> thumbnails;
private AsyncTask<Void, Bitmap, Void> thumbnailsTask;
private OnDurationListener durationListener;
Expand All @@ -49,9 +50,9 @@ public VideoThumbnailsView(final Context context, final @Nullable AttributeSet a
super(context, attrs, defStyleAttr);
}

public void setInput(VideoInput input) {
this.input = input;
thumbnails = null;
public void setInput(@NonNull MediaInput input) {
this.input = input;
this.thumbnails = null;
if (thumbnailsTask != null) {
thumbnailsTask.cancel(true);
thumbnailsTask = null;
Expand Down Expand Up @@ -164,14 +165,14 @@ protected long getDuration() {
private static class ThumbnailsTask extends AsyncTask<Void, Bitmap, Void> {

final WeakReference<VideoThumbnailsView> viewReference;
final VideoInput input;
final MediaInput input;
final float thumbnailWidth;
final float thumbnailHeight;
final int thumbnailCount;
long duration;

ThumbnailsTask(final @NonNull VideoThumbnailsView view, final @NonNull VideoInput input, final float thumbnailWidth, final float thumbnailHeight, final int thumbnailCount) {
viewReference = new WeakReference<>(view);
ThumbnailsTask(final @NonNull VideoThumbnailsView view, final @NonNull MediaInput input, final float thumbnailWidth, final float thumbnailHeight, final int thumbnailCount) {
this.viewReference = new WeakReference<>(view);
this.input = input;
this.thumbnailWidth = thumbnailWidth;
this.thumbnailHeight = thumbnailHeight;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import androidx.annotation.RequiresApi;

import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.media.MediaInput;

import java.io.FileNotFoundException;
import java.io.IOException;
Expand Down Expand Up @@ -66,7 +67,7 @@ final class VideoTrackConverter {

@RequiresApi(23)
static @Nullable VideoTrackConverter create(
final @NonNull VideoInput input,
final @NonNull MediaInput input,
final long timeFrom,
final long timeTo,
final int videoResolution,
Expand Down

0 comments on commit 3db5da1

Please sign in to comment.