1) git clone git://git.videolan.org/x264.git

2) cd x264

export NDK=/home/dongho/android-ndk-r9d
$NDK/build/tools/make-standalone-toolchain.sh --install-dir=./toolchain
export PATH=$PATH:$NDK:/home/dongho/toolchain/bin

./configure --host=arm-linux --cross-prefix=arm-linux-androideabi- --prefix=./build/x264 --enable-static --enable-pic --extra-cflags="-fPIC -DANDROID -mcpu=cortex-a8 -mfpu=neon"

make STRIP=


구조체 x264_param_t 

    / * CPU 플래그 * / 

    서명 int CPU; 

    INT i_threads; / * 병렬 인코딩을 여러 프레임 * / 

    INT b_deterministic; / * 허용 여부를 비 결정적 최적화 실 * / 

    INT i_sync_lookahead; / * 스레드 앞서 버퍼 * / 


    / * 비디오 속성 * / 

    INT i_width; / * 폭 * / 

    INT i_height; / * 높이 * / 

    INT i_csp; / * CSP 인코딩 된 비트 스트림만을 I420을 지원 * / 색 공간을 설정할 

    INT i_level_idc; / * 수준의 값은 * / 설정 

    INT i_frame_total; / * 코딩 프레임의 총 수, 기본 0 * / 

/ * VUI 파라미터 세트 비디오 가용성 정보 비디오 표준 옵션 * / 

    구조체 

    { 

        / * 그들은 0 <X <= 65535 및 총리로 감소 될 것이다 * / 

        INT i_sar_height; 

        INT i_sar_width; / * / 화면비 


        INT i_overscan; / * 0 = undef를, 1 = 더 오버 스캔, 2 = 오버 스캔 오버 스캔 라인 기본 "UNDEF"(설정되지 않음), 옵션 : 쇼 (손목 시계) / 자르기 (제거) * / 


        / * 다음과 같은 값을 참조 H264 부속서 E의 * / 

        이자의 i_vidformat ;/ * 비디오 포맷, 기본값은 "undef를"구성 요소 / PAL / NTSC / SECAM / MAC / undef를 * / 

        INT b_fullrange, / * 기본 "OFF"옵션 설정을 전체 범위의 샘플 지정 해제 / * 온 / 

        INT i_colorprim; / * 원래의 크로마 포맷, 기본 "UNDEF"옵션 : undef/bt709/bt470m/bt470bg, smpte170m/smpte240m/film의 * / 

        INT i_transfer; / * 변환 모드, 기본 "UNDEF"옵션 : undef/bt709/bt470m/bt470bg/linear, log100/log316/smpte170m/smpte240m * / 

        INT i_colmatrix; / * 채도 매트릭스 설정, 기본 "UNDEF", undef/bt709/fcc/bt470bg, smpte170m/smpte240m/GBR/YCgCo * / 

        INT i_chroma_loc; / * 0 ~ 5의 상하 크로마 샘플 모두 지정된 범위, 기본 0 * / 

    } VUI; 


    INT i_fps_num; 

    INT i_fps_den; 

/ *이 두 가지 매개 변수는 FPS의 프레임 속도에 의해 결정됩니다, 아래의 할당 과정 : 

{FPS 플로트; 

경우 (sscanf를 (값, "% D / % D", & P -> i_fps_num, & P -> i_fps_den) == 2) 

            ; 

        다른 사람 (sscanf에서 (값, "% f를", & FPS)) 

        { 

            P-> i_fps_num = (INT) (FPS * 1000 + .5) 

            P-> i_fps_den = 1000; 

        } 

        그렇지 않으면 

            b_error = 1; 

    } 

값 값은 FPS입니다. * / 


    / * 스트림 매개 변수 * / 

    / * 참조 프레임의 최대 수 * /; INT i_frame_reference 

    INT i_keyint_max; / *이 간격에서 IDR 키 프레임 * / 

    INT i_keyint_min, 인코딩 비트 I가 아니라 IDR보다 * /의 값보다 / * 장면 전환 시간 이하이다. 

    INT i_scenecut_threshold; / * 방법을 적극적으로 여분의 I-프레임을 삽입하는 방법 * / 

    / * P는 프레임 관련된 두 이미지 사이의 번호 * /; INT i_bframe 

    INT i_bframe_adaptive; / * 적응 B-프레임 결정 * / 

    INT i_bframe_bias; / * 삽입 B-프레임 제어는 +100의 범위 -100, B 프레임의 높은 락 삽입 기본적 0 * /를 결정 

    INT b_bframe_pyramid; / * 참조 프레임 *로 부 B를 허용 / 

/ * 필요한 디 블로킹 필터 파라미터 * / 

    INT b_deblocking_filter; 

    INT i_deblocking_filter_alphac0; / * [-6, 6] -6 광 필터, 6 강 * / 

    INT i_deblocking_filter_beta; / * [-6, 6] 같은 저자 * / 

   / * 엔트로피 부호화 * / 

    INT의 b_cabac; 

    INT i_cabac_init_idc; 


    INT b_interlaced; / * 인터레이스 * / 

    / * 정량화 * / 

    INT i_cqm_preset; / * 사용자 정의 양자화 행렬 (CQM), 평면의 양자화를 초기화 * / 

    문자 * psz_cqm_file; / * JM 형식이 다른 - CQM 옵션을 무시하고 자동으로, JM 외부 양자화 매트릭스 형식의 파일을 읽을 수 * / 

    uint8_t의 cqm_4iy [16]; / * 사용 만 i_cqm_preset == X264_CQM_CUSTOM * / IF 

    uint8_t cqm_4ic [16]; 

    uint8_t cqm_4py [16]; 

    uint8_t의 cqm_4pc [16]; 

    uint8_t의 cqm_8iy [64]; 

    uint8_t cqm_8py [64]; 


    / * 로그인 * / 

    무효 (* pf_log) (무효 *, INT의 i_level, const를 char *로 PSZ,의 va_list); 

    무효 * p_log_private; 

    INT i_log_level; 

    INT b_visualize; 

    / * 복원 된 프레임의 이름 * /, char *로 psz_dump_yuv 


    / * 코드 분석 파라미터 * / 

    구조체 

    { 

        서명 int 내, / * 파티션 간 * / 

        서명 int 간, / * 내부 파티션 * / 


        INT b_transform_8x8; / * 파티션 간 * / 

        INT b_weighted_bipred; / * B-프레임 암시 적 가중 * / 

        INT i_direct_mv_pred; / * 시간과 공간 팀 스포츠 예측 * / 

        INT i_chroma_qp_offset; / * 크로마 양자화 단계 오프셋 * / 


        INT i_me_method; / * 움직임 추정 알고리즘 (X264_ME_ *) * / 

        INT i_me_range; / * 정수 화소 움직임 추정 검색 범위 (예측 측정 값에서) * / 

        INT의 i_mv_range;. / * 모션 벡터의 최대 길이 (픽셀) -1 = 자동차, 수준 *에 따라 / 

        INT i_mv_range_thread;. / * 쓰레드의 수 * /에 따라 스레드 -1 = 자동차 사이의 최소 공간. 

        INT i_subpel_refine; / * 서브 화소 움직임 추정 품질 * / 

        INT b_chroma_me; / * 크로마 서브 - 픽셀 모션 추정 및 모델 선택 프레임의 P * / 

        INT b_mixed_references; / * 각 매크로 블록 파티션 P 프레임이 자신의 참조 번호가 허용 * / 

        1 : 오프; INT i_trellis / * 격자 양자화는 각 8 × 8 블록에 맞는 정량 값을 찾아, 당신은 CABAC, 기본 0 0으로해야하는 최종 인코딩 두를 사용 : 항상 사용 * / 

        INT b_fast_pskip; / * P 프레임 빠른 검색을 건너 뛰는 * / 

        INT b_dct_decimate; / * P-프레임 변환 파라미터의 필드 * / 

        INT i_noise_reduction; / * 적응 의사 블라인드 * / 

        떠 f_psy_rd; / * 싸이 RD 강도 * / 

        f_psy_trellis 플로트; / * 싸이 격자 강도 * / 

        INT b_psy; / * 토글 모든 심리 최적화 * / 


        / * 루마 양자화 잘못된 크기에 사용 * / 

        INT i_luma_deadzone [2] / * {간, 내 * /} 


        INT b_psnr; / * 계산 및 인쇄 PSNR 정보 * / 

        INT b_ssim; / * 계산 및 인쇄 SSIM 정보 * / 

    } 분석한다; 


    / * 속도 제어 매개 변수 * / 

    구조체 

    { 

        INT i_rc_method; / * X264_RC_ ** / 


        INT i_qp_constant; / * 0-51 * / 

        INT i_qp_min; / * 최소 허용 양자화 값 * / 

        INT i_qp_max; / * 최대 허용 양자화 값 * / 

        INT i_qp_step; / * 최대 양자화 스텝의 범위 * / 


        INT i_bitrate; / * 평균 속도를 설정 * / 

        f_rf_constant 플로트; / * 1pass VBR, 공칭 QP의 * / 

        f_rate_tolerance 플로트; 

        INT i_vbv_max_bitrate; / * 낮은 평균 속도 모드, 최대 순간 비트 레이트, (동일한 세트-B)와 기본 0 * / 

        INT i_vbv_buffer_size; / * 속도 제어 버퍼 크기, 단위 K 비트, 기본 0 * / 

        f_vbv_buffer_init 플로트; / * <. = 1 : BUFFER_SIZE 분획> 1 : 데이터 버퍼 크기 K 비트 레이트 제어 버퍼에 남아있는 데이터의 최대 양의 비율이, 0 ~ 1.0의 범위, 0.9 기본 * / 

        f_ip_factor 플로트; 

        f_pb_factor 플로트; 


        INT i_aq_mode; / * 심리 적응 QP (X264_AQ_ *) * /. 

        f_aq_strength 플로트; 

        INT b_mb_tree; / * 매크로 블록 트리 ratecontrol * /. 

        INT i_lookahead; 


        / * 2pass 여러 압축 속도 제어 * / 

        INT b_stat_write; / * psz_stat_out의 합계 기록을 사용 * / 

        문자 * psz_stat_out; 

        INT b_stat_read, / * 읽기 합계 psz_stat_in에서 그것을 사용 * / 

        문자 * psz_stat_in; 


        / * 2pass의 params가 (는 FFmpeg 사람과 동일) * / 

        f_qcompress 플로트; / * 0.0 => CBR, 1.0 => 일정 큐피 * / 

        f_qblur 플로트; / * 시간 퍼지 정량화 * / 

        f_complexity_blur 플로트; / * 퍼지 시간 복잡도 * / 

        x264_zone_t * 지역; / * 속도 제어 범위 * / 

        INT i_zones; / * zone_t의 * 수 / 

        / * 영역을 지정하는 또 다른 방법은 * /;는 char * psz_zones 

    } Rc는; 


    / * 멀티플렉싱 매개 변수 * / 

    INT b_aud; / * 액세스 단위 구분 기호를 생성 * / 

    INT b_repeat_headers; / * 장소 SPS / PPS 각 키 프레임 전에 * / 

    INT i_sps_id; / * SPS와 PPS ID 번호 * / 


    / * 슬라이스 (바 등) 매개 변수 * / 

    INT i_slice_max_size; / * NAL * /의 예상 비용을 포함하여 각 조각의 바이트의 최대 수입니다. 

    INT i_slice_max_mbs; / * 조각 당 매크로 블록의 최대 수, 재 작성 i_slice_count의 * / 

    INT i_slice_count; / * 조각 당 프레임 수 : 사각 바 * / 설정합니다. 


    / *이 사용 할 때이 x264_param_t 해제를 선택적 콜백. 

     * x264_param_t가 무기한 메모리에 앉아 경우에만 사용 

     * x264_param_t가 x264_picture_t 또는 영역에 x264_t에 전달된다 즉. 

     x264_encoder_reconfig 직접 호출 할 때 * 사용하지 않습니다. * / 

    무효 (* param_free) (무효 *); 

} X264_param_t;

MinGW-w64 MinGW mingwrt w32api를 대체하는 라이브러리 헤더 파일입니다.

MinGW-w64에는 Windows DDK DirectX SDK 들어가 있으므로, 원래 MinGW 환경보다 편리합니다.


64bit (x64) 버전과 32bit (x86) 버전이 있습니다 만, 32bit (x86) 버전을 MinGW 환경 덮어 쓰는 방법을 설명합니다.


MinGW-w64 다음 위치 있습니다.
http://mingw-w64.sourceforge.net/

왼쪽 메뉴 "WIN32 Downloads"보다
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/


Personal Builds → sezero_4.5_20111101 링크를 따라,
sezero_20111101-w32-update-rev.5747.zip
다운로드합니다.

다운로드 한 파일의 압축을 풀면,
i686-w64-mingw32
라는 디렉토리 아래에
include
lib
libsrc
라는 디렉토리가 있기 때문에, 3 개의 디렉토리마다 MinGW 환경에 복사합니다.
일반적으로 MinGW 환경은 "C : \ MinGW \" 있습니다.

그런 다음 다운로드 한 파일을 압축 해제하면 나오는 파일
ddk_headers.zip
압축을 풉니 다.

"ddk_headers.zip"압축을 풀면,
ddk_test
라는 디렉토리 아래에
include
라는 디렉토리가 있기 때문에, include 디렉토리마다 MinGW 환경에 복사합니다.

이제 원래 MinGW 환경과 변함없이, GCC를 사용할 수있게됩니다.


구글 크롬에서 WebRTC(Real-Time Communications : 실시간 커뮤니케이션, 오픈 소스 비디오 채팅 프로그램)를 개발중이라고 합니다. 

자바스크립트 API와 HTML5로 브라우저에서 가볍게 구현될 수 있다고 하니 

html5, JS는 정말 대세인듯 합니다!



<관련기사>

- 게임 컨트롤러 네이티브 지원 및 OnLive cloud 게이밍 서비스 준비중

구글 크롬 개발자 Paul Luo Kenlan는 내년 1분기에 출시되는 구글 크롬은 게임 컨트롤러, 카메라, 마이크, 오디오, 비디오, WebRTC 등에 대한 지원이 증가할 것이라고 밝혔다.

Kenlan은 "내년 1분기에 구글 크롬은 플러그인 없이 카메라, 마이크로폰 지원이 가능하도록 업데이트 할 것"이며 "가상 현실 게임과 플레이어 추적 기능도 추가할 가능성이 있다"고 말했다.

또한 구글 크롬은 오픈 소스 비디오 채팅 프로그램인 WebRTC를 지원할 예정으로 이 애플리케이션은 플러그인 없이 바로 브라우저에서 실행된다. 동시에 구글 크롬은 OnLive cloud 게이밍 서비스를 오픈할 예정으로 서버 인프라 와 유통합의가 해결되면 서비스 될것이라고 암시했다.

구글 크롬 브라우저의 이와 같은 움직임은 현재 HTML5가 Flash를 대체할것으로 예상되기 때문인것으로 풀이 된다. 최근 구글 크롬의 업데이트에서 3D 그래픽 카속 WebGL에 대한 하드웨어 지원과 6주마다 브라우저 버전을 정식 업데이트 하는것은 이와 무관하지 않다.

구글 크롬은 현재 전세계 2억명이 사용하고 있으며 지난 11월 20일 시장 조사기관인 StatCounter는 구글 크롬이 파이어 폭스를 제치고 세계 2위 웹 브라우저가 됐다고 발표하는등 웹 브라우저들중 가장 성장세가 빠른 브라우저이다. - 케이벤치 (www.kbench.com)

국내 최대 IT/디지털 미디어 케이벤치 www.kbench.com
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 


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

}

 
■ 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 세부 선정 시 사용 됨

export NDK=/home/dongho/android-ndk-r10
$NDK/build/tools/make-standalone-toolchain.sh --install-dir=./toolchain
export PATH=$PATH:$NDK:/home/dongho/toolchain/bin

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

./configure --enable-gpl --enable-version3 --enable-nonfree --target-os=linux --arch=armv7-a --cpu=cortex-a8 --enable-cross-compile --cross-prefix=arm-linux-androideabi- --disable-pthreads --disable-decoders --disable-encoders --disable-ffserver --disable-ffprobe --disable-protocols --disable-muxers --disable-demuxers --disable-parsers --disable-devices --disable-filters --disable-bsfs --disable-network --disable-debug --disable-logging --enable-decoder=vp8 --enable-decoder=h264 --enable-swscale --enable-asm --prefix=/home/dongho/build/ffmpeg/neon  --extra-cflags='-marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon' --extra-ldflags='-Wl,--fix-cortex-a8'


+ Recent posts