26 static jfieldID nativeBuffer_FID = NULL;
27 static jmethodID rewind_MID = NULL;
28 static jmethodID limit_MID = NULL;
29 static jmethodID capacity_MID = NULL;
30 static jmethodID setNativeBufferCapacity_MID = NULL;
31 static jmethodID logFine_MID = NULL;
32 static jmethodID logWarning_MID = NULL;
33 static int MIN_PROBE_SCORE = 5;
41 static void init_ids(JNIEnv *env, jobject stream) {
42 if (!nativeBuffer_FID || !rewind_MID || !limit_MID) {
43 jclass bufferClass = NULL;
44 jclass streamClass = NULL;
46 bufferClass = (*env)->FindClass(env,
"java/nio/Buffer");
47 streamClass = (*env)->GetObjectClass(env, stream);
49 nativeBuffer_FID = (*env)->GetFieldID(env, streamClass,
"nativeBuffer",
"Ljava/nio/ByteBuffer;");
50 rewind_MID = (*env)->GetMethodID(env, bufferClass,
"rewind",
"()Ljava/nio/Buffer;");
51 limit_MID = (*env)->GetMethodID(env, bufferClass,
"limit",
"(I)Ljava/nio/Buffer;");
52 capacity_MID = (*env)->GetMethodID(env, bufferClass,
"capacity",
"()I");
53 setNativeBufferCapacity_MID = (*env)->GetMethodID(env, streamClass,
"setNativeBufferCapacity",
"(I)I");
54 logFine_MID = (*env)->GetMethodID(env, streamClass,
"logFine",
"(Ljava/lang/String;)V");
55 logWarning_MID = (*env)->GetMethodID(env, streamClass,
"logWarning",
"(Ljava/lang/String;)V");
65 int ff_open_stream(JNIEnv *env, AVStream *stream, AVCodecContext **context) {
67 fprintf(stderr,
"Opening stream...\n");
71 AVCodec *decoder = NULL;
72 AVDictionary *opts = NULL;
75 decoder = avcodec_find_decoder(stream->codecpar->codec_id);
77 fprintf(stderr,
"Failed to find %s codec\n", av_get_media_type_string(AVMEDIA_TYPE_AUDIO));
78 res = AVERROR(EINVAL);
83 *context = avcodec_alloc_context3(decoder);
85 fprintf(stderr,
"Failed to allocate context\n");
86 res = AVERROR(EINVAL);
92 if ((res = avcodec_parameters_to_context(*context, stream->codecpar)) < 0) {
93 fprintf(stderr,
"Failed to copy %s codec parameters to decoder context\n", av_get_media_type_string(AVMEDIA_TYPE_AUDIO));
99 av_dict_set(&opts,
"refcounted_frames", refcount ?
"1" :
"0", 0);
100 if ((res = avcodec_open2(*context, decoder, &opts)) < 0) {
101 fprintf(stderr,
"Failed to open %s codec\n", av_get_media_type_string(AVMEDIA_TYPE_AUDIO));
107 fprintf(stderr,
"Stream was opened.\n");
122 static int open_codec_context(
int *stream_index,
123 AVFormatContext *format_context,
124 AVCodecContext *context,
125 enum AVMediaType type) {
129 AVCodec *decoder = NULL;
131 res = av_find_best_stream(format_context, type, -1, -1, NULL, 0);
136 stream = format_context->streams[*stream_index];
139 decoder = avcodec_find_decoder(stream->codecpar->codec_id);
143 context = avcodec_alloc_context3(decoder);
148 res = avcodec_open2(context, decoder, NULL);
164 char formattedMessage [strlen(message)+4+AV_ERROR_MAX_STRING_SIZE];
165 snprintf(formattedMessage, strlen(message)+4+AV_ERROR_MAX_STRING_SIZE,
"%s (%.64s)", message, av_err2str(err));
167 fprintf(stderr,
"UnsupportedAudioFileException: %s\n", formattedMessage);
169 jclass excCls = (*env)->FindClass(env,
"javax/sound/sampled/UnsupportedAudioFileException");
170 (*env)->ThrowNew(env, excCls, formattedMessage);
179 char formattedMessage [15];
180 snprintf(formattedMessage, 15,
"%d", index);
182 fprintf(stderr,
"IndexOutOfBoundsException: %d\n", index);
184 jclass excCls = (*env)->FindClass(env,
"java/lang/IndexOutOfBoundsException");
185 (*env)->ThrowNew(env, excCls, formattedMessage);
194 char formattedMessage [strlen(message)+4+AV_ERROR_MAX_STRING_SIZE];
195 snprintf(formattedMessage, strlen(message)+4+AV_ERROR_MAX_STRING_SIZE,
"%s (%.64s)", message, av_err2str(err));
197 fprintf(stderr,
"IOException: %s\n", formattedMessage);
199 jclass excCls = (*env)->FindClass(env,
"java/io/IOException");
200 (*env)->ThrowNew(env, excCls, formattedMessage);
210 fprintf (stderr,
"FileNotFoundException: '%s' %d (%4.4s)\n", message, (
int)err, (
char*)&err);
212 jclass excCls = (*env)->FindClass(env,
"java/io/FileNotFoundException");
213 (*env)->ThrowNew(env, excCls, message);
222 char formattedMessage [strlen(message)+20+AV_ERROR_MAX_STRING_SIZE];
223 snprintf(formattedMessage, strlen(message)+20+AV_ERROR_MAX_STRING_SIZE,
"%s %i (%.64s)", message, err, av_err2str(err));
224 jstring s = (*aio->
env)->NewStringUTF(aio->
env, formattedMessage);
227 jstring s = (*aio->
env)->NewStringUTF(aio->
env, message);
237 char formattedMessage [strlen(message)+20+AV_ERROR_MAX_STRING_SIZE];
238 snprintf(formattedMessage, strlen(message)+20+AV_ERROR_MAX_STRING_SIZE,
"%s %i (%.64s)", message, err, av_err2str(err));
239 jstring s = (*aio->
env)->NewStringUTF(aio->
env, formattedMessage);
242 jstring s = (*aio->
env)->NewStringUTF(aio->
env, message);
260 res = avformat_open_input(format_context, url, NULL, NULL);
262 if (res == AVERROR(ENOENT) || res == AVERROR_HTTP_NOT_FOUND) {
264 }
else if (res == AVERROR_PROTOCOL_NOT_FOUND
265 || res == AVERROR_HTTP_BAD_REQUEST
266 || res == AVERROR_HTTP_UNAUTHORIZED
267 || res == AVERROR_HTTP_FORBIDDEN
268 || res == AVERROR_HTTP_OTHER_4XX
269 || res == AVERROR_HTTP_SERVER_ERROR
270 || res == AVERROR(EIO)) {
277 probe_score = (*format_context)->probe_score;
280 fprintf(stderr,
"ff_open_format_context(): probe score=%i\n", probe_score);
283 if (probe_score < MIN_PROBE_SCORE) {
289 res = avformat_find_stream_info(*format_context, NULL);
312 int ff_open_file(JNIEnv *env, AVFormatContext **format_context, AVStream **openedStream, AVCodecContext **context,
int *stream_index,
const char *url) {
321 fprintf(stderr,
"Desired audio stream index: %i.\n", *stream_index);
324 if (*stream_index < 0) {
326 res = open_codec_context(stream_index, *format_context, *context, AVMEDIA_TYPE_AUDIO);
331 *openedStream = (*format_context)->streams[*stream_index];
336 int audio_stream_number = 0;
337 AVStream* stream = NULL;
339 AVFormatContext* deref_format_context = *format_context;
340 for (i=0; i<deref_format_context->nb_streams; i++) {
341 stream = deref_format_context->streams[i];
342 if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
343 if (audio_stream_number == *stream_index) {
346 fprintf(stderr,
"Found desired audio stream at index: %i.\n", i);
350 audio_stream_number++;
354 if (stream == NULL) {
364 *openedStream = stream;
368 fprintf(stderr,
"Opened stream index: %i.\n", *stream_index);
369 fprintf(stderr,
"Opened stream: %ld.\n", (
long) *openedStream);
384 static int init_swr(JNIEnv *env,
FFAudioIO *aio) {
389 res = AVERROR(ENOMEM);
394 av_opt_set_sample_fmt(aio->
swr_context,
"in_sample_fmt", aio->
stream->codecpar->format, 0);
396 av_opt_set_sample_fmt(aio->
swr_context,
"out_sample_fmt", av_get_packed_sample_fmt(aio->
stream->codecpar->format), 0);
399 av_opt_set_int(aio->
swr_context,
"in_channel_count", aio->
stream->codecpar->channels, 0);
400 av_opt_set_int(aio->
swr_context,
"out_channel_count", aio->
stream->codecpar->channels, 0);
401 av_opt_set_int(aio->
swr_context,
"in_channel_layout", aio->
stream->codecpar->channel_layout, 0);
402 av_opt_set_int(aio->
swr_context,
"out_channel_layout", aio->
stream->codecpar->channel_layout, 0);
403 av_opt_set_int(aio->
swr_context,
"in_sample_rate", aio->
stream->codecpar->sample_rate, 0);
404 av_opt_set_int(aio->
swr_context,
"out_sample_rate", aio->
stream->codecpar->sample_rate, 0);
408 res = AVERROR(ENOMEM);
431 AVCodec*
ff_find_encoder(
enum AVSampleFormat sampleFormat,
int bits,
int big_endian,
int signedSamples) {
432 enum AVCodecID codec_id;
435 fprintf(stderr,
"ff_find_encoder(fmt=%d,bits=%d,big_endian=%d,signed=%d)\n", sampleFormat, bits, big_endian, signedSamples);
438 switch (sampleFormat) {
439 case AV_SAMPLE_FMT_U8:
440 case AV_SAMPLE_FMT_U8P:
441 if (signedSamples) codec_id = AV_CODEC_ID_PCM_S8;
442 else codec_id = AV_CODEC_ID_PCM_U8;
444 case AV_SAMPLE_FMT_S16:
445 case AV_SAMPLE_FMT_S16P:
446 if (signedSamples) codec_id = big_endian ? AV_CODEC_ID_PCM_S16BE : AV_CODEC_ID_PCM_S16LE;
447 else codec_id = big_endian ? AV_CODEC_ID_PCM_U16BE : AV_CODEC_ID_PCM_U16LE;
449 case AV_SAMPLE_FMT_S32:
450 case AV_SAMPLE_FMT_S32P:
452 if (signedSamples) codec_id = big_endian ? AV_CODEC_ID_PCM_S24BE : AV_CODEC_ID_PCM_S24LE;
453 else codec_id = big_endian ? AV_CODEC_ID_PCM_U24BE : AV_CODEC_ID_PCM_U24LE;
455 if (signedSamples) codec_id = big_endian ? AV_CODEC_ID_PCM_S32BE : AV_CODEC_ID_PCM_S32LE;
456 else codec_id = big_endian ? AV_CODEC_ID_PCM_U32BE : AV_CODEC_ID_PCM_U32LE;
459 case AV_SAMPLE_FMT_FLT:
460 case AV_SAMPLE_FMT_FLTP:
461 codec_id = big_endian ? AV_CODEC_ID_PCM_F32BE : AV_CODEC_ID_PCM_F32LE;
463 case AV_SAMPLE_FMT_DBL:
464 case AV_SAMPLE_FMT_DBLP:
465 codec_id = big_endian ? AV_CODEC_ID_PCM_F64BE : AV_CODEC_ID_PCM_F64LE;
471 return avcodec_find_encoder(codec_id);
486 int64_t out_sample_rate;
487 int64_t out_channel_count;
488 int64_t out_channel_layout;
489 enum AVSampleFormat out_sample_fmt;
503 res = AVERROR(ENOMEM);
509 av_opt_get_int(aio->
swr_context,
"out_channel_count", 0, &out_channel_count);
510 av_opt_get_int(aio->
swr_context,
"out_channel_layout", 0, &out_channel_layout);
511 av_opt_get_int(aio->
swr_context,
"out_sample_rate", 0, &out_sample_rate);
512 av_opt_get_sample_fmt(aio->
swr_context,
"out_sample_fmt", 0, &out_sample_fmt);
521 res = AVERROR(ENOMEM);
528 res = AVERROR(ENOMEM);
552 AVCodec *codec = NULL;
557 nb_planes = av_sample_fmt_is_planar(aio->
stream->codecpar->format)
558 ? aio->
stream->codecpar->channels
562 res = init_swr(env, aio);
568 if (aio->
stream->codecpar->bits_per_coded_sample == 24) {
571 res = AVERROR(EINVAL);
583 aio->
audio_data = av_mallocz(
sizeof(uint8_t *) * nb_planes);
585 res = AVERROR(ENOMEM);
592 res = AVERROR(ENOMEM);
617 static int encode_buffer(
FFAudioIO *aio,
const uint8_t *in_buf,
int in_size,
const uint8_t *out_buf) {
624 fprintf(stderr,
"encode_buffer: channels=%d frame->nb_samples=%d in_size=%d\n", aio->
encode_context->channels, aio->
encode_frame->nb_samples, in_size);
625 fprintf(stderr,
"encode_buffer: needed buffer=%d available=%d\n", res, in_size);
670 static int resample(
FFAudioIO *aio, uint8_t **out_buf,
int out_samples,
const uint8_t **in_buf,
const int in_samples) {
672 int64_t out_channel_count;
673 enum AVSampleFormat out_sample_format;
675 if (out_samples == 0)
goto bail;
677 av_opt_get_int(aio->
swr_context,
"out_channel_count", 0, &out_channel_count);
678 av_opt_get_sample_fmt(aio->
swr_context,
"out_sample_fmt", 0, &out_sample_format);
681 fprintf(stderr,
"resample: out_samples=%d in_samples=%d, channels=%d sample_format=%d\n",
682 out_samples, in_samples, (
int)out_channel_count, out_sample_format);
686 res = av_samples_alloc(out_buf, NULL, out_channel_count, out_samples, out_sample_format, 1);
688 res = AVERROR(ENOMEM);
694 res = swr_convert(aio->
swr_context, out_buf, out_samples, in_buf, in_samples);
705 static int copy_to_java_buffer(
FFAudioIO *aio, uint32_t offset,
int samples, uint8_t **resample_buf) {
707 uint32_t buffer_size = 0;
708 jobject byte_buffer = NULL;
709 uint8_t *java_buffer = NULL;
710 int64_t channel_count;
711 enum AVSampleFormat format;
713 av_opt_get_sample_fmt(aio->
swr_context,
"out_sample_fmt", 0, &format);
714 av_opt_get_int(aio->
swr_context,
"out_channel_count", 0, &channel_count);
716 res = av_samples_get_buffer_size(NULL, (
int)channel_count, samples, format, 1);
717 if (res < 0)
goto bail;
718 else buffer_size = res;
733 java_buffer = (uint8_t *)(*aio->
env)->GetDirectBufferAddress(aio->
env, byte_buffer) + offset;
740 res = encode_buffer(aio, resample_buf[0], buffer_size, java_buffer);
747 memcpy(java_buffer, resample_buf[0], buffer_size);
753 (*aio->
env)->CallObjectMethod(aio->
env, byte_buffer, rewind_MID);
755 (*aio->
env)->CallObjectMethod(aio->
env, byte_buffer, limit_MID, offset + buffer_size);
772 static int decode_packet(
FFAudioIO *aio,
int cached) {
774 uint8_t **resample_buf = NULL;
775 uint32_t java_buffer_offset = 0;
776 uint32_t out_buf_size = 0;
777 int out_buf_samples = 0;
778 int64_t out_sample_rate;
782 int bytesConsumed = 0;
786 av_opt_get_int(aio->
swr_context,
"out_sample_rate", 0, &out_sample_rate);
788 resample_buf = av_mallocz(
sizeof(uint8_t *) * 1);
794 fprintf(stderr,
"Flushing.\n");
796 res = resample(aio, resample_buf, swr_get_delay(aio->
swr_context, aio->
stream->codecpar->sample_rate), NULL, 0);
797 if (res < 0)
goto bail;
798 else out_buf_samples = res;
803 fprintf(stderr,
"aio->decode_packet.size: %i\n", aio->
decode_packet.size);
808 if (bytesConsumed < 0) {
809 logWarning(aio, bytesConsumed,
"Skipping packet. avcodec_decode_audio4 failed:");
817 fprintf(stderr,
"bytesConsumed: %i\n", bytesConsumed);
828 fprintf(stderr,
"samples%s n:%" PRIu64
" nb_samples:%d pts:%s\n",
829 cached ?
"(cached)" :
"",
836 out_buf_samples = av_rescale_rnd(
839 aio->
stream->codecpar->sample_rate,
848 return AVERROR(ENOMEM);
854 res = resample(aio, resample_buf, out_buf_samples, (
const uint8_t **)aio->
audio_data, aio->
decode_frame->nb_samples);
855 if (res < 0)
goto bail;
856 else out_buf_samples = res;
860 fprintf(stderr,
"Got no frame.\n");
865 if (out_buf_samples > 0) {
867 java_buffer_offset += out_buf_size;
868 res = copy_to_java_buffer(aio, java_buffer_offset, out_buf_samples, resample_buf);
869 if (res < 0)
goto bail;
872 if (resample_buf[0]) av_freep(&resample_buf[0]);
880 if (resample_buf[0]) av_freep(&resample_buf[0]);
881 av_free(resample_buf);
903 while (res == 0 && read_frame >= 0) {
905 if (read_frame >= 0) {
906 res = decode_packet(aio, 0);
908 fprintf(stderr,
"res : %i\n", res);
909 fprintf(stderr,
"read_frame: %i\n", read_frame);
910 fprintf(stderr,
"duration : %lli\n", aio->
decode_packet.duration);
911 fprintf(stderr,
"timestamp : %" PRId64
"\n", aio->
timestamp);
912 fprintf(stderr,
"pts : %" PRId64
"\n", aio->
decode_packet.pts);
913 fprintf(stderr,
"dts : %" PRId64
"\n", aio->
decode_packet.dts);
918 fprintf(stderr,
"Reading cached frames: %i\n", aio->
got_frame);
922 res = decode_packet(aio, 1);
935 fprintf(stderr,
"ff_audioio_free\n");
956 if ((s->iformat && s->iformat->flags & AVFMT_NOFILE) || (s->flags & AVFMT_FLAG_CUSTOM_IO)) {
984 case AV_CODEC_ID_PCM_S16BE:
985 case AV_CODEC_ID_PCM_U16BE:
986 case AV_CODEC_ID_PCM_S32BE:
987 case AV_CODEC_ID_PCM_U32BE:
988 case AV_CODEC_ID_PCM_S24BE:
989 case AV_CODEC_ID_PCM_U24BE:
990 case AV_CODEC_ID_PCM_F32BE:
991 case AV_CODEC_ID_PCM_F64BE:
1003 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S16LE = %#x;\n", AV_CODEC_ID_PCM_S16LE);
1004 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S16BE = %#x;\n", AV_CODEC_ID_PCM_S16BE);
1005 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U16LE = %#x;\n", AV_CODEC_ID_PCM_U16LE);
1006 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U16BE = %#x;\n", AV_CODEC_ID_PCM_U16BE);
1007 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S8 = %#x;\n", AV_CODEC_ID_PCM_S8);
1008 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U8 = %#x;\n", AV_CODEC_ID_PCM_U8);
1009 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_MULAW = %#x;\n", AV_CODEC_ID_PCM_MULAW);
1010 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_ALAW = %#x;\n", AV_CODEC_ID_PCM_ALAW);
1011 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S32LE = %#x;\n", AV_CODEC_ID_PCM_S32LE);
1012 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S32BE = %#x;\n", AV_CODEC_ID_PCM_S32BE);
1013 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U32LE = %#x;\n", AV_CODEC_ID_PCM_U32LE);
1014 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U32BE = %#x;\n", AV_CODEC_ID_PCM_U32BE);
1015 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S24LE = %#x;\n", AV_CODEC_ID_PCM_S24LE);
1016 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S24BE = %#x;\n", AV_CODEC_ID_PCM_S24BE);
1017 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U24LE = %#x;\n", AV_CODEC_ID_PCM_U24LE);
1018 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_U24BE = %#x;\n", AV_CODEC_ID_PCM_U24BE);
1019 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S24DAUD = %#x;\n", AV_CODEC_ID_PCM_S24DAUD);
1020 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_ZORK = %#x;\n", AV_CODEC_ID_PCM_ZORK);
1021 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S16LE_PLANAR = %#x;\n", AV_CODEC_ID_PCM_S16LE_PLANAR);
1022 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_DVD = %#x;\n", AV_CODEC_ID_PCM_DVD);
1023 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_F32BE = %#x;\n", AV_CODEC_ID_PCM_F32BE);
1024 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_F32LE = %#x;\n", AV_CODEC_ID_PCM_F32LE);
1025 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_F64BE = %#x;\n", AV_CODEC_ID_PCM_F64BE);
1026 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_F64LE = %#x;\n", AV_CODEC_ID_PCM_F64LE);
1027 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_BLURAY = %#x;\n", AV_CODEC_ID_PCM_BLURAY);
1028 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_LXF = %#x;\n", AV_CODEC_ID_PCM_LXF);
1029 fprintf(stdout,
"private final int AV_CODEC_ID_S302M = %#x;\n", AV_CODEC_ID_S302M);
1030 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S8_PLANAR = %#x;\n", AV_CODEC_ID_PCM_S8_PLANAR);
1031 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S24LE_PLANAR = %#x;\n", AV_CODEC_ID_PCM_S24LE_PLANAR);
1032 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S32LE_PLANAR = %#x;\n", AV_CODEC_ID_PCM_S32LE_PLANAR);
1033 fprintf(stdout,
"private final int AV_CODEC_ID_PCM_S16BE_PLANAR = %#x;\n", AV_CODEC_ID_PCM_S16BE_PLANAR);
1036 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_QT = %#x;\n", AV_CODEC_ID_ADPCM_IMA_QT);
1037 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_WAV = %#x;\n", AV_CODEC_ID_ADPCM_IMA_WAV);
1038 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_DK3 = %#x;\n", AV_CODEC_ID_ADPCM_IMA_DK3);
1039 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_DK4 = %#x;\n", AV_CODEC_ID_ADPCM_IMA_DK4);
1040 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_WS = %#x;\n", AV_CODEC_ID_ADPCM_IMA_WS);
1041 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_SMJPEG = %#x;\n", AV_CODEC_ID_ADPCM_IMA_SMJPEG);
1042 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_MS = %#x;\n", AV_CODEC_ID_ADPCM_MS);
1043 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_4XM = %#x;\n", AV_CODEC_ID_ADPCM_4XM);
1044 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_XA = %#x;\n", AV_CODEC_ID_ADPCM_XA);
1045 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_ADX = %#x;\n", AV_CODEC_ID_ADPCM_ADX);
1046 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_EA = %#x;\n", AV_CODEC_ID_ADPCM_EA);
1047 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_G726 = %#x;\n", AV_CODEC_ID_ADPCM_G726);
1048 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_CT = %#x;\n", AV_CODEC_ID_ADPCM_CT);
1049 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_SWF = %#x;\n", AV_CODEC_ID_ADPCM_SWF);
1050 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_YAMAHA = %#x;\n", AV_CODEC_ID_ADPCM_YAMAHA);
1051 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_SBPRO_4 = %#x;\n", AV_CODEC_ID_ADPCM_SBPRO_4);
1052 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_SBPRO_3 = %#x;\n", AV_CODEC_ID_ADPCM_SBPRO_3);
1053 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_SBPRO_2 = %#x;\n", AV_CODEC_ID_ADPCM_SBPRO_2);
1054 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_THP = %#x;\n", AV_CODEC_ID_ADPCM_THP);
1055 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_AMV = %#x;\n", AV_CODEC_ID_ADPCM_IMA_AMV);
1056 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_EA_R1 = %#x;\n", AV_CODEC_ID_ADPCM_EA_R1);
1057 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_EA_R3 = %#x;\n", AV_CODEC_ID_ADPCM_EA_R3);
1058 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_EA_R2 = %#x;\n", AV_CODEC_ID_ADPCM_EA_R2);
1059 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_EA_SEAD = %#x;\n", AV_CODEC_ID_ADPCM_IMA_EA_SEAD);
1060 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_EA_EACS = %#x;\n", AV_CODEC_ID_ADPCM_IMA_EA_EACS);
1061 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_EA_XAS = %#x;\n", AV_CODEC_ID_ADPCM_EA_XAS);
1062 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_EA_MAXIS_XA = %#x;\n", AV_CODEC_ID_ADPCM_EA_MAXIS_XA);
1063 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_ISS = %#x;\n", AV_CODEC_ID_ADPCM_IMA_ISS);
1064 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_G722 = %#x;\n", AV_CODEC_ID_ADPCM_G722);
1065 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_APC = %#x;\n", AV_CODEC_ID_ADPCM_IMA_APC);
1066 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_VIMA = %#x;\n", AV_CODEC_ID_ADPCM_VIMA);
1067 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_AFC = %#x;\n", AV_CODEC_ID_ADPCM_AFC);
1068 fprintf(stdout,
"private final int AV_CODEC_ID_ADPCM_IMA_OKI = %#x;\n", AV_CODEC_ID_ADPCM_IMA_OKI);
1071 fprintf(stdout,
"private final int AV_CODEC_ID_AMR_NB = %#x;\n", AV_CODEC_ID_AMR_NB);
1072 fprintf(stdout,
"private final int AV_CODEC_ID_AMR_WB = %#x;\n", AV_CODEC_ID_AMR_WB);
1075 fprintf(stdout,
"private final int AV_CODEC_ID_RA_144 = %#x;\n", AV_CODEC_ID_RA_144);
1076 fprintf(stdout,
"private final int AV_CODEC_ID_RA_288 = %#x;\n", AV_CODEC_ID_RA_288);
1079 fprintf(stdout,
"private final int AV_CODEC_ID_ROQ_DPCM = %#x;\n", AV_CODEC_ID_ROQ_DPCM);
1080 fprintf(stdout,
"private final int AV_CODEC_ID_INTERPLAY_DPCM = %#x;\n", AV_CODEC_ID_INTERPLAY_DPCM);
1081 fprintf(stdout,
"private final int AV_CODEC_ID_XAN_DPCM = %#x;\n", AV_CODEC_ID_XAN_DPCM);
1082 fprintf(stdout,
"private final int AV_CODEC_ID_SOL_DPCM = %#x;\n", AV_CODEC_ID_SOL_DPCM);
1085 fprintf(stdout,
"private final int AV_CODEC_ID_MP2 = %#x;\n", AV_CODEC_ID_MP2);
1086 fprintf(stdout,
"private final int AV_CODEC_ID_MP3 = %#x;\n", AV_CODEC_ID_MP3);
1087 fprintf(stdout,
"private final int AV_CODEC_ID_AAC = %#x;\n", AV_CODEC_ID_AAC);
1088 fprintf(stdout,
"private final int AV_CODEC_ID_AC3 = %#x;\n", AV_CODEC_ID_AC3);
1089 fprintf(stdout,
"private final int AV_CODEC_ID_DTS = %#x;\n", AV_CODEC_ID_DTS);
1090 fprintf(stdout,
"private final int AV_CODEC_ID_VORBIS = %#x;\n", AV_CODEC_ID_VORBIS);
1091 fprintf(stdout,
"private final int AV_CODEC_ID_DVAUDIO = %#x;\n", AV_CODEC_ID_DVAUDIO);
1092 fprintf(stdout,
"private final int AV_CODEC_ID_WMAV1 = %#x;\n", AV_CODEC_ID_WMAV1);
1093 fprintf(stdout,
"private final int AV_CODEC_ID_WMAV2 = %#x;\n", AV_CODEC_ID_WMAV2);
1094 fprintf(stdout,
"private final int AV_CODEC_ID_MACE3 = %#x;\n", AV_CODEC_ID_MACE3);
1095 fprintf(stdout,
"private final int AV_CODEC_ID_MACE6 = %#x;\n", AV_CODEC_ID_MACE6);
1096 fprintf(stdout,
"private final int AV_CODEC_ID_VMDAUDIO = %#x;\n", AV_CODEC_ID_VMDAUDIO);
1097 fprintf(stdout,
"private final int AV_CODEC_ID_FLAC = %#x;\n", AV_CODEC_ID_FLAC);
1098 fprintf(stdout,
"private final int AV_CODEC_ID_MP3ADU = %#x;\n", AV_CODEC_ID_MP3ADU);
1099 fprintf(stdout,
"private final int AV_CODEC_ID_MP3ON4 = %#x;\n", AV_CODEC_ID_MP3ON4);
1100 fprintf(stdout,
"private final int AV_CODEC_ID_SHORTEN = %#x;\n", AV_CODEC_ID_SHORTEN);
1101 fprintf(stdout,
"private final int AV_CODEC_ID_ALAC = %#x;\n", AV_CODEC_ID_ALAC);
1102 fprintf(stdout,
"private final int AV_CODEC_ID_WESTWOOD_SND1 = %#x;\n", AV_CODEC_ID_WESTWOOD_SND1);
1103 fprintf(stdout,
"private final int AV_CODEC_ID_GSM = %#x;\n", AV_CODEC_ID_GSM);
1104 fprintf(stdout,
"private final int AV_CODEC_ID_QDM2 = %#x;\n", AV_CODEC_ID_QDM2);
1105 fprintf(stdout,
"private final int AV_CODEC_ID_COOK = %#x;\n", AV_CODEC_ID_COOK);
1106 fprintf(stdout,
"private final int AV_CODEC_ID_TRUESPEECH = %#x;\n", AV_CODEC_ID_TRUESPEECH);
1107 fprintf(stdout,
"private final int AV_CODEC_ID_TTA = %#x;\n", AV_CODEC_ID_TTA);
1108 fprintf(stdout,
"private final int AV_CODEC_ID_SMACKAUDIO = %#x;\n", AV_CODEC_ID_SMACKAUDIO);
1109 fprintf(stdout,
"private final int AV_CODEC_ID_QCELP = %#x;\n", AV_CODEC_ID_QCELP);
1110 fprintf(stdout,
"private final int AV_CODEC_ID_WAVPACK = %#x;\n", AV_CODEC_ID_WAVPACK);
1111 fprintf(stdout,
"private final int AV_CODEC_ID_DSICINAUDIO = %#x;\n", AV_CODEC_ID_DSICINAUDIO);
1112 fprintf(stdout,
"private final int AV_CODEC_ID_IMC = %#x;\n", AV_CODEC_ID_IMC);
1113 fprintf(stdout,
"private final int AV_CODEC_ID_MUSEPACK7 = %#x;\n", AV_CODEC_ID_MUSEPACK7);
1114 fprintf(stdout,
"private final int AV_CODEC_ID_MLP = %#x;\n", AV_CODEC_ID_MLP);
1115 fprintf(stdout,
"private final int AV_CODEC_ID_GSM_MS = %#x;\n", AV_CODEC_ID_GSM_MS);
1116 fprintf(stdout,
"private final int AV_CODEC_ID_ATRAC3 = %#x;\n", AV_CODEC_ID_ATRAC3);
1118 fprintf(stdout,
"private final int AV_CODEC_ID_APE = %#x;\n", AV_CODEC_ID_APE);
1119 fprintf(stdout,
"private final int AV_CODEC_ID_NELLYMOSER = %#x;\n", AV_CODEC_ID_NELLYMOSER);
1120 fprintf(stdout,
"private final int AV_CODEC_ID_MUSEPACK8 = %#x;\n", AV_CODEC_ID_MUSEPACK8);
1121 fprintf(stdout,
"private final int AV_CODEC_ID_SPEEX = %#x;\n", AV_CODEC_ID_SPEEX);
1122 fprintf(stdout,
"private final int AV_CODEC_ID_WMAVOICE = %#x;\n", AV_CODEC_ID_WMAVOICE);
1123 fprintf(stdout,
"private final int AV_CODEC_ID_WMAPRO = %#x;\n", AV_CODEC_ID_WMAPRO);
1124 fprintf(stdout,
"private final int AV_CODEC_ID_WMALOSSLESS = %#x;\n", AV_CODEC_ID_WMALOSSLESS);
1125 fprintf(stdout,
"private final int AV_CODEC_ID_ATRAC3P = %#x;\n", AV_CODEC_ID_ATRAC3P);
1126 fprintf(stdout,
"private final int AV_CODEC_ID_EAC3 = %#x;\n", AV_CODEC_ID_EAC3);
1127 fprintf(stdout,
"private final int AV_CODEC_ID_SIPR = %#x;\n", AV_CODEC_ID_SIPR);
1128 fprintf(stdout,
"private final int AV_CODEC_ID_MP1 = %#x;\n", AV_CODEC_ID_MP1);
1129 fprintf(stdout,
"private final int AV_CODEC_ID_TWINVQ = %#x;\n", AV_CODEC_ID_TWINVQ);
1130 fprintf(stdout,
"private final int AV_CODEC_ID_TRUEHD = %#x;\n", AV_CODEC_ID_TRUEHD);
1131 fprintf(stdout,
"private final int AV_CODEC_ID_MP4ALS = %#x;\n", AV_CODEC_ID_MP4ALS);
1132 fprintf(stdout,
"private final int AV_CODEC_ID_ATRAC1 = %#x;\n", AV_CODEC_ID_ATRAC1);
1133 fprintf(stdout,
"private final int AV_CODEC_ID_BINKAUDIO_RDFT = %#x;\n", AV_CODEC_ID_BINKAUDIO_RDFT);
1134 fprintf(stdout,
"private final int AV_CODEC_ID_BINKAUDIO_DCT = %#x;\n", AV_CODEC_ID_BINKAUDIO_DCT);
1135 fprintf(stdout,
"private final int AV_CODEC_ID_AAC_LATM = %#x;\n", AV_CODEC_ID_AAC_LATM);
1136 fprintf(stdout,
"private final int AV_CODEC_ID_QDMC = %#x;\n", AV_CODEC_ID_QDMC);
1137 fprintf(stdout,
"private final int AV_CODEC_ID_CELT = %#x;\n", AV_CODEC_ID_CELT);
1138 fprintf(stdout,
"private final int AV_CODEC_ID_G723_1 = %#x;\n", AV_CODEC_ID_G723_1);
1139 fprintf(stdout,
"private final int AV_CODEC_ID_G729 = %#x;\n", AV_CODEC_ID_G729);
1140 fprintf(stdout,
"private final int AV_CODEC_ID_8SVX_EXP = %#x;\n", AV_CODEC_ID_8SVX_EXP);
1141 fprintf(stdout,
"private final int AV_CODEC_ID_8SVX_FIB = %#x;\n", AV_CODEC_ID_8SVX_FIB);
1142 fprintf(stdout,
"private final int AV_CODEC_ID_BMV_AUDIO = %#x;\n", AV_CODEC_ID_BMV_AUDIO);
1143 fprintf(stdout,
"private final int AV_CODEC_ID_RALF = %#x;\n", AV_CODEC_ID_RALF);
1144 fprintf(stdout,
"private final int AV_CODEC_ID_IAC = %#x;\n", AV_CODEC_ID_IAC);
1145 fprintf(stdout,
"private final int AV_CODEC_ID_ILBC = %#x;\n", AV_CODEC_ID_ILBC);
1146 fprintf(stdout,
"private final int AV_CODEC_ID_COMFORT_NOISE = %#x;\n", AV_CODEC_ID_COMFORT_NOISE);
1147 fprintf(stdout,
"private final int AV_CODEC_ID_FFWAVESYNTH = %#x;\n", AV_CODEC_ID_FFWAVESYNTH);
1150 fprintf(stdout,
"private final int AV_CODEC_ID_SONIC = %#x;\n", AV_CODEC_ID_SONIC);
1151 fprintf(stdout,
"private final int AV_CODEC_ID_SONIC_LS = %#x;\n", AV_CODEC_ID_SONIC_LS);
1152 fprintf(stdout,
"private final int AV_CODEC_ID_PAF_AUDIO = %#x;\n", AV_CODEC_ID_PAF_AUDIO);
1153 fprintf(stdout,
"private final int AV_CODEC_ID_OPUS = %#x;\n", AV_CODEC_ID_OPUS);
1154 fprintf(stdout,
"private final int AV_CODEC_ID_TAK = %#x;\n", AV_CODEC_ID_TAK);
1155 fprintf(stdout,
"private final int AV_CODEC_ID_EVRC = %#x;\n", AV_CODEC_ID_EVRC);
1156 fprintf(stdout,
"private final int AV_CODEC_ID_SMV = %#x;\n", AV_CODEC_ID_SMV);
1165 avformat_network_init();
1167 return JNI_VERSION_1_6;
void logFine(FFAudioIO *aio, int err, const char *message)
Log a debug message.
void logWarning(FFAudioIO *aio, int err, const char *message)
Log a warning.
int stream_index
Index of the audio stream we are using.
void throwIOExceptionIfError(JNIEnv *env, int err, const char *message)
Throws an IOException.
AVFormatContext * format_context
Current AVFormatContext.
AVStream * stream
Audio stream we are interested in.
uint8_t ** audio_data
Audio data (accommodates multiple planes)
uint64_t decoded_samples
Running count of decoded samples.
void throwFileNotFoundExceptionIfError(JNIEnv *env, int err, const char *message)
Throws an IllegalArgumentException.
int ff_open_stream(JNIEnv *env, AVStream *stream, AVCodecContext **context)
Opens the given stream, i.e.
int ff_big_endian(enum AVCodecID codec_id)
Indicates whether the given id belongs to a big endian codec.
jint java_buffer_capacity
Current capacity of the Java nativeBuffer.
void throwUnsupportedAudioFileExceptionIfError(JNIEnv *env, int err, const char *message)
Throws an UnsupportedAudioFileException.
int ff_open_file(JNIEnv *env, AVFormatContext **format_context, AVStream **openedStream, AVCodecContext **context, int *stream_index, const char *url)
Opens the input file/url, allocates a AVFormatContext for it and opens the audio stream with an appro...
int ff_fill_buffer(FFAudioIO *aio)
Reads a frame via av_read_frame(AVFormatContext, AVPacket), decodes it to a AVPacket, and writes the result to the Java-side nativeBuffer.
int ff_init_audioio(JNIEnv *env, FFAudioIO *aio)
Initialize our main context FFAudioIO, so that SwrContext, decode buffers and the encoder are set to ...
int got_frame
Indicates whether we got a frame in the last call to avcodec_decode_audio4.
int ff_init_encoder(JNIEnv *env, FFAudioIO *aio, AVCodec *encoder)
Allocates and initializes the encoder context and frame in FFAudioIO.
AVFrame * encode_frame
AVFrame for encoding.
int ff_open_format_context(JNIEnv *env, AVFormatContext **format_context, const char *url)
Opens the input file/url and allocates a AVFormatContext for it, but does not open the audio stream w...
SwrContext * swr_context
Resampling context.
AVPacket decode_packet
AVPacket for decoding.
uint64_t resampled_samples
Count of resampled samples.
JNIEnv * env
JNI environment.
AVPacket encode_packet
AVPacket for encoding.
AVCodec * ff_find_encoder(enum AVSampleFormat sampleFormat, int bits, int big_endian, int signedSamples)
Finds an AVCodec encoder for the given sample format, bits per sample, byte order and signed/unsigned...
void throwIndexOutOfBoundsExceptionIfError(JNIEnv *env, int err, int index)
Throws an IndexOutOfBoundsException.
AVCodecContext * decode_context
Codec context for decoding.
AVCodecContext * encode_context
Codec context for encoding.
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
Make sure FFmpeg is initialized all the way.
Central context representing the native peer to the Java FFNativePeerInputStream object.
AVFrame * decode_frame
AVFrame for decoding.
void ff_audioio_free(FFAudioIO *aio)
Free all resources held by aio and then itself.
uint64_t timestamp
Current timestamp (in samples, not seconds)
jobject java_instance
Calling Java instance.