Example #1
0
/** \brief Create an SDL_Texture from a PNG file.
  * \param path relative path
  * \param res_w width of the PNG in pixels
  * \param res_h height of the PNG in pixels
  */
SDL_Texture* video_import_png(char* path, int* res_w, int* res_h)
{
	SDL_Texture *img_tex = NULL;
	if (path == NULL) {
		fprintf(stderr, "[~][display] Path not defined\n");
		return NULL;
	}
	//Open in read mode, 'b' indicates it's a binary file
	SDL_RWops *rwop = SDL_RWFromFile(path, "rb");
	if (rwop == NULL) {
		fprintf(stderr, "[~][display] Open file failed: %s\n", SDL_GetError());
		return NULL;
	}
	SDL_Surface *img_surf = IMG_LoadPNG_RW(rwop);
	if (img_surf == NULL) {
		fprintf(stderr, "[~][display] Load PNG: %s\n", IMG_GetError());
		SDL_RWclose(rwop);
		return NULL;
	}

	img_tex = SDL_CreateTextureFromSurface(renderer, img_surf);
	if (img_tex  == NULL) {
		fprintf(stderr, "[~][display] Create Texture failed: %s\n", SDL_GetError());
	}

	*res_w = img_surf->w;
	*res_h = img_surf->h;

	SDL_FreeSurface(img_surf);
	SDL_RWclose(rwop);
	return img_tex;
}
Example #2
0
//Graphics
void Operation::avatar_set(ScenarioRunner* sr)
{
    std::string avatar = sr->getString();
    uint32_t x = sr->getDWORD();
    sr->getDWORD(); //Unused variable
    uint32_t size;
    //Load avatar
    char* buffer = sr->getResourceManager()->getFile("graphics",avatar,size);
    if (buffer == nullptr)
    {
        LOG("Missing file '"+avatar+"'");
        return;
    }
    SDL_RWops* rw = SDL_RWFromMem(buffer,size);

    if (rw==0) ERROR("SDL_RWFromMem failed: "+std::string(SDL_GetError()));

    Layer layer;
    layer.surface = IMG_LoadPNG_RW(rw);
    SDL_RWclose(rw);
    delete[] buffer;

    if (layer.surface==0) ERROR("IMG_LoadPNG_RW failed: "+std::string(SDL_GetError()));

    //Avatar coordinates
    layer.rect.x = 800-(x+layer.surface->w)+20;
    layer.rect.y = layer.surface->h/2-25;

    layer.rect.w = layer.surface->w;
    layer.rect.h = layer.surface->h;
    //Set avatar
    sr->getWindow()->setLayerDirect(static_cast<uint32_t>(-1),layer);
}
Example #3
0
gcn::Image* getThemeImage(enum ThemeImage img) {
  SDL_RWops *rwop = SDL_RWFromMem(IMAGE_TABLE[img].data, IMAGE_TABLE[img].size);
  SDL_Surface* loadedSurface = IMG_LoadPNG_RW(rwop);
  gcn::Image* image = buildThemeGCNImageFrom(loadedSurface);
  SDL_FreeSurface(loadedSurface);
  SDL_FreeRW(rwop);

  return image;
}
Example #4
0
	static SDL_Surface* loadPNGImage(const char* name) {
		SDL_RWops* rwops = SDL_RWFromFile(name, "rb");
		if(!rwops) {
			LOG("Failed to load %s", name);
			return 0;
		}
		SDL_Surface* surf = IMG_LoadPNG_RW(rwops);
		SDL_RWclose(rwops);
		//MYASSERT(surf, SDLERR_IMAGE_LOAD_FAILED);
		return surf;
	}
	bool Image::LoadPNG_RW(SDL_RWops *src)
	{
		SDL_Surface *temp = IMG_LoadPNG_RW(src);

		if(temp == NULL)
			return false;
		else
			m_Surface = temp;

		return true;
	}
Example #6
0
void SGL_ConvertPNGToIconArray(const char * imagePath, const char * fileName)
{
	SDL_RWops* rwop = SDL_RWFromFile(imagePath, "rb");
	if (rwop)
	{
		SDL_Surface* surf = IMG_LoadPNG_RW(rwop);
		SDL_RWclose(rwop);
		SDL_RWops *rw = SDL_RWFromFile(fileName, "w");
		if (rw)
		{
			size_t len = surf->h*surf->w*surf->format->BytesPerPixel;
			const char start[] = "unsigned char icon[] = { ";
			SDL_RWwrite(rw, start, 1, SDL_strlen(start));
			size_t i;
			for (i = 0; i < len; i++)
			{
				char buffer[5];
				SDL_snprintf(buffer, 5, "%u", *(((unsigned char*)surf->pixels) + i));
				//sprintf(buffer, "%u", *(((unsigned char*)surf->pixels) + i));
				size_t l;
				for (l = 1; l < 4; l++)
				{
					if (buffer[l] == 0 && i + 1 < len)
					{
						buffer[l] = ',';
						buffer[l + 1] = ' ';
						SDL_RWwrite(rw, buffer, 1, l + 2);
						break;
					}
				}
			}
			char buffer[7];
			SDL_snprintf(buffer, 7,"%u", *(((unsigned char*)surf->pixels) + (len - 1)));
			size_t l;
			for (l = 1; l < 4; l++)
			{
				if (buffer[l] == 0)
				{
					buffer[l] = ' ';
					buffer[l + 1] = '}';
					buffer[l + 2] = ';';
					SDL_RWwrite(rw, buffer, 1, l + 3);
					break;
				}
			}
			SDL_RWclose(rw);
		}
	}
}
Example #7
0
	SplashWindow():
	window(nullptr),
	surface(nullptr),
	startupScreenRequested(false){

		spades::MemoryStream stream(reinterpret_cast<const char*>(splashImage), sizeof(splashImage));
		bmp.Set(spades::Bitmap::Load(&stream), false);

		SDL_InitSubSystem(SDL_INIT_VIDEO|SDL_INIT_TIMER);
		window = SDL_CreateWindow("OpenSpades Splash Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
								  bmp->GetWidth(), bmp->GetHeight(), SDL_WINDOW_BORDERLESS);
		if(window == nullptr) {
			SPLog("Creation of splash window failed.");
			return;
		}

		surface = SDL_GetWindowSurface(window);
		if(surface == nullptr) {
			SPLog("Creation of splash window surface failed.");
			SDL_DestroyWindow(window);
			return;
		}

#ifdef __APPLE__
#elif __unix
		SDL_Surface *icon = nullptr;
		SDL_RWops *icon_rw = nullptr;
		icon_rw = SDL_RWFromConstMem(Icon, sizeof(Icon));
		if (icon_rw != nullptr) {
			icon = IMG_LoadPNG_RW(icon_rw);
			SDL_FreeRW(icon_rw);
		}
		if(icon == nullptr) {
			std::string msg = SDL_GetError();
			SPLog("Failed to load icon: %s", msg.c_str());
		} else {
			SDL_SetWindowIcon(window, icon);
			SDL_FreeSurface(icon);
		}
#endif
		// put splash image
		auto *s = SDL_CreateRGBSurfaceFrom(bmp->GetPixels(), bmp->GetWidth(), bmp->GetHeight(),
										   32, bmp->GetWidth() * 4,
										   0xff, 0xff00, 0xff0000, 0);
		SDL_BlitSurface(s, nullptr, surface, nullptr);
		SDL_FreeSurface(s);

		SDL_UpdateWindowSurface(window);
	}
Example #8
0
Badger::SpriteSheet::SpriteSheet(const char* filename) {
  SDL_RWops   *rwop;
  SDL_Surface *image;

  rwop   = SDL_RWFromFile(filename, "rb");
  image = IMG_LoadPNG_RW(rwop);

  if (image == NULL) {
    char* error = IMG_GetError();
    fprintf(stderr, "IMG_LoadPNG_RW: %s\n", error);
  }

  // Create GL texture
  glGenTextures(1, &_texture);
  glBindTexture(GL_TEXTURE_2D, _texture);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

  GLint  numColors = image->format->BytesPerPixel;
  GLenum textureFormat;
  if (numColors == 4) {
    if (image->format->Rmask == 0x000000ff) {
      textureFormat = GL_RGBA;
    }
    else {
      textureFormat = GL_BGRA_EXT;
    }
  }
  else if (numColors == 3) {
    if (image->format->Rmask == 0x000000ff) {
      textureFormat = GL_RGB;
    }
    else {
      textureFormat = GL_BGR_EXT;
    }
  }

  glTexImage2D(GL_TEXTURE_2D, 0, 4, image->w, image->h, 0,
               textureFormat, GL_UNSIGNED_BYTE, image->pixels);

  _width  = image->w;
  _height = image->h;

  _loadStatSheet(filename);

  SDL_FreeSurface(image);
}
Example #9
0
SDL_Surface* Image::load_png(const std::string &path)
{
    SDL_Surface* image = nullptr;
    SDL_RWops* rwop = nullptr;

    if (m_image_opened) {
        rwop = SDL_RWFromFile(path.c_str(), "rb");

        image = IMG_LoadPNG_RW(rwop);

        if (image == nullptr) {
            Debug::log_err("Failed to load the image! Due to: ", SDL_GetError());
        }
    }
    return image;
}
Example #10
0
/**
 * Try to load a sprite image file.
 *
 * @param fname
 * Sprite filename
 * @param flag
 * Flags
 * @param rwop
 * Pointer to memory for the image
 * @return
 * The sprite if success, NULL otherwise
 */
sprite_struct *
sprite_tryload_file (char *fname, uint32_t flag, SDL_RWops *rwop)
{
    SDL_Surface *bitmap;
    if (fname != NULL) {
        bitmap = IMG_Load_wrapper(fname);
        if (bitmap == NULL) {
            return NULL;
        }
    } else {
        bitmap = IMG_LoadPNG_RW(rwop);
    }

    sprite_struct *sprite = ecalloc(1, sizeof(*sprite));
    if (sprite == NULL) {
        return NULL;
    }

    uint32_t ckflags = SDL_SRCCOLORKEY | SDL_ANYFORMAT | SDL_RLEACCEL;
    uint32_t ckey = 0;

    if (bitmap->format->palette) {
        ckey = bitmap->format->colorkey;
        SDL_SetColorKey(bitmap, ckflags, ckey);
    } else if (flag & SURFACE_FLAG_COLKEY_16M) {
        /* Force a true color png to colorkey. Default ckey is black (0). */
        SDL_SetColorKey(bitmap, ckflags, 0);
    }

    surface_borders_get(bitmap,
                        &sprite->border_up,
                        &sprite->border_down,
                        &sprite->border_left,
                        &sprite->border_right,
                        ckey);
    sprite->bitmap = bitmap;

    if (flag & SURFACE_FLAG_DISPLAYFORMATALPHA) {
        sprite->bitmap = SDL_DisplayFormatAlpha(bitmap);
        SDL_FreeSurface(bitmap);
    } else if (flag & SURFACE_FLAG_DISPLAYFORMAT) {
        sprite->bitmap = SDL_DisplayFormat(bitmap);
        SDL_FreeSurface(bitmap);
    }

    return sprite;
}
Example #11
0
int GLES2D_CreateParticle()
{
    /* Load a particule texture */
    particleTex = (GLES2D_Texture *) malloc( sizeof( GLES2D_Texture ) );

    SDL_Surface *tmp;

    tmpmem = SDL_RWFromMem( particle, PARTICLE_LEN );
    tmp = IMG_LoadPNG_RW( tmpmem );


    particleTex = GLES2D_CreateTextureFromSurface( tmp, 0 );

    SDL_FreeSurface( tmp );

    return 1;
}
Example #12
0
int main()
{
    auto engine = std::make_unique<yae::sdl_engine>();
    auto window = engine->create_simple_window();
    auto cv = yae::clipping_volume{ -8.0f, 8.0f, -6.0f, 6.0f, 1.0f, -1.0f };
    window->close_when_keydown();

    auto rwop = SDL_RWFromFile("smiley.png", "rb");
    auto hero_image = IMG_LoadPNG_RW(rwop);
    auto pixels = (GLubyte*)hero_image->pixels;
    auto width = hero_image->w;
    auto height = hero_image->h;
    auto hero_texture = std::make_shared<yae::texture>(pixels, width, height);

    yae::buffer_object_builder<float> b({ -50.0f, -50.0f, 50.0f, -50.0f, 50.0f, 50.0f, -50.0f, 50.0f });
    auto multi_hero = std::make_shared<yae::geometry<float>>(b.get_size() / 2, 2, GL_QUADS);
    multi_hero->set_vertex_positions(b.build());
    multi_hero->set_vertex_tex_coords(b.build());
    auto node = std::make_shared<yae::geometry_node<float>>(multi_hero);
    auto root = std::make_shared<yae::group>();
    root->add(node);
    auto prog = yae::texture_program::create();
    prog->set_texture(hero_texture);

    auto scene = std::make_shared<yae::rendering_scene>();
    auto cam = std::make_shared<yae::parallel_camera>(cv);
    auto bg_color = yae::color4f{ 0.0f, 0.0f, 0.0f, 0.0f };
    auto clear_viewport_cb = yae::clear_viewport_callback(bg_color, scene->get_viewport());
    auto cre = std::make_shared<yae::custom_rendering_element>("clear_viewport", clear_viewport_cb);
    auto nre = std::make_shared<yae::node_rendering_element>("smiley_canvas", root, prog, cam);
    scene->add_element(cre);
    scene->add_element(nre);
    scene->associate_camera<yae::rendering_scene::fit_all_adapter>(cam, window.get(), yae::viewport_relative{ 0.0f, 0.0f, 1.0f, 1.0f });

    window->set_render_callback([&](yae::rendering_context& ctx) {
        cam->rotate_z(0.5);
    });

    window->add_scene(scene);

    engine->run(window.get());

    return 0;
}
Example #13
0
    void Map::loadFromFile(const std::string filename){
        this->map = new Tmx::Map();
        this->map->ParseFile(filename);

        if(map->HasError() == true) { throw map->GetErrorText(); }
        if(this->renderer == nullptr) { throw new ExNoRenderer(); }
        
        // Load image files
        const std::vector<Tmx::Tileset*>& tileSets = map->GetTilesets();
        for(int i = 0; i < tileSets.size(); ++i) {
            const Tmx::Tileset * tileSet = tileSets[i];
            const Tmx::Image * image = tileSet->GetImage();
            const std::string source = image->GetSource();
            SDL_RWops * rwop = SDL_RWFromFile(source.c_str(),"r");
            SDL_Surface * surf = IMG_LoadPNG_RW(rwop);
            SDL_Texture * tex = SDL_CreateTextureFromSurface(this->renderer, surf);
            this->images.push_back(tex);
        }
    }
Example #14
0
//Graphics
void Operation::image_set(ScenarioRunner* sr)
{
  uint32_t id = sr->getDWORD(),size=0;
  char* buffer = sr->getResourceManager()->getFile("graphics",sr->getString(),size);
  SDL_RWops* rw = SDL_RWFromMem(buffer,size);

  if (rw==0) ERROR("SDL_RWFromMem failed: "+string(SDL_GetError()));

  Layer layer;
  layer.surface = IMG_LoadPNG_RW(rw);

  if (layer.surface==0) ERROR("IMG_LoadPNG_RW failed: "+string(SDL_GetError()));

  layer.rect.x = sr->getDWORD();
  layer.rect.y = sr->getDWORD();
  layer.rect.w = layer.surface->w;
  layer.rect.h = layer.surface->h;

  if (sr->getDWORD()) sr->getWindow()->setLayer(id,layer);

  sr->getDWORD();
  sr->getDWORD();
}
Example #15
0
void Operation::layer_set(ScenarioRunner* sr)
{
    uint32_t id = sr->getDWORD(),size;
    std::string file = sr->getString();
    char* buffer = sr->getResourceManager()->getFile("graphics",file,size);
    if (buffer == nullptr)
    {
        LOG("Missing file '" + file + "'");
        for (int i = 0; i < 5; i++) sr->getDWORD();
        return;
    }
    SDL_RWops* rw = SDL_RWFromMem(buffer,size);

    if (rw==0) ERROR("SDL_RWFromMem failed: "+std::string(SDL_GetError()));

    Layer layer;
    layer.surface = IMG_LoadPNG_RW(rw);
    SDL_RWclose(rw);
    delete[] buffer;

    if (layer.surface==0) ERROR("IMG_LoadPNG_RW failed: "+std::string(SDL_GetError()));

    //Layer coordinates
    layer.rect.x = sr->getDWORD();
    layer.rect.y = sr->getDWORD();
    layer.rect.w = layer.surface->w;
    layer.rect.h = layer.surface->h;

    //Layer visibility
    layer.visible = (sr->getDWORD() ? true : false);

    sr->getWindow()->setLayer(id,layer);

    sr->getDWORD(); //Unknown parameter
    sr->getDWORD(); //Unknown parameter
}
Example #16
0
int main(int argc, char* argv[])
{
    SDL_Surface *screen = NULL;
    SDL_Surface *image = NULL;
    SDL_Surface *rot = NULL;
    SDL_RWops *rw = NULL;
    const SDL_VideoInfo *videoInfo = NULL;
    FILE* file;
    FILE* newFile;
    double scale;
    char buffer[256];
    int value;
    int prevValue;
    
    

    /*-----------------------------------------------------------------*/

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        fprintf(stderr, "SDL_Init failed - %s\n", SDL_GetError());
        return 1;
    }

    /*-----------------------------------------------------------------*/

    videoInfo = SDL_GetVideoInfo();

    if (videoInfo == 0)
    {
        fprintf(stderr, "SDL_GetVideoInfo failed - %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    /*-----------------------------------------------------------------*/

    if((file = popen("adb shell \"screencap -p | busybox uuencode -\" | uudecode","r"))==NULL)
    {
        fprintf(stderr, "can't open dump.png\n");
        return 0;
    }

    rw = SDL_RWFromFP(file, 0);

    close(file);

    image = IMG_LoadPNG_RW(rw);

    SDL_FreeRW(rw);

    //scale = (image->h)/(videoInfo->current_h);
    scale = 0.5;

    /*-----------------------------------------------------------------*/

    screen = SDL_SetVideoMode((image->w)*scale,
                              (image->h)*scale,
                              videoInfo->vfmt->BitsPerPixel,
                              SDL_SWSURFACE|SDL_DOUBLEBUF);

    if (!screen)
    {
        fprintf(stderr, "SetVideoMode failed - %s\n", SDL_GetError());
        SDL_FreeSurface(image);
        SDL_Quit();
        return 1;
    }

    rot = rotozoomSurface( image, 0, scale, SMOOTHING_ON );

    if (!image)
    {
        fprintf(stderr, "IMG_LoadBMP_RW failed - %s\n", IMG_GetError());
        SDL_Quit();
        return 1;
    }

    SDL_BlitSurface(rot, 0, screen, 0);

    SDL_Flip(screen);

    SDL_FreeSurface(rot);
    SDL_FreeSurface(image);

    /*-----------------------------------------------------------------*/
while(1){
    if((file = popen("adb shell dumpsys window | grep cur= | awk -F cur= '{print $NF}' | awk -F ' ' '{print $1}' | awk -F 'x' '{print $NF}'", "r"))==NULL)
    {
        fprintf(stderr, "can't get size\n");
        return 0;
    }
    while(fgets(buffer, sizeof(buffer), file) != 0)
    {
	value = atoi(buffer);
    }
    
    pclose(file);

    if((file = popen("adb shell \"screencap -p | busybox uuencode -\" | uudecode","r"))==NULL)
    {
        fprintf(stderr, "can't open dump.png\n");
        return 0;
    }

    rw = SDL_RWFromFP(file, 0);

    close(file);

    image = IMG_LoadPNG_RW(rw);

    SDL_FreeRW(rw);

    if (value != image->h) {
	if (prevValue != image->h) {
	    screen = SDL_SetVideoMode((image->h)*scale,
		                      (image->w)*scale,
		                      videoInfo->vfmt->BitsPerPixel,
		                      SDL_SWSURFACE|SDL_DOUBLEBUF);
	}
        rot = rotozoomSurface( image, 270, scale, SMOOTHING_ON );
    }

    if (value == image->h) {
	if (prevValue != image->h) {
	    screen = SDL_SetVideoMode((image->w)*scale,
		                      (image->h)*scale,
		                      videoInfo->vfmt->BitsPerPixel,
		                      SDL_SWSURFACE|SDL_DOUBLEBUF);
	}
        rot = rotozoomSurface( image, 0, scale, SMOOTHING_ON );
    }

    if (!image)
    {
        fprintf(stderr, "IMG_LoadBMP_RW failed - %s\n", IMG_GetError());
        SDL_Quit();
        return 1;
    }

    SDL_FreeSurface(image);

    SDL_BlitSurface(rot, NULL, screen, 0);

    SDL_Flip(screen);

    SDL_FreeSurface(rot);

    prevValue = value;

}

    //SDL_Delay(5000);

    SDL_Quit();

    return 0;
}
int main(int argc, char* argv[])
{
    SDL_Surface *screen = NULL;
    SDL_Surface *image = NULL;
    SDL_Surface *rot = NULL;
    const SDL_VideoInfo *videoInfo = NULL;
    FILE* file;
    double scale;
    int value;
    int prevValue = 0;
    int rc = 0;
    void *status[2];

    pthread_t thread[2]; 

    pthread_mutex_init(&mutexRW, NULL);

    pthread_create(&thread[0], NULL, run_thread, NULL);   

    /*-----------------------------------------------------------------*/

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        fprintf(stderr, "SDL_Init failed - %s\n", SDL_GetError());
        return 1;
    }

    /*-----------------------------------------------------------------*/

    videoInfo = SDL_GetVideoInfo();

    if (videoInfo == 0)
    {
        fprintf(stderr, "SDL_GetVideoInfo failed - %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    /*-----------------------------------------------------------------*/

    rc = pthread_join(thread[0], &status[0]);

    //image = IMG_LoadPNG_RW(getImage());

    image = IMG_LoadPNG_RW(rw);

    //scale = (image->h)/(videoInfo->current_h);
    scale = 0.5;

    /*-----------------------------------------------------------------*/
while(1){
    //pthread_mutex_init(&mutexRW, NULL);

    pthread_create(&thread[0], NULL, run_thread, NULL);

    value = getHeight();

    //drawScreen(image, value, prevValue, scale, videoInfo);

    if (value != image->h) {
        //scale = (image->w)/(videoInfo->current_w);
        scale = 0.5;
	if (prevValue != image->h) {
	    screen = SDL_SetVideoMode((image->h)*scale,
		                      (image->w)*scale,
		                      videoInfo->vfmt->BitsPerPixel,
		                      SDL_SWSURFACE|SDL_DOUBLEBUF);
	}
        rot = rotozoomSurface( image, 90, scale, SMOOTHING_ON );
    }

    if (value == image->h) {
	//scale = (image->h)/(videoInfo->current_h);
        scale = 0.5;
	if (prevValue != image->h) {
	    screen = SDL_SetVideoMode((image->w)*scale,
		                      (image->h)*scale,
		                      videoInfo->vfmt->BitsPerPixel,
		                      SDL_SWSURFACE|SDL_DOUBLEBUF);
	}
        rot = rotozoomSurface( image, 0, scale, SMOOTHING_ON );
    }

    SDL_FreeSurface(image);

    /*if (!image)
    {
        fprintf(stderr, "IMG_LoadBMP_RW failed - %s\n", IMG_GetError());
        SDL_Quit();
        //return 1;
    }*/

    SDL_BlitSurface(rot, NULL, screen, 0);

    SDL_Flip(screen);

    SDL_FreeSurface(rot);

    prevValue = value;

    rc = pthread_join(thread[0], &status[0]);

    //image = IMG_LoadPNG_RW(getImage());
    image = IMG_LoadPNG_RW(rw);

    //SDL_FreeSurface(rw);

}

    //SDL_Delay(5000);

    SDL_Quit();

    return 0;
}
Example #18
0
int main(int argc, char* argv[])
{
    SDL_Surface *screen = NULL;
    SDL_Surface *image = NULL;
    const SDL_VideoInfo *videoInfo = NULL;
    FILE* file;

    /*-----------------------------------------------------------------*/

    if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
        fprintf(stderr, "SDL_Init failed - %s\n", SDL_GetError());
        return 1;
    }

    /*-----------------------------------------------------------------*/

    videoInfo = SDL_GetVideoInfo();

    if (videoInfo == 0)
    {
        fprintf(stderr, "SDL_GetVideoInfo failed - %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    /*-----------------------------------------------------------------*/

    screen = SDL_SetVideoMode(image->w,
                              image->h,
                              videoInfo->vfmt->BitsPerPixel,
                              SDL_SWSURFACE);

    if (!screen)
    {
        fprintf(stderr, "SetVideoMode failed - %s\n", SDL_GetError());
        SDL_FreeSurface(image);
        SDL_Quit();
        return 1;
    }

    /*-----------------------------------------------------------------*/

	while(1) {
	    if((file = popen("adb shell \"screencap -p | busybox uuencode -\" |uudecode","r"))==NULL)
	    {
		fprintf(stderr, "can't open dump.png\n");
		return 0;
	    }
	    
	    SDL_RWops *rw = SDL_RWFromFP(file, 0);

	    image = IMG_LoadPNG_RW(rw);
	    
	    SDL_FreeRW(rw);
	    close(file);

	    if (!image)
	    {
		fprintf(stderr, "IMG_LoadBMP_RW failed - %s\n", IMG_GetError());
		SDL_Quit();
		return 1;
	    }

	    /*-----------------------------------------------------------------*/

	    SDL_BlitSurface(image, 0, screen, 0);

	    SDL_Flip(screen);
	    
	    //SDL_Delay(5000);

	    SDL_FreeSurface(image);
	}

    SDL_Quit();

    return 0;
}