summaryrefslogtreecommitdiff
authorHualing 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)
commita063a7365647dc503ab294a8f8777f93740ab8dd (patch)
tree6b3eec3eabfcfdceaf371e9726404774bb078424
parentb0f6ad57ae9678f498e7cf201657b012e6d07a17 (diff)
downloadTvInput-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>
Diffstat
-rw-r--r--DroidLogicTvInput/jni/DTVEpgScanner.c16
-rw-r--r--DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVEpgScanner.java9
-rw-r--r--DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java28
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;
}