Skip to content

Instantly share code, notes, and snippets.

Andrey Chernih andreychernih

Block or report user

Report or block andreychernih

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View net_http.rb
require 'net/http'
def download_net_http(urls, thread_count)
queue = Queue.new
urls.map { |url| queue << url }
threads = thread_count.times.map do
Thread.new do
Net::HTTP.start('our-s3-bucket.s3.amazonaws.com', 80) do |http|
while !queue.empty? && url = queue.pop
View Mp4ParserAudioMuxer.java
public class Mp4ParserAudioMuxer implements AudioMuxer {
@Override
public boolean mux(String videoFile, String audioFile, String outputFile) {
Movie video;
try {
video = new MovieCreator().build(videoFile);
} catch (RuntimeException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
View JcodecMp4VideoMuxer.java
public class JcodecMp4VideoMuxer implements VideoMuxer {
private FileChannelWrapper mChannelWrapper;
private MP4Muxer mMp4Muxer;
private FramesMP4MuxerTrack mMp4Track;
private ArrayList<ByteBuffer> mSpsList;
private ArrayList<ByteBuffer> mPpsList;
@Override
public boolean initialize() {
mSpsList = new ArrayList<ByteBuffer>();
View ColorConversions.java
public static byte[] NV21toYUV420Planar(byte[] input, byte[] output, int width, int height) {
final int frameSize = width * height;
final int qFrameSize = frameSize/4;
System.arraycopy(input, 0, output, 0, frameSize); // Y
byte v, u;
for (int i = 0; i < qFrameSize; i++) {
v = input[frameSize + i*2];
View VideoEncoder.java
public interface VideoEncoder {
boolean prepare(Context context);
boolean sendFrame(@NotNull byte[] frame);
Frame receiveFrame() throws VideoEncoderError;
}
View MediaCodecFormatSelector.java
public class MediaCodecFormatSelector {
public static MediaCodecFormatSelector forDevice() {
String deviceName = Device.getDeviceName();
if (deviceName.equalsIgnoreCase("samsung gt-i9300")
&& isBadMediaCodecSupport()) {
return new SamsungGalaxyS3MediaCodecFormatSelector();
else if (isBadMediaCodecSupport() && isAffectedDevice(deviceName)) {
return new NoMediaCodecSupportFormatSelector();
} else {
return new MediaCodecFormatSelector();
@andreychernih
andreychernih / MediaCodecConfiguration.java
Created Jun 28, 2014
MediaCodec configuration sample
View MediaCodecConfiguration.java
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
&& MediaCodecFormatSelector.forDevice().isSupported()) {
binder.bind(VideoEncoder.class).to(MediaCodecVideoEncoder.class);
} else {
binder.bind(VideoEncoder.class).to(JpegVideoEncoder.class);
}
View MediaRecorderExample.java
MediaRecorder mediaRecorder = new MediaRecorder();
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
profile.videoFrameWidth = 1280;
profile.videoFrameHeight = 720;
mediaRecorder.setCamera(Camera.open());
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(profile);
@andreychernih
andreychernih / BufferedWritableFileByteChannel.java
Last active Aug 29, 2015
Buffered WritableByteChannel implementation
View BufferedWritableFileByteChannel.java
private static class BufferedWritableFileByteChannel implements WritableByteChannel {
private static final int BUFFER_CAPACITY = 1000000;
private boolean isOpen = true;
private final OutputStream outputStream;
private final ByteBuffer byteBuffer;
private final byte[] rawBuffer = new byte[BUFFER_CAPACITY];
private BufferedWritableFileByteChannel(OutputStream outputStream) {
this.outputStream = outputStream;
@andreychernih
andreychernih / Gemfile
Created Jun 15, 2014
Import delicious bookmarks from 1 user to another
View Gemfile
source 'https://rubygems.org'
gem 'delicious', '~> 1.0.0'
You can’t perform that action at this time.