void EBBParser::parseStream() { if (!mStream.available()) return; const char inChar = mStream.read(); if (inChar != '\r') { if (mReadBuffer.length() < 64 && isprint(inChar)) mReadBuffer += inChar; return; } char* str = mReadBuffer.begin(); const char* cmd = strsep(&str, ","); const char* arg1 = strsep(&str, ","); const char* arg2 = strsep(&str, ","); const char* arg3 = strsep(&str, ","); if (strcmp(cmd, "EM") == 0) { parseEM(arg1, arg2); } else if (strcmp(cmd, "ND") == 0) { parseND(); } else if (strcmp(cmd, "NI") == 0) { parseNI(); } else if (strcmp(cmd, "PD") == 0) { sendAck(); } else if (strcmp(cmd, "PO") == 0) { parsePO(arg1, arg2, arg3); } else if (strcmp(cmd, "QB") == 0) { parseQB(); } else if (strcmp(cmd, "QL") == 0) { parseQL(); } else if (strcmp(cmd, "QN") == 0) { parseQN(); } else if (strcmp(cmd, "QP") == 0) { parseQP(); } else if (strcmp(cmd, "SC") == 0) { parseSC(arg1, arg2); } else if (strcmp(cmd, "SE") == 0) { parseSE(arg1, arg2, arg3); } else if (strcmp(cmd, "SL") == 0) { parseSL(arg1); } else if (strcmp(cmd, "SM") == 0) { parseSM(arg1, arg2, arg3); } else if (strcmp(cmd, "SN") == 0) { parseSN(arg1); } else if (strcmp(cmd, "SP") == 0) { parseSP(arg1, arg2, arg3); } else if (strcmp(cmd, "TP") == 0) { parseTP(arg1); } else if (strcmp(cmd, "v") == 0) { parseV(); } else sendError(); mReadBuffer = ""; }
static void skipScalingList(ABitReader *br, size_t sizeOfScalingList) { size_t lastScale = 8; size_t nextScale = 8; for (size_t j = 0; j < sizeOfScalingList; ++j) { if (nextScale != 0) { signed delta_scale = parseSE(br); // ISO_IEC_14496-10_201402-ITU, 7.4.2.1.1.1, The value of delta_scale // shall be in the range of −128 to +127, inclusive. if (delta_scale < -128) { ALOGW("delta_scale (%d) is below range, capped to -128", delta_scale); delta_scale = -128; } else if (delta_scale > 127) { ALOGW("delta_scale (%d) is above range, capped to 127", delta_scale); delta_scale = 127; } nextScale = (lastScale + (delta_scale + 256)) % 256; } lastScale = (nextScale == 0) ? lastScale : nextScale; } }