author | Hualing Chen <hualing.chen@amlogic.com> | 2017-12-29 08:30:49 (GMT) |
---|---|---|
committer | Hualing Chen <hualing.chen@amlogic.com> | 2017-12-29 08:54:51 (GMT) |
commit | a063a7365647dc503ab294a8f8777f93740ab8dd (patch) | |
tree | 6b3eec3eabfcfdceaf371e9726404774bb078424 | |
parent | b0f6ad57ae9678f498e7cf201657b012e6d07a17 (diff) | |
download | TvInput-a063a7365647dc503ab294a8f8777f93740ab8dd.zip TvInput-a063a7365647dc503ab294a8f8777f93740ab8dd.tar.gz TvInput-a063a7365647dc503ab294a8f8777f93740ab8dd.tar.bz2 |
PD#157398: tvinputservice: add get ratings from pmt.
1.add get ratings from pmt.
Change-Id: I6a9b1da212f34052b72f77346e8e37fb5da7f56c
Signed-off-by: Hualing Chen <hualing.chen@amlogic.com>
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 a3bdc71..126ab7f 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) { @@ -1735,6 +1739,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); @@ -2410,7 +2426,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; } @@ -3013,6 +3029,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; } |