static TW_UINT16 get_default_paper_size(const supported_size_t *s, int n) { DWORD paper; int rc; int defsize = -1; double width, height; int i; rc = GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_IPAPERSIZE | LOCALE_RETURN_NUMBER, (void *) &paper, sizeof(paper)); if (rc > 0) switch (paper) { case 1: defsize = TWSS_USLETTER; break; case 5: defsize = TWSS_USLEGAL; break; case 8: defsize = TWSS_A3; break; case 9: defsize = TWSS_A4; break; } if (defsize == -1) return TWSS_NONE; if (get_width_height(&width, &height, TRUE) != TWCC_SUCCESS) return TWSS_NONE; for (i = 0; i < n; i++) if (s[i].size == defsize) { /* Sane's use of integers to store floats is a hair lossy; deal with it */ if (s[i].x > (width + .01) || s[i].y > (height + 0.01)) return TWSS_NONE; else return s[i].size; } return TWSS_NONE; }
static TW_UINT16 get_current_paper_size(const supported_size_t *s, int n) { int i; double width, height; double xdelta, ydelta; if (get_width_height(&width, &height, FALSE) != TWCC_SUCCESS) return TWSS_NONE; for (i = 0; i < n; i++) { /* Sane's use of integers to store floats results * in a very small error; cope with that */ xdelta = s[i].x - width; ydelta = s[i].y - height; if (xdelta < 0.01 && xdelta > -0.01 && ydelta < 0.01 && ydelta > -0.01) return s[i].size; } return TWSS_NONE; }
uint32_t init_video_handler(byte *metadata, uint32_t metadata_size, byte *metadata2, uint32_t metadata2_size, byte *sps_data, uint32_t *sps_size, byte *metadata3, uint32_t metadata3_size, byte *pps_data, uint32_t pps_size, byte *output_data, i2ctx **context) { uint32_t initVideo, count, sps_pps_data_length; uint16_t pps16, sps16, hton_sps_size, hton_pps_size; byte *sps_pps_data; uint32_t sps_s = *sps_size; /*uint32_t width, height; nalHeader headers;*/ if ((*context) == NULL) { return I2ERROR_CONTEXT_NULL; } if (output_data == NULL) { return I2ERROR_DESTINATION_NULL; } if ((metadata == NULL) || (metadata2 == NULL) || (metadata3 == NULL) || (sps_data == NULL) || (pps_data == NULL)) { return I2ERROR_SOURCE_NULL; } if ((metadata_size < 1) || (metadata2_size < 1) || (metadata3_size < 1) || ((*sps_size) < 1) || (pps_size < 1)) { return I2ERROR_SIZE_ZERO; } count = 0; sps_pps_data = (byte *) malloc(metadata_size + metadata2_size + 2 + sps_s + metadata3_size + 2 + pps_size); // Metadata memcpy(sps_pps_data + count, metadata, metadata_size); count = count + metadata_size; // Metadata2 memcpy(sps_pps_data + count, metadata2, metadata2_size); count = count + metadata2_size; // Size SPS sps16 = sps_s; hton_sps_size = htons(sps16); memcpy(sps_pps_data + count, &hton_sps_size, 2); count = count + 2; // SPS memcpy(sps_pps_data + count, sps_data, sps_s); count = count + sps_s; // Metadata3 memcpy(sps_pps_data + count, metadata3, metadata3_size); count = count + metadata3_size; // Size PPS pps16 = pps_size; hton_pps_size = htons(pps16); memcpy(sps_pps_data + count, &hton_pps_size, 2); count = count + 2; // PPS memcpy(sps_pps_data + count, pps_data, pps_size); count = count + pps_size; sps_pps_data_length = count; //spsToRbsp(sps_data, sps_s, &((*context)->ctxvideo->nalsHeader)); //ppsToRbsp(pps_data, pps_size, &((*context)->ctxvideo->nalsHeader)); //if(get_width_height(&((*context)->ctxvideo)) == I2ERROR_SPS_PPS) //i2nalparser descomentar estas 3 lineas y comentar el if de abajo if (get_width_height(sps_data, sps_size, &((*context)->ctxvideo)) == I2ERROR_SPS_PPS) { return I2ERROR_SPS_PPS; } initVideo = initVideoGenerator(sps_pps_data, sps_pps_data_length, output_data, context); return initVideo; }