1) git clone git://git.videolan.org/x264.git
2) cd x264
1) git clone git://git.videolan.org/x264.git
2) cd x264
구조체 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) |
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)
APP_ABI := armeabi-v7a
TARGET_ARCH_ABI := armeabi-v7a
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");
x264_t* encoder = x264_encoder_open(¶m);
x264_picture_t pic_in, pic_out;
x264_picture_alloc(&pic_in, X264_CSP_I420, w, h)
//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
}
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg