NDK Skype SILK 코덱 컴파일 안드로이드 개발2011/06/17 13:56
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
SILK := silk
LOCAL_MODULE := silk
LOCAL_SRC_FILES := $(SILK)/src/SKP_Silk_A2NLSF.c \
$(SILK)/src/SKP_Silk_allpass_int.c \
$(SILK)/src/SKP_Silk_ana_filt_bank_1.c \
$(SILK)/src/SKP_Silk_apply_sine_window.c \
$(SILK)/src/SKP_Silk_array_maxabs.c \
$(SILK)/src/SKP_Silk_autocorr.c \
$(SILK)/src/SKP_Silk_biquad.c \
$(SILK)/src/SKP_Silk_biquad_alt.c \
$(SILK)/src/SKP_Silk_burg_modified.c \
$(SILK)/src/SKP_Silk_bwexpander.c \
$(SILK)/src/SKP_Silk_bwexpander_32.c \
$(SILK)/src/SKP_Silk_CNG.c \
$(SILK)/src/SKP_Silk_code_signs.c \
$(SILK)/src/SKP_Silk_control_codec_FIX.c \
$(SILK)/src/SKP_Silk_corrMatrix_FIX.c \
$(SILK)/src/SKP_Silk_create_init_destroy.c \
$(SILK)/src/SKP_Silk_decoder_set_fs.c \
$(SILK)/src/SKP_Silk_decode_core.c \
$(SILK)/src/SKP_Silk_decode_frame.c \
$(SILK)/src/SKP_Silk_decode_parameters.c \
$(SILK)/src/SKP_Silk_decode_pitch.c \
$(SILK)/src/SKP_Silk_decode_pulses.c \
$(SILK)/src/SKP_Silk_dec_API.c \
$(SILK)/src/SKP_Silk_detect_SWB_input.c \
$(SILK)/src/SKP_Silk_encode_frame_FIX.c \
$(SILK)/src/SKP_Silk_encode_parameters.c \
$(SILK)/src/SKP_Silk_encode_pulses.c \
$(SILK)/src/SKP_Silk_enc_API.c \
$(SILK)/src/SKP_Silk_find_LPC_FIX.c \
$(SILK)/src/SKP_Silk_find_LTP_FIX.c \
$(SILK)/src/SKP_Silk_find_pitch_lags_FIX.c \
$(SILK)/src/SKP_Silk_find_pred_coefs_FIX.c \
$(SILK)/src/SKP_Silk_gain_quant.c \
$(SILK)/src/SKP_Silk_HP_variable_cutoff_FIX.c \
$(SILK)/src/SKP_Silk_init_encoder_FIX.c \
$(SILK)/src/SKP_Silk_inner_prod_aligned.c \
$(SILK)/src/SKP_Silk_interpolate.c \
$(SILK)/src/SKP_Silk_k2a.c \
$(SILK)/src/SKP_Silk_k2a_Q16.c \
$(SILK)/src/SKP_Silk_LBRR_reset.c \
$(SILK)/src/SKP_Silk_lin2log.c \
$(SILK)/src/SKP_Silk_log2lin.c \
$(SILK)/src/SKP_Silk_lowpass_int.c \
$(SILK)/src/SKP_Silk_lowpass_short.c \
$(SILK)/src/SKP_Silk_LPC_inv_pred_gain.c \
$(SILK)/src/SKP_Silk_LPC_stabilize.c \
$(SILK)/src/SKP_Silk_LPC_synthesis_filter.c \
$(SILK)/src/SKP_Silk_LPC_synthesis_order16.c \
$(SILK)/src/SKP_Silk_LP_variable_cutoff.c \
$(SILK)/src/SKP_Silk_LSF_cos_table.c \
$(SILK)/src/SKP_Silk_LTP_analysis_filter_FIX.c \
$(SILK)/src/SKP_Silk_LTP_scale_ctrl_FIX.c \
$(SILK)/src/SKP_Silk_MA.c \
$(SILK)/src/SKP_Silk_NLSF2A.c \
$(SILK)/src/SKP_Silk_NLSF2A_stable.c \
$(SILK)/src/SKP_Silk_NLSF_MSVQ_decode.c \
$(SILK)/src/SKP_Silk_NLSF_MSVQ_encode_FIX.c \
$(SILK)/src/SKP_Silk_NLSF_stabilize.c \
$(SILK)/src/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c \
$(SILK)/src/SKP_Silk_NLSF_VQ_sum_error_FIX.c \
$(SILK)/src/SKP_Silk_NLSF_VQ_weights_laroia.c \
$(SILK)/src/SKP_Silk_noise_shape_analysis_FIX.c \
$(SILK)/src/SKP_Silk_NSQ.c \
$(SILK)/src/SKP_Silk_NSQ_del_dec.c \
$(SILK)/src/SKP_Silk_pitch_analysis_core.c \
$(SILK)/src/SKP_Silk_pitch_est_tables.c \
$(SILK)/src/SKP_Silk_PLC.c \
$(SILK)/src/SKP_Silk_prefilter_FIX.c \
$(SILK)/src/SKP_Silk_process_gains_FIX.c \
$(SILK)/src/SKP_Silk_process_NLSFs_FIX.c \
$(SILK)/src/SKP_Silk_quant_LTP_gains_FIX.c \
$(SILK)/src/SKP_Silk_range_coder.c \
$(SILK)/src/SKP_Silk_regularize_correlations_FIX.c \
$(SILK)/src/SKP_Silk_resampler.c \
$(SILK)/src/SKP_Silk_resampler_down2.c \
$(SILK)/src/SKP_Silk_resampler_down2_3.c \
$(SILK)/src/SKP_Silk_resampler_down3.c \
$(SILK)/src/SKP_Silk_resampler_private_AR2.c \
$(SILK)/src/SKP_Silk_resampler_private_ARMA4.c \
$(SILK)/src/SKP_Silk_resampler_private_copy.c \
$(SILK)/src/SKP_Silk_resampler_private_down4.c \
$(SILK)/src/SKP_Silk_resampler_private_down_FIR.c \
$(SILK)/src/SKP_Silk_resampler_private_IIR_FIR.c \
$(SILK)/src/SKP_Silk_resampler_private_up2_HQ.c \
$(SILK)/src/SKP_Silk_resampler_private_up4.c \
$(SILK)/src/SKP_Silk_resampler_rom.c \
$(SILK)/src/SKP_Silk_resampler_up2.c \
$(SILK)/src/SKP_Silk_residual_energy16_FIX.c \
$(SILK)/src/SKP_Silk_residual_energy_FIX.c \
$(SILK)/src/SKP_Silk_scale_copy_vector16.c \
$(SILK)/src/SKP_Silk_scale_vector.c \
$(SILK)/src/SKP_Silk_schur.c \
$(SILK)/src/SKP_Silk_schur64.c \
$(SILK)/src/SKP_Silk_shell_coder.c \
$(SILK)/src/SKP_Silk_sigm_Q15.c \
$(SILK)/src/SKP_Silk_solve_LS_FIX.c \
$(SILK)/src/SKP_Silk_sort.c \
$(SILK)/src/SKP_Silk_sum_sqr_shift.c \
$(SILK)/src/SKP_Silk_tables_gain.c \
$(SILK)/src/SKP_Silk_tables_LTP.c \
$(SILK)/src/SKP_Silk_tables_NLSF_CB0_10.c \
$(SILK)/src/SKP_Silk_tables_NLSF_CB0_16.c \
$(SILK)/src/SKP_Silk_tables_NLSF_CB1_10.c \
$(SILK)/src/SKP_Silk_tables_NLSF_CB1_16.c \
$(SILK)/src/SKP_Silk_tables_other.c \
$(SILK)/src/SKP_Silk_tables_pitch_lag.c \
$(SILK)/src/SKP_Silk_tables_pulses_per_block.c \
$(SILK)/src/SKP_Silk_tables_sign.c \
$(SILK)/src/SKP_Silk_tables_type_offset.c \
$(SILK)/src/SKP_Silk_VAD.c \
$(SILK)/src/SKP_Silk_VQ_nearest_neighbor_FIX.c \
$(SILK)/src/SKP_Silk_A2NLSF_arm.S \
$(SILK)/src/SKP_Silk_allpass_int_arm.S \
$(SILK)/src/SKP_Silk_ana_filt_bank_1_arm.S \
$(SILK)/src/SKP_Silk_apply_sine_window_arm.S \
$(SILK)/src/SKP_Silk_array_maxabs_arm.S \
$(SILK)/src/SKP_Silk_biquad_alt_arm.S \
$(SILK)/src/SKP_Silk_biquad_arm.S \
$(SILK)/src/SKP_Silk_clz_arm.S \
$(SILK)/src/SKP_Silk_inner_prod_aligned_arm.S \
$(SILK)/src/SKP_Silk_lin2log_arm.S \
$(SILK)/src/SKP_Silk_LPC_inv_pred_gain_arm.S \
$(SILK)/src/SKP_Silk_MA_arm.S \
$(SILK)/src/SKP_Silk_resampler_down2_arm.S \
$(SILK)/src/SKP_Silk_resampler_private_AR2_arm.S \
$(SILK)/src/SKP_Silk_resampler_private_ARMA4_arm.S \
$(SILK)/src/SKP_Silk_resampler_private_up2_HQ_arm.S \
$(SILK)/src/SKP_Silk_resampler_up2_arm.S \
$(SILK)/src/SKP_Silk_scale_add_vector32_arm.S \
$(SILK)/src/SKP_Silk_schur64_arm.S \
$(SILK)/src/SKP_Silk_sigm_Q15_arm.S \
$(SILK)/src/SKP_Silk_sum_vec_arm.S
SILK_CFLAGS = -DFIXED_POINT -DEXPORT="" -DUSE_ALLOCA
SILK_CFLAGS += -fstrict-aliasing -fprefetch-loop-arrays
SILK_CFLAGS += -march=armv7-a -mtune=cortex-a8 -mfpu=neon
SILK_CFLAGS += -D__ARM_EABI__ -D__ARM_ARCH_7A__ -D__ARM_NEON__
TARGET_ARCH := arm
TARGET_PLATFORM := android-8
TARGET_ARCH_ABI := armeabi-v7a
LOCAL_ARM_NEON := true
LOCAL_ARM_MODE := arm
#LOCAL_CFLAGS := $(SILK_CFLAGS)
LOCAL_CFLAGS := -O3
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(SILK)/src $(LOCAL_PATH)/$(SILK)/interface
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := silk16_jni
LOCAL_SRC_FILES := silk16_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(SILK)/src $(LOCAL_PATH)/$(SILK)/interface
LOCAL_CFLAGS = -O3
LOCAL_STATIC_LIBRARIES := silk
LOCAL_ARM_MODE := arm
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := armeabi-v7a
TARGET_ARCH_ABI := armeabi-v7a
X264 라이브러리를 이용한 h.264 인코딩 영상/음성 처리2011/06/10 10:18
x264_param_t param;
x264_param_default_preset(¶m, "veryfast", "zerolatency");
param.i_threads = 1;
param.i_width = width;
param.i_height = height;
param.i_fps_num = fps;
param.i_fps_den = 1;
// Intra refres:
param.i_keyint_max = fps;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;
//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;
x264_param_apply_profile(¶m, "baseline");
2) 인코더 초기화
x264_t* encoder = x264_encoder_open(¶m);
x264_picture_t pic_in, pic_out;
x264_picture_alloc(&pic_in, X264_CSP_I420, w, h)
3) 인코딩 처리
//data is a pointer to you RGB structure
int srcstride = w*3; //RGB stride is just 3*width
sws_scale(convertCtx, &data, &srcstride, 0, h, pic_in.img.plane, pic_in.img.stride);
x264_nal_t* nals;
int i_nals;
int frame_size = x264_encoder_encode(encoder, &nals, &i_nals, &pic_in, &pic_out);
if (frame_size >= 0)
{
// OK
}
H.264 Profile 및 Level 영상/음성 처리2011/06/10 10:11
NDK ffmpeg 컴파일 (neon 사용) 안드로이드 개발2011/06/09 17:56
mkdir ffmpeg-android
cd ffmpeg-android
svn checkout -r 26402 svn://svn.ffmpeg.org/ffmpeg/trunk/ ffmpeg
build.sh
echo NDK variable not set, assuming ${HOME}/android-ndk
export NDK_ROOT=${HOME}/android-ndk
fi
# Expand the prebuilt/* path into the correct one
TOOLCHAIN=`echo $NDK_ROOT/build/prebuilt/*/arm-eabi-4.4.0`
export PATH=$TOOLCHAIN/bin:$PATH
EXTRA_LDFLAGS="-nostdlib $SDK/usr/lib/libc.so $SDK/usr/lib/libm.so -Wl,-rpath-link=$SDK/usr/lib -L$TOOLCHAIN/lib/gcc/arm-eabi/4.4.0"
EXTRA_LIBS="-lgcc"
FLAGS="$FLAGS --prefix=../build/ffmpeg"
FLAGS="$FLAGS --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-encoders --disable-protocols --disable-muxers --disable-demuxers --disable-devices --disable-debug --disable-network"
FLAGS="$FLAGS --disable-decoders --enable-decoder=h264 --enable-decoder=vp8 --disable-parsers --disable-filters --disable-bsfs"
rm -rf ../build/ffmpeg
mkdir -p ../build/ffmpeg
echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-libs="$EXTRA_LIBS" > ../build/ffmpeg/info.txt
./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-libs="$EXTRA_LIBS" | tee ../build/ffmpeg/configuration.txt
[ $PIPESTATUS == 0 ] || exit 1
make clean
make -j4 || exit 1
make install || exit 1
