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 = "";
}
Exemple #2
0
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;
    }
}