Merge pull request #6999 from xufuji456:dev-v2
PiperOrigin-RevId: 298544278
This commit is contained in:
commit
aeea17dd0f
@ -33,7 +33,7 @@ public final class FfmpegLibrary {
|
|||||||
private static final String TAG = "FfmpegLibrary";
|
private static final String TAG = "FfmpegLibrary";
|
||||||
|
|
||||||
private static final LibraryLoader LOADER =
|
private static final LibraryLoader LOADER =
|
||||||
new LibraryLoader("avutil", "avresample", "swresample", "avcodec", "ffmpeg");
|
new LibraryLoader("avutil", "swresample", "avcodec", "ffmpeg");
|
||||||
|
|
||||||
private FfmpegLibrary() {}
|
private FfmpegLibrary() {}
|
||||||
|
|
||||||
|
@ -21,11 +21,6 @@ LOCAL_MODULE := libavcodec
|
|||||||
LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so
|
LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so
|
||||||
include $(PREBUILT_SHARED_LIBRARY)
|
include $(PREBUILT_SHARED_LIBRARY)
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := libavresample
|
|
||||||
LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so
|
|
||||||
include $(PREBUILT_SHARED_LIBRARY)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
LOCAL_MODULE := libswresample
|
LOCAL_MODULE := libswresample
|
||||||
LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so
|
LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so
|
||||||
@ -40,6 +35,6 @@ include $(CLEAR_VARS)
|
|||||||
LOCAL_MODULE := ffmpeg
|
LOCAL_MODULE := ffmpeg
|
||||||
LOCAL_SRC_FILES := ffmpeg_jni.cc
|
LOCAL_SRC_FILES := ffmpeg_jni.cc
|
||||||
LOCAL_C_INCLUDES := ffmpeg
|
LOCAL_C_INCLUDES := ffmpeg
|
||||||
LOCAL_SHARED_LIBRARIES := libavcodec libavresample libswresample libavutil
|
LOCAL_SHARED_LIBRARIES := libavcodec libswresample libavutil
|
||||||
LOCAL_LDLIBS := -Lffmpeg/android-libs/$(TARGET_ARCH_ABI) -llog
|
LOCAL_LDLIBS := -Lffmpeg/android-libs/$(TARGET_ARCH_ABI) -llog
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
@ -32,7 +32,7 @@ COMMON_OPTIONS="
|
|||||||
--disable-postproc
|
--disable-postproc
|
||||||
--disable-avfilter
|
--disable-avfilter
|
||||||
--disable-symver
|
--disable-symver
|
||||||
--enable-avresample
|
--disable-avresample
|
||||||
--enable-swresample
|
--enable-swresample
|
||||||
"
|
"
|
||||||
TOOLCHAIN_PREFIX="${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/bin"
|
TOOLCHAIN_PREFIX="${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/bin"
|
||||||
|
@ -26,10 +26,10 @@ extern "C" {
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
#include <libavcodec/avcodec.h>
|
#include <libavcodec/avcodec.h>
|
||||||
#include <libavresample/avresample.h>
|
|
||||||
#include <libavutil/channel_layout.h>
|
#include <libavutil/channel_layout.h>
|
||||||
#include <libavutil/error.h>
|
#include <libavutil/error.h>
|
||||||
#include <libavutil/opt.h>
|
#include <libavutil/opt.h>
|
||||||
|
#include <libswresample/swresample.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LOG_TAG "ffmpeg_jni"
|
#define LOG_TAG "ffmpeg_jni"
|
||||||
@ -289,11 +289,11 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
|
|||||||
int sampleCount = frame->nb_samples;
|
int sampleCount = frame->nb_samples;
|
||||||
int dataSize = av_samples_get_buffer_size(NULL, channelCount, sampleCount,
|
int dataSize = av_samples_get_buffer_size(NULL, channelCount, sampleCount,
|
||||||
sampleFormat, 1);
|
sampleFormat, 1);
|
||||||
AVAudioResampleContext *resampleContext;
|
SwrContext *resampleContext;
|
||||||
if (context->opaque) {
|
if (context->opaque) {
|
||||||
resampleContext = (AVAudioResampleContext *) context->opaque;
|
resampleContext = (SwrContext *)context->opaque;
|
||||||
} else {
|
} else {
|
||||||
resampleContext = avresample_alloc_context();
|
resampleContext = swr_alloc();
|
||||||
av_opt_set_int(resampleContext, "in_channel_layout", channelLayout, 0);
|
av_opt_set_int(resampleContext, "in_channel_layout", channelLayout, 0);
|
||||||
av_opt_set_int(resampleContext, "out_channel_layout", channelLayout, 0);
|
av_opt_set_int(resampleContext, "out_channel_layout", channelLayout, 0);
|
||||||
av_opt_set_int(resampleContext, "in_sample_rate", sampleRate, 0);
|
av_opt_set_int(resampleContext, "in_sample_rate", sampleRate, 0);
|
||||||
@ -302,9 +302,9 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
|
|||||||
// The output format is always the requested format.
|
// The output format is always the requested format.
|
||||||
av_opt_set_int(resampleContext, "out_sample_fmt",
|
av_opt_set_int(resampleContext, "out_sample_fmt",
|
||||||
context->request_sample_fmt, 0);
|
context->request_sample_fmt, 0);
|
||||||
result = avresample_open(resampleContext);
|
result = swr_init(resampleContext);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
logError("avresample_open", result);
|
logError("swr_init", result);
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -312,7 +312,7 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
|
|||||||
}
|
}
|
||||||
int inSampleSize = av_get_bytes_per_sample(sampleFormat);
|
int inSampleSize = av_get_bytes_per_sample(sampleFormat);
|
||||||
int outSampleSize = av_get_bytes_per_sample(context->request_sample_fmt);
|
int outSampleSize = av_get_bytes_per_sample(context->request_sample_fmt);
|
||||||
int outSamples = avresample_get_out_samples(resampleContext, sampleCount);
|
int outSamples = swr_get_out_samples(resampleContext, sampleCount);
|
||||||
int bufferOutSize = outSampleSize * channelCount * outSamples;
|
int bufferOutSize = outSampleSize * channelCount * outSamples;
|
||||||
if (outSize + bufferOutSize > outputSize) {
|
if (outSize + bufferOutSize > outputSize) {
|
||||||
LOGE("Output buffer size (%d) too small for output data (%d).",
|
LOGE("Output buffer size (%d) too small for output data (%d).",
|
||||||
@ -320,15 +320,14 @@ int decodePacket(AVCodecContext *context, AVPacket *packet,
|
|||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
result = avresample_convert(resampleContext, &outputBuffer, bufferOutSize,
|
result = swr_convert(resampleContext, &outputBuffer, bufferOutSize,
|
||||||
outSamples, frame->data, frame->linesize[0],
|
(const uint8_t **)frame->data, frame->nb_samples);
|
||||||
sampleCount);
|
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
logError("avresample_convert", result);
|
logError("swr_convert", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
int available = avresample_available(resampleContext);
|
int available = swr_get_out_samples(resampleContext, 0);
|
||||||
if (available != 0) {
|
if (available != 0) {
|
||||||
LOGE("Expected no samples remaining after resampling, but found %d.",
|
LOGE("Expected no samples remaining after resampling, but found %d.",
|
||||||
available);
|
available);
|
||||||
@ -351,9 +350,9 @@ void releaseContext(AVCodecContext *context) {
|
|||||||
if (!context) {
|
if (!context) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AVAudioResampleContext *resampleContext;
|
SwrContext *swrContext;
|
||||||
if ((resampleContext = (AVAudioResampleContext *) context->opaque)) {
|
if ((swrContext = (SwrContext *)context->opaque)) {
|
||||||
avresample_free(&resampleContext);
|
swr_free(&swrContext);
|
||||||
context->opaque = NULL;
|
context->opaque = NULL;
|
||||||
}
|
}
|
||||||
avcodec_free_context(&context);
|
avcodec_free_context(&context);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user