티스토리 툴바


달력

01

« 2012/01 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
회사 퇴직하기 전 갤럭시탭용으로 3개월동안 죽어라 고생해서 만든 프로그램인데...

 
Posted by 서동호
2011/06/17 13:56

NDK Skype SILK 코덱 컴파일 안드로이드 개발2011/06/17 13:56

SILK 코덱 버전 1.0.7 ARM 사용 (http://developer.skype.com/silk)

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 


Posted by 서동호
1) x264_param_t 파라미터 설정

x264_param_t param;
 

x264_param_default_preset(&param, "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(&param, "baseline");

 
2) 인코더 초기화 

x264_t* encoder = x264_encoder_open(&param);

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

}

 
TAG x264
Posted by 서동호
2011/06/10 10:11

H.264 Profile 및 Level 영상/음성 처리2011/06/10 10:11

■ H.264 Profile 종류                                                                                                  
- Baseline Profile (BP)         : 화상회의 및 모바일 용도의 프로파일
- Main Profile (MP)               : 방송용 영상과 저장용 영상을 위한 프로파일
- Extended Profile (XP)         : Network Streaming 목적의 프로파일
- High Profile (HiP)             : 방송용 영상과 ODD 저장을 위한 HD용 프로파일 (Ex. 블루레이 저장용)
- High 10 Profile (Hi10P)       : 일반적인 상용제품의 프로파일을 넘어서는 고급 프로파일
- High 4:2:2 Profile (Hi422P) : 전문가용 Interlaced 고급 프로파일
- High 4:4:4 Profile (Hi444P) : 4:4:4 크로마 샘플링을 12 bits/Sample까지 가능한 프로파일
 
■ H.264 Level의 의미                                                                                                 
- Level 분류 목적 : Codec의 처리 능력과 메모리 용량을 구분짓는 기준 규격
- Level 표현 방식 : 정수 Level.소수점 Level
                               Ex) H.264 Baseline Profile Level 3.0
 
- 정수 Level 표현 방식
* Level 1 : QCIF
* Level 2 : CIF
* Level 3 : SDTV
* Level 4 : HDTV
* Level 5 : Super HDTV 및 Electronic Cinema
 
- 소수점 Level 표현 방식
* 정보 Level 사이의 간격을 보간하도록 정의하여 Level 세부 선정 시 사용 됨
Posted by 서동호

mkdir ffmpeg-android
cd ffmpeg-android

svn checkout -r 26402 svn://svn.ffmpeg.org/ffmpeg/trunk/ ffmpeg

build.sh
#!/bin/bash
if [ "$NDK_ROOT" = "" ]; then
 echo NDK variable not set, assuming ${HOME}/android-ndk
 export NDK_ROOT=${HOME}/android-ndk
fi
SDK=$NDK_ROOT/build/platforms/android-8/arch-arm
# 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_CFLAGS="-I$SDK/usr/include -fPIC -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -mcpu=cortex-a8 -mfpu=neon -mthumb-interwork -mfloat-abi=softfp"
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="--target-os=linux --cross-prefix=arm-eabi- --arch=arm --enable-version3 --enable-gpl --enable-nonfree --enable-neon --enable-armv5te --enable-armv6 --enable-armv6t2 --enable-armvfp"
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"
cd ffmpeg
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
Posted by 서동호