7777#define AND_MED_VP9_PT PJMEDIA_RTP_PT_VP9_RSV1
7878
7979#define BUFFER_MAX_ITEM 16
80+ #define API_AT_LEAST (x ) __builtin_available(android x, *)
8081
8182typedef struct and_med_buf_info {
8283 pj_int32_t index;
@@ -566,6 +567,15 @@ PJ_DEF(pj_status_t) pjmedia_codec_and_media_vid_init(
566567{
567568 const pj_str_t h264_name = { (char *)" H264" , 4 };
568569 pj_status_t status;
570+ int api_level = android_get_device_api_level ();
571+
572+ if (api_level < 28 ) {
573+ PJ_LOG (4 ,(THIS_FILE, " Minimum API level 28,"
574+ " Android MediaCodec cannot work with API level %d" ,
575+ api_level));
576+
577+ return PJ_SUCCESS;
578+ }
569579
570580 if (and_media_factory.pool != NULL ) {
571581 /* Already initialized. */
@@ -1048,10 +1058,6 @@ static pj_status_t and_media_codec_open(pjmedia_vid_codec *codec,
10481058 pjmedia_vid_codec_param *param;
10491059 pj_status_t status = PJ_SUCCESS;
10501060
1051- AMediaCodecOnAsyncNotifyCallback async_cb = {&and_med_on_input_avail,
1052- &and_med_on_output_avail,
1053- &and_med_on_format_changed,
1054- &and_med_on_error};
10551061 and_media_data = (and_media_codec_data*) codec->codec_data ;
10561062 and_media_data->prm = pjmedia_vid_codec_param_clone ( and_media_data->pool ,
10571063 codec_param);
@@ -1062,11 +1068,18 @@ static pj_status_t and_media_codec_open(pjmedia_vid_codec *codec,
10621068 if (status != PJ_SUCCESS)
10631069 return status;
10641070 }
1065- AMediaCodec_setAsyncNotifyCallback (and_media_data->enc , async_cb,
1066- and_media_data);
1067- AMediaCodec_setAsyncNotifyCallback (and_media_data->dec , async_cb,
1068- and_media_data);
10691071
1072+ if (API_AT_LEAST (28 )) {
1073+ AMediaCodecOnAsyncNotifyCallback async_cb = {&and_med_on_input_avail,
1074+ &and_med_on_output_avail,
1075+ &and_med_on_format_changed,
1076+ &and_med_on_error};
1077+
1078+ AMediaCodec_setAsyncNotifyCallback (and_media_data->enc , async_cb,
1079+ and_media_data);
1080+ AMediaCodec_setAsyncNotifyCallback (and_media_data->dec , async_cb,
1081+ and_media_data);
1082+ }
10701083 and_media_data->whole = (param->packing == PJMEDIA_VID_PACKING_WHOLE);
10711084 status = configure_encoder (and_media_data);
10721085 if (status != PJ_SUCCESS) {
0 commit comments