author | Lei Qian <lei.qian@amlogic.com> | 2018-01-05 01:54:16 (GMT) |
---|---|---|
committer | Gerrit Code Review <gituser@scgit.amlogic.com> | 2018-01-05 01:54:16 (GMT) |
commit | 95559c80827393b2dc577f80d4f59aa55a5327e9 (patch) | |
tree | b3e6293d76b444d867c1d62530ac846d838eb979 | |
parent | 76b0d76ca82ae4b63ff5cda357ddfaafbb2d71f9 (diff) | |
parent | a063a7365647dc503ab294a8f8777f93740ab8dd (diff) | |
download | TvInput-95559c80827393b2dc577f80d4f59aa55a5327e9.zip TvInput-95559c80827393b2dc577f80d4f59aa55a5327e9.tar.gz TvInput-95559c80827393b2dc577f80d4f59aa55a5327e9.tar.bz2 |
Merge "PD#157398: tvinputservice: add get ratings from pmt." into m-amlogic
3 files changed, 45 insertions, 8 deletions
diff --git a/DroidLogicTvInput/jni/DTVEpgScanner.c b/DroidLogicTvInput/jni/DTVEpgScanner.c index 3f5a2f3..82286da 100644 --- a/DroidLogicTvInput/jni/DTVEpgScanner.c +++ b/DroidLogicTvInput/jni/DTVEpgScanner.c @@ -20,6 +20,8 @@ #define EVENT_PROGRAM_EVENTS_UPDATE 9 #define EVENT_TS_UPDATE 10 #define EVENT_EIT_CHANGED 11 +#define EVENT_PMT_RATING 12 + static JavaVM *gJavaVM = NULL; static jclass gEventClass; @@ -52,6 +54,7 @@ typedef struct { long time; int dvbVersion; int eitNumber; + char pmt_rating[1024]; }EPGEventData; struct sdt_service; @@ -95,6 +98,8 @@ struct sdt_service{ }; EPGChannelData gChannelMonitored = {.valid = 0}; +static jbyteArray get_byte_array(JNIEnv* env, const char *str); + static int epg_conf_get(char *prop, int def) { return property_get_int32(prop, def); } @@ -127,6 +132,8 @@ static void epg_on_event(jobject obj, EPGEventData *evt_data) (*env)->SetLongField(env,event,(*env)->GetFieldID(env, gEventClass, "time", "J"), evt_data->time); (*env)->SetIntField(env,event,(*env)->GetFieldID(env, gEventClass, "dvbVersion", "I"), evt_data->dvbVersion); (*env)->SetIntField(env,event,(*env)->GetFieldID(env, gEventClass, "eitNumber", "I"), evt_data->eitNumber); + (*env)->SetIntField(env,event,(*env)->GetFieldID(env, gEventClass, "eitNumber", "I"), evt_data->eitNumber); + (*env)->SetObjectField(env,event, (*env)->GetFieldID(env, gEventClass, "pmt_rrt_ratings", "[B"), get_byte_array(env, evt_data->pmt_rating)); if (evt_data->type == 10) log_info("epg_on_event event==EVENT_TS_UPDATE"); @@ -192,6 +199,14 @@ static void epg_evt_callback(long dev_no, int event_type, void *param, void *use edata.dvbVersion = (int)(long)user_data; epg_on_event(priv_data->obj, &edata); break; + case AM_EPG_EVT_PMT_RATING: + //send pmt rating info + log_info("evt PMT RATING callback %d\n", AM_EPG_EVT_PMT_RATING); + edata.type = EVENT_PMT_RATING; + edata.dvbServiceID = ((AM_EPG_PmtRating_t *)(long)param)->i_program_number; + memcpy(edata.pmt_rating, ((AM_EPG_PmtRating_t *)(long)param)->rating, sizeof(edata.pmt_rating)); + epg_on_event(priv_data->obj, &edata); + break; default: break; } @@ -1031,6 +1046,7 @@ static void epg_create(JNIEnv* env, jobject obj, jint fend_id, jint dmx_id, jint AM_EVT_Subscribe((long)data->handle,AM_EPG_EVT_UPDATE_PROGRAM_AV,epg_evt_callback,NULL); AM_EVT_Subscribe((long)data->handle,AM_EPG_EVT_UPDATE_PROGRAM_NAME,epg_evt_callback,NULL); AM_EVT_Subscribe((long)data->handle,AM_EPG_EVT_UPDATE_TS,epg_evt_callback,NULL); + AM_EVT_Subscribe((long)data->handle,AM_EPG_EVT_PMT_RATING,epg_evt_callback,NULL); AM_EPG_SetUserData(data->handle, (void*)data); /*handle epg events*/ diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVEpgScanner.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVEpgScanner.java index a5ee3e1..f07a987 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVEpgScanner.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVEpgScanner.java @@ -49,7 +49,8 @@ abstract public class DTVEpgScanner { public static final int EVENT_PROGRAM_NAME_UPDATE = 8; public static final int EVENT_PROGRAM_EVENTS_UPDATE = 9; public static final int EVENT_CHANNEL_UPDATE = 10; - public static final int EVENT_EIT_CHANGED = 11; + public static final int EVENT_EIT_CHANGED = 11; + public static final int EVENT_PMT_RATING = 12; public int type; public int channelID; @@ -64,7 +65,7 @@ abstract public class DTVEpgScanner { public ChannelInfo channel; public ServiceInfosFromSDT services; public int eitNumber;//atsc:eit-(k),dvb:0 - + public byte[] pmt_rrt_ratings; public class Evt { int src; int srv_id; @@ -221,8 +222,8 @@ abstract public class DTVEpgScanner { Log.d(TAG, "\tapid:["+Arrays.toString(channel.getAudioPids())+"] spid:["+Arrays.toString(channel.getSubtitlePids())+"]"); native_epg_monitor_service(channel); - //startScan(SCAN_PAT | SCAN_PMT); - startScan(SCAN_PAT); + startScan(SCAN_PAT | SCAN_PMT); + //startScan(SCAN_PAT); mChannel = channel; } diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java index 860ccb5..57a548b 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java @@ -990,7 +990,11 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if ((mCurrentCCContentRatings != null) && (mCurrentCCContentRatings.length > 0)) { rstr = mCurrentCCContentRatings[0].flattenToString(); } - + //first used eit ratings, if eit rating is not exist, used pmt ratings, + //if both eit and pmt rating not exist, used cc ratings. + if ((mCurrentPmtContentRatings != null) && (mCurrentPmtContentRatings.length > 0)) { + rstr = mCurrentPmtContentRatings[0].flattenToString(); + } if (!TextUtils.equals(rstr, mCurrentChannel.getContentRatings())) { Log.d(TAG, "rating:updateChannel:"+rstr); mCurrentChannel.setContentRatings(rstr); @@ -1021,8 +1025,8 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr } /*pmt ratings 2nd*/ - /*if (ratings == null) - ratings = mCurrentPmtContentRatings;*/ + if (ratings == null) + ratings = mCurrentPmtContentRatings; /*cc ratings 3rd*/ if (ratings == null) { @@ -1746,6 +1750,18 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr private int mCurrentCCExist = 0; private boolean mCurrentCCEnabled = false; + public void check_program_pmt_rating_block(int ServiceId, String json) + { + //Log.d(TAG, "check_program_pmt_rating_block cur channel: " + mCurrentChannel.getServiceId() +" PMT ServiceId:" + ServiceId + " ratings:" + json); + if ((mCurrentChannel.isAtscChannel() || isAtscForcedStandard())) { + //Log.d(TAG, "PMT get mCurrentPmtContentRatings"); + mCurrentPmtContentRatings = DroidLogicTvUtils.parseDRatings(json); + //Log.d(TAG, "PMT save mCurrentPmtContentRatings"); + saveCurrentChannelRatings(); + if (mHandler != null) + mHandler.sendMessage(mHandler.obtainMessage(MSG_PARENTAL_CONTROL, this)); + } + } /*When CC data changed.*/ public void doCCData(int mask) { Log.d(TAG, "cc data " + mask); @@ -2421,7 +2437,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr MODE_Ts = DTVEpgScanner.SCAN_NIT; } else {// (std == ATSC) { MODE_Epg = DTVEpgScanner.SCAN_PSIP_EIT_ALL; - MODE_Service = DTVEpgScanner.SCAN_MGT | DTVEpgScanner.SCAN_VCT; + MODE_Service = DTVEpgScanner.SCAN_MGT | DTVEpgScanner.SCAN_VCT | DTVEpgScanner.SCAN_PMT; MODE_Time = DTVEpgScanner.SCAN_STT; MODE_Ts = DTVEpgScanner.SCAN_PAT;// | DTVEpgScanner.SCAN_VCT; } @@ -3024,6 +3040,10 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr } } break; + case DTVEpgScanner.Event.EVENT_PMT_RATING: + Log.d(TAG, "[PMT dvbServiceID]:" + event.dvbServiceID + " RATING:" + new String(event.pmt_rrt_ratings)); + check_program_pmt_rating_block(event.dvbServiceID, new String(event.pmt_rrt_ratings)); + break; default: break; } |