summaryrefslogtreecommitdiff
path: root/gr-video-sdl/src
diff options
context:
space:
mode:
Diffstat (limited to 'gr-video-sdl/src')
-rw-r--r--gr-video-sdl/src/CMakeLists.txt114
-rwxr-xr-xgr-video-sdl/src/qa_video_sdl.py40
-rw-r--r--gr-video-sdl/src/video_sdl.i65
-rw-r--r--gr-video-sdl/src/video_sdl_api.h33
-rw-r--r--gr-video-sdl/src/video_sdl_sink_s.cc301
-rw-r--r--gr-video-sdl/src/video_sdl_sink_s.h91
-rw-r--r--gr-video-sdl/src/video_sdl_sink_uc.cc291
-rw-r--r--gr-video-sdl/src/video_sdl_sink_uc.h91
8 files changed, 0 insertions, 1026 deletions
diff --git a/gr-video-sdl/src/CMakeLists.txt b/gr-video-sdl/src/CMakeLists.txt
deleted file mode 100644
index 3050926bd..000000000
--- a/gr-video-sdl/src/CMakeLists.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-# Copyright 2011-2012 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-
-########################################################################
-# Setup the include and linker paths
-########################################################################
-include_directories(
- ${GR_VIDEO_SDL_INCLUDE_DIRS}
- ${GNURADIO_CORE_INCLUDE_DIRS}
- ${GRUEL_INCLUDE_DIRS}
- ${Boost_INCLUDE_DIRS}
- ${SDL_INCLUDE_DIR}
-)
-
-link_directories(${Boost_LIBRARY_DIRS})
-
-########################################################################
-# Setup library
-########################################################################
-list(APPEND gr_video_sdl_sources
- video_sdl_sink_uc.cc
- video_sdl_sink_s.cc
-)
-
-list(APPEND video_sdl_libs
- gnuradio-core
- ${Boost_LIBRARIES}
- ${SDL_LIBRARY}
-)
-
-add_library(gnuradio-video-sdl SHARED ${gr_video_sdl_sources})
-target_link_libraries(gnuradio-video-sdl ${video_sdl_libs})
-GR_LIBRARY_FOO(gnuradio-video-sdl RUNTIME_COMPONENT "video_sdl_runtime" DEVEL_COMPONENT "video_sdl_devel")
-
-########################################################################
-# Install public header files
-########################################################################
-install(FILES
- video_sdl_api.h
- video_sdl_sink_uc.h
- video_sdl_sink_s.h
- DESTINATION ${GR_INCLUDE_DIR}/gnuradio
- COMPONENT "video_sdl_devel"
-)
-
-########################################################################
-# Setup swig generation
-########################################################################
-if(ENABLE_PYTHON)
-include(GrPython)
-include(GrSwig)
-
-set(GR_SWIG_INCLUDE_DIRS
- ${GR_COMEDI_INCLUDE_DIRS}
- ${GNURADIO_CORE_SWIG_INCLUDE_DIRS}
- ${GRUEL_INCLUDE_DIRS}
- ${Boost_INCLUDE_DIRS}
-)
-
-set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/video_sdl_swig_doc.i)
-set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
-
-set(GR_SWIG_LIBRARIES gnuradio-video-sdl)
-
-GR_SWIG_MAKE(video_sdl video_sdl.i)
-
-GR_SWIG_INSTALL(
- TARGETS video_sdl
- DESTINATION ${GR_PYTHON_DIR}/gnuradio
- COMPONENT "video_sdl_python"
-)
-
-install(
- FILES video_sdl.i
- ${CMAKE_CURRENT_BINARY_DIR}/video_sdl_swig_doc.i
- DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
- COMPONENT "video_sdl_swig"
-)
-
-endif(ENABLE_PYTHON)
-
-########################################################################
-# Handle the unit tests
-########################################################################
-if(ENABLE_TESTING AND ENABLE_PYTHON)
-
-list(APPEND GR_TEST_PYTHON_DIRS
- ${CMAKE_BINARY_DIR}/gr-video-sdl/src
-)
-list(APPEND GR_TEST_TARGET_DEPS gnuradio-video-sdl)
-
-include(GrTest)
-file(GLOB py_qa_test_files "qa_*.py")
-foreach(py_qa_test_file ${py_qa_test_files})
- get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
- GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
-endforeach(py_qa_test_file)
-endif(ENABLE_TESTING AND ENABLE_PYTHON)
diff --git a/gr-video-sdl/src/qa_video_sdl.py b/gr-video-sdl/src/qa_video_sdl.py
deleted file mode 100755
index 9008d1513..000000000
--- a/gr-video-sdl/src/qa_video_sdl.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2006,2010 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-from gnuradio import gr, gr_unittest
-import video_sdl
-
-class test_video_sdl (gr_unittest.TestCase):
-
- def setUp (self):
- self.tb = gr.top_block ()
-
- def tearDown (self):
- self.tb = None
-
- def test_000_nop (self):
- """Just see if we can import the module...
- They may not have video drivers, etc. Don't try to run anything"""
- pass
-
-if __name__ == '__main__':
- gr_unittest.run(test_video_sdl, "test_video_sdl.xml")
diff --git a/gr-video-sdl/src/video_sdl.i b/gr-video-sdl/src/video_sdl.i
deleted file mode 100644
index c06ad6c2e..000000000
--- a/gr-video-sdl/src/video_sdl.i
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006,2009 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-%include "gnuradio.i" // the common stuff
-
-//load generated python docstrings
-%include "video_sdl_swig_doc.i"
-
-%{
-#include "video_sdl_sink_uc.h"
-#include "video_sdl_sink_s.h"
-%}
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(video_sdl,sink_uc)
-
-video_sdl_sink_uc_sptr
-video_sdl_make_sink_uc ( double framerate,int width=640, int height=480,unsigned int format=0,int dst_width=-1,int dst_height=-1
- ) throw (std::runtime_error);
-
-
-class video_sdl_sink_uc : public gr_sync_block {
- protected:
- video_sdl_sink_uc (double framerate,int width, int height,gr_uint32 format,int dst_width,int dst_height);
-
- public:
- ~video_sdl_sink_uc ();
-};
-
-// ----------------------------------------------------------------
-
-GR_SWIG_BLOCK_MAGIC(video_sdl,sink_s)
-
-video_sdl_sink_s_sptr
-video_sdl_make_sink_s ( double framerate,int width=640, int height=480,unsigned int format=0,int dst_width=-1,int dst_height=-1
- ) throw (std::runtime_error);
-
-
-class video_sdl_sink_s : public gr_sync_block {
- protected:
- video_sdl_sink_s (double framerate,int width, int height,gr_uint32 format,int dst_width,int dst_height);
-
- public:
- ~video_sdl_sink_s ();
-};
diff --git a/gr-video-sdl/src/video_sdl_api.h b/gr-video-sdl/src/video_sdl_api.h
deleted file mode 100644
index 5418f86f0..000000000
--- a/gr-video-sdl/src/video_sdl_api.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2011 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_VIDEO_SDL_API_H
-#define INCLUDED_VIDEO_SDL_API_H
-
-#include <gruel/attributes.h>
-
-#ifdef gnuradio_video_sdl_EXPORTS
-# define VIDEO_SDL_API __GR_ATTR_EXPORT
-#else
-# define VIDEO_SDL_API __GR_ATTR_IMPORT
-#endif
-
-#endif /* INCLUDED_VIDEO_SDL_API_H */
diff --git a/gr-video-sdl/src/video_sdl_sink_s.cc b/gr-video-sdl/src/video_sdl_sink_s.cc
deleted file mode 100644
index d9232043a..000000000
--- a/gr-video-sdl/src/video_sdl_sink_s.cc
+++ /dev/null
@@ -1,301 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006,2010 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <SDL.h>
-
-#include <video_sdl_sink_s.h>
-#include <gr_io_signature.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <iostream>
-#include <stdexcept>
-#include <string.h>
-
-
-
-video_sdl_sink_s::video_sdl_sink_s (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height)
- : gr_sync_block ("video_sdl_sink_s",
- gr_make_io_signature (1, 3, sizeof (short)),
- gr_make_io_signature (0, 0, 0)),
- d_chunk_size (width*height),
- d_framerate(framerate),
- d_wanted_frametime_ms(0),
- d_width(width),
- d_height (height),
- d_dst_width(dst_width),
- d_dst_height(dst_height),
- d_format(format),
- d_current_line(0),
- d_screen(NULL),
- d_image(NULL),
- d_avg_delay(0.0),
- d_wanted_ticks(0)
-{
- if(framerate<=0.0)
- d_wanted_frametime_ms=0;//Go as fast as possible
- else
- d_wanted_frametime_ms=(int)(1000.0/framerate);
- if(dst_width<0) d_dst_width=d_width;
- if(dst_height<0) d_dst_height=d_height;
- if(0==format) d_format=IMGFMT_YV12;
-
- atexit(SDL_Quit);//check if this is the way to do this
- if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
- std::cerr << "video_sdl_sink_s: Couldn't initialize SDL:" << SDL_GetError() << " \n SDL_Init(SDL_INIT_VIDEO) failed\n";
- throw std::runtime_error ("video_sdl_sink_s");
- };
-
- /* accept any depth */
- d_screen = SDL_SetVideoMode(dst_width, dst_height, 0, SDL_SWSURFACE|SDL_RESIZABLE|SDL_ANYFORMAT);//SDL_DOUBLEBUF |SDL_SWSURFACE| SDL_HWSURFACE||SDL_FULLSCREEN
- if ( d_screen == NULL ) {
- std::cerr << "Unable to set SDL video mode: " << SDL_GetError() <<"\n SDL_SetVideoMode() Failed \n";
- exit(1);
- }
- if ( d_image ) {
- SDL_FreeYUVOverlay(d_image);
- }
- /* Initialize and create the YUV Overlay used for video out */
- if (!(d_image = SDL_CreateYUVOverlay (d_width, d_height, SDL_YV12_OVERLAY, d_screen))) {
- std::cerr << "SDL: Couldn't create a YUV overlay: \n"<< SDL_GetError() <<"\n";
- throw std::runtime_error ("video_sdl_sink_s");
- }
-
- printf("SDL screen_mode %d bits-per-pixel\n",
- d_screen->format->BitsPerPixel);
- printf("SDL overlay_mode %i \n",
- d_image->format);
- d_chunk_size = std::min(1,16384/width); //width*16;
- d_chunk_size = d_chunk_size*width;
- //d_chunk_size = (int) (width);
- set_output_multiple (d_chunk_size);
- /* Set the default playback area */
- d_dst_rect.x = 0;
- d_dst_rect.y = 0;
- d_dst_rect.w = d_dst_width;
- d_dst_rect.h = d_dst_height;
- //clear the surface to grey
- if ( SDL_LockYUVOverlay( d_image ) ) {
- std::cerr << "SDL: Couldn't lock YUV overlay: \n"<< SDL_GetError() <<"\n";
- throw std::runtime_error ("video_sdl_sink_s");
- }
- memset(d_image->pixels[0], 128, d_image->pitches[0]*d_height);
- memset(d_image->pixels[1], 128, d_image->pitches[1]*d_height/2);
- memset(d_image->pixels[2], 128, d_image->pitches[2]*d_height/2);
- SDL_UnlockYUVOverlay( d_image );
-}
-
-video_sdl_sink_s::~video_sdl_sink_s ()
-{
- SDL_Quit();
-}
-
-video_sdl_sink_s_sptr
-video_sdl_make_sink_s (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height)
-{
- return gnuradio::get_initial_sptr(new video_sdl_sink_s (framerate, width, height,format,dst_width,dst_height));
-}
-
-void
-video_sdl_sink_s::copy_line_pixel_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,const short * src_pixels,int src_width)
-{
- for(int i=0;i<src_width;i++)
- {
- dst_pixels_u[i]=(unsigned char)src_pixels[i*2];
- dst_pixels_v[i]=(unsigned char)src_pixels[i*2+1];
- }
- return;
-}
-
-void
-video_sdl_sink_s::copy_line_line_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,const short * src_pixels,int src_width)
-{
- for(int i=0;i<src_width;i++)
- {
- dst_pixels_u[i]=(unsigned char)src_pixels[i];
- dst_pixels_v[i]=(unsigned char)src_pixels[i+src_width];
- }
- for(int i=src_width;i<src_width*2;i++)
- {
- dst_pixels_v[i]=(unsigned char)src_pixels[i];
- }
- return;
-}
-void
-video_sdl_sink_s::copy_line_single_plane(unsigned char *dst_pixels,const short * src_pixels,int src_width)
-{
- for(int i=0;i<src_width;i++)
- {
- dst_pixels[i]=(unsigned char)src_pixels[i];
- }
- return;
-}
-
-void
-video_sdl_sink_s::copy_line_single_plane_dec2(unsigned char *dst_pixels,const short * src_pixels,int src_width)
-{
- for(int i=0,j=0;i<src_width;i+=2,j++)
- {
- dst_pixels[j]=(unsigned char)src_pixels[i];
- }
- return;
-}
-
-int
-video_sdl_sink_s::copy_plane_to_surface (int plane,int noutput_items,
- const short * src_pixels)
-{
- const int first_dst_plane=(12==plane ||1122==plane)?1:plane;
- const int second_dst_plane=(12==plane ||1122==plane)?2:plane;
- int current_line=(0==plane)?d_current_line:d_current_line/2;
- unsigned char * dst_pixels = (unsigned char *)d_image->pixels[first_dst_plane];
- dst_pixels=&dst_pixels[current_line*d_image->pitches[first_dst_plane]];
- unsigned char * dst_pixels_2 = (unsigned char *)d_image->pixels[second_dst_plane];
- dst_pixels_2=&dst_pixels_2[current_line*d_image->pitches[second_dst_plane]];
- int src_width=(0==plane || 12==plane || 1122==plane)?d_width:d_width/2;
- int noutput_items_produced=0;
- int max_height=(0==plane)?d_height-1:d_height/2-1;
- for (int i = 0; i < noutput_items; i += src_width){
- //output one line at a time
- if(12==plane)
- {
- copy_line_pixel_interleaved(dst_pixels,dst_pixels_2,src_pixels,src_width);
- dst_pixels_2 += d_image->pitches[second_dst_plane];
- }
- else if (1122==plane)
- {
- copy_line_line_interleaved(dst_pixels,dst_pixels_2,src_pixels,src_width);
- dst_pixels_2 += d_image->pitches[second_dst_plane];
- src_pixels += src_width;
- }
- else if (0==plane)
- copy_line_single_plane(dst_pixels,src_pixels,src_width);
- else /* 1==plane || 2==plane*/
- copy_line_single_plane_dec2(dst_pixels,src_pixels,src_width);//decimate by two horizontally
-
- src_pixels += src_width;
- dst_pixels += d_image->pitches[first_dst_plane];
- noutput_items_produced+=src_width;
- current_line++;
- if (current_line>max_height)
- {
- //Start new frame
- //TODO, do this all in a seperate thread
- current_line=0;
- dst_pixels=d_image->pixels[first_dst_plane];
- dst_pixels_2=d_image->pixels[second_dst_plane];
- if(0==plane)
- {
- SDL_DisplayYUVOverlay(d_image, &d_dst_rect);
- //SDL_Flip(d_screen);
- unsigned int ticks=SDL_GetTicks();//milliseconds
- d_wanted_ticks+=d_wanted_frametime_ms;
- float avg_alpha=0.1;
- int time_diff=d_wanted_ticks-ticks;
- d_avg_delay=time_diff*avg_alpha +d_avg_delay*(1.0-avg_alpha);
- }
- }
- }
- if(0==plane) d_current_line=current_line;
- return noutput_items_produced;
-}
-
-int
-video_sdl_sink_s::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- short *src_pixels_0,*src_pixels_1,*src_pixels_2;
- int noutput_items_produced=0;
- int plane;
- int delay=(int)d_avg_delay;
- if(0==d_wanted_ticks)
- d_wanted_ticks=SDL_GetTicks();
- if(delay>0)
- SDL_Delay((unsigned int)delay);//compensate if running too fast
-
- if ( SDL_LockYUVOverlay( d_image ) ) {
- return 0;
- }
- switch (input_items.size ()){
- case 3: // first channel=Y, second channel is U , third channel is V
- src_pixels_0 = (short *) input_items[0];
- src_pixels_1 = (short *) input_items[1];
- src_pixels_2 = (short *) input_items[2];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- copy_plane_to_surface (1,d_chunk_size, src_pixels_1);
- copy_plane_to_surface (2,d_chunk_size, src_pixels_2);
- noutput_items_produced+=copy_plane_to_surface (0,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- src_pixels_1 += d_chunk_size;
- src_pixels_2 += d_chunk_size;
- }
- break;
- case 2:
- if(1) //if(pixel_interleaved_uv)
- {
- // first channel=Y, second channel is alternating pixels U and V
- src_pixels_0 = (short *) input_items[0];
- src_pixels_1 = (short *) input_items[1];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- copy_plane_to_surface (12,d_chunk_size/2, src_pixels_1);
- noutput_items_produced+=copy_plane_to_surface (0,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- src_pixels_1 += d_chunk_size;
- }
- } else
- {
- // first channel=Y, second channel is alternating lines U and V
- src_pixels_0 = (short *) input_items[0];
- src_pixels_1 = (short *) input_items[1];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- copy_plane_to_surface (1222,d_chunk_size/2, src_pixels_1);
- noutput_items_produced+=copy_plane_to_surface (0,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- src_pixels_1 += d_chunk_size;
- }
- }
- break;
- case 1: // grey (Y) input
- /* Y component */
- plane=0;
- src_pixels_0 = (short *) input_items[plane];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- noutput_items_produced+=copy_plane_to_surface (plane,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- }
- break;
- default: //0 or more then 3 channels
- std::cerr << "video_sdl_sink_s: Wrong number of channels: ";
- std::cerr <<"1, 2 or 3 channels are supported.\n Requested number of channels is "<< input_items.size () <<"\n";
- throw std::runtime_error ("video_sdl_sink_s");
- }
-
- SDL_UnlockYUVOverlay( d_image );
- return noutput_items_produced;
-}
diff --git a/gr-video-sdl/src/video_sdl_sink_s.h b/gr-video-sdl/src/video_sdl_sink_s.h
deleted file mode 100644
index 64f5b5a6c..000000000
--- a/gr-video-sdl/src/video_sdl_sink_s.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_VIDEO_SDL_SINK_S_H
-#define INCLUDED_VIDEO_SDL_SINK_S_H
-
-#include <video_sdl_api.h>
-#include <gr_sync_block.h>
-#include <string>
-#include <SDL.h>
-
-/* fourcc (four character code) */
-#define vid_fourcc(a,b,c,d) (((unsigned)(a)<<0) | ((unsigned)(b)<<8) | ((unsigned)(c)<<16) | ((unsigned)(d)<<24))
-#define IMGFMT_YV12 vid_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */
-
-class video_sdl_sink_s;
-typedef boost::shared_ptr<video_sdl_sink_s> video_sdl_sink_s_sptr;
-
-VIDEO_SDL_API video_sdl_sink_s_sptr
-video_sdl_make_sink_s (double framerate,int width=640, int height=480,unsigned int format=IMGFMT_YV12,int dst_width=-1,int dst_height=-1);
-
-/*!
- * \brief video sink using SDL
- *
- * input signature is one, two or three streams of signed short.
- * One stream: stream is grey (Y)
- * two streems: first is grey (Y), second is alternating U and V
- * Three streams: first is grey (Y), second is U, third is V
- * Input samples must be in the range [0,255].
- */
-
-class VIDEO_SDL_API video_sdl_sink_s : public gr_sync_block {
- friend VIDEO_SDL_API video_sdl_sink_s_sptr
- video_sdl_make_sink_s (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height);
-
- int d_chunk_size;
-
- protected:
- video_sdl_sink_s (double framerate,int width, int height,unsigned int format,
- int dst_width,int dst_height);
- void copy_line_pixel_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,
- const short * src_pixels,int src_width);
- void copy_line_line_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,
- const short * src_pixels,int src_width);
- void copy_line_single_plane(unsigned char *dst_pixels,const short * src_pixels,int src_width);
- void copy_line_single_plane_dec2(unsigned char *dst_pixels,const short * src_pixels,int src_width);
- int copy_plane_to_surface (int plane,int noutput_items,
- const short * src_pixels);
- float d_framerate;
- int d_wanted_frametime_ms;
- int d_width;
- int d_height;
- int d_dst_width;
- int d_dst_height;
- int d_format;
- int d_current_line;
- SDL_Surface *d_screen;
- SDL_Overlay *d_image;
- SDL_Rect d_dst_rect;
- float d_avg_delay;
- unsigned int d_wanted_ticks;
-
-
- public:
- ~video_sdl_sink_s ();
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_VIDEO_SDL_SINK_S_H */
diff --git a/gr-video-sdl/src/video_sdl_sink_uc.cc b/gr-video-sdl/src/video_sdl_sink_uc.cc
deleted file mode 100644
index 360df1109..000000000
--- a/gr-video-sdl/src/video_sdl_sink_uc.cc
+++ /dev/null
@@ -1,291 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006,2010 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <SDL.h>
-
-#include <video_sdl_sink_uc.h>
-#include <gr_io_signature.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <iostream>
-#include <stdexcept>
-#include <string.h>
-
-
-
-video_sdl_sink_uc::video_sdl_sink_uc (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height)
- : gr_sync_block ("video_sdl_sink_uc",
- gr_make_io_signature (1, 3, sizeof (unsigned char)),
- gr_make_io_signature (0, 0, 0)),
- d_chunk_size (width*height),
- d_framerate(framerate),
- d_wanted_frametime_ms(0),
- d_width(width),
- d_height (height),
- d_dst_width(dst_width),
- d_dst_height(dst_height),
- d_format(format),
- d_current_line(0),
- d_screen(NULL),
- d_image(NULL),
- d_avg_delay(0.0),
- d_wanted_ticks(0)
-{
- if(framerate<=0.0)
- d_wanted_frametime_ms=0;//Go as fast as possible
- else
- d_wanted_frametime_ms=(int)(1000.0/framerate);
- if(dst_width<0) d_dst_width=d_width;
- if(dst_height<0) d_dst_height=d_height;
- if(0==format) d_format=IMGFMT_YV12;
-
- atexit(SDL_Quit);//check if this is the way to do this
- if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
- std::cerr << "video_sdl_sink_uc: Couldn't initialize SDL:" << SDL_GetError() << " \n SDL_Init(SDL_INIT_VIDEO) failed\n";
- throw std::runtime_error ("video_sdl_sink_uc");
- };
-
- /* accept any depth */
- d_screen = SDL_SetVideoMode(dst_width, dst_height, 0, SDL_SWSURFACE|SDL_RESIZABLE|SDL_ANYFORMAT);//SDL_DOUBLEBUF |SDL_SWSURFACE| SDL_HWSURFACE||SDL_FULLSCREEN
- if ( d_screen == NULL ) {
- std::cerr << "Unable to set SDL video mode: " << SDL_GetError() <<"\n SDL_SetVideoMode() Failed \n";
- exit(1);
- }
- if ( d_image ) {
- SDL_FreeYUVOverlay(d_image);
- }
- /* Initialize and create the YUV Overlay used for video out */
- if (!(d_image = SDL_CreateYUVOverlay (d_width, d_height, SDL_YV12_OVERLAY, d_screen))) {
- std::cerr << "SDL: Couldn't create a YUV overlay: \n"<< SDL_GetError() <<"\n";
- throw std::runtime_error ("video_sdl_sink_uc");
- }
-
- printf("SDL screen_mode %d bits-per-pixel\n",
- d_screen->format->BitsPerPixel);
- printf("SDL overlay_mode %i \n",
- d_image->format);
- d_chunk_size = std::min(1,16384/width); //width*16;
- d_chunk_size = d_chunk_size*width;
- //d_chunk_size = (int) (width);
- set_output_multiple (d_chunk_size);
- /* Set the default playback area */
- d_dst_rect.x = 0;
- d_dst_rect.y = 0;
- d_dst_rect.w = d_dst_width;
- d_dst_rect.h = d_dst_height;
- //clear the surface to grey
- if ( SDL_LockYUVOverlay( d_image ) ) {
- std::cerr << "SDL: Couldn't lock YUV overlay: \n"<< SDL_GetError() <<"\n";
- throw std::runtime_error ("video_sdl_sink_uc");
- }
- memset(d_image->pixels[0], 128, d_image->pitches[0]*d_height);
- memset(d_image->pixels[1], 128, d_image->pitches[1]*d_height/2);
- memset(d_image->pixels[2], 128, d_image->pitches[2]*d_height/2);
- SDL_UnlockYUVOverlay( d_image );
-}
-
-video_sdl_sink_uc::~video_sdl_sink_uc ()
-{
- SDL_Quit();
-}
-
-video_sdl_sink_uc_sptr
-video_sdl_make_sink_uc (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height)
-{
- return gnuradio::get_initial_sptr(new video_sdl_sink_uc (framerate, width, height,format,dst_width,dst_height));
-}
-
-void
-video_sdl_sink_uc::copy_line_pixel_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,const unsigned char * src_pixels,int src_width)
-{
- for(int i=0;i<src_width;i++)
- {
- dst_pixels_u[i]=src_pixels[i*2];
- dst_pixels_v[i]=src_pixels[i*2+1];
- }
- return;
-}
-
-void
-video_sdl_sink_uc::copy_line_line_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,const unsigned char * src_pixels,int src_width)
-{
- memcpy(dst_pixels_u, src_pixels, src_width);
- memcpy(dst_pixels_v, src_pixels+src_width, src_width);
- return;
-}
-
-void
-video_sdl_sink_uc::copy_line_single_plane(unsigned char *dst_pixels,const unsigned char * src_pixels,int src_width)
-{
- memcpy(dst_pixels, src_pixels, src_width);
- return;
-}
-
-void
-video_sdl_sink_uc::copy_line_single_plane_dec2(unsigned char *dst_pixels,const unsigned char * src_pixels,int src_width)
-{
- for(int i=0,j=0;i<src_width;i+=2,j++)
- {
- dst_pixels[j]=(unsigned char)src_pixels[i];
- }
- return;
-}
-
-int
-video_sdl_sink_uc::copy_plane_to_surface (int plane,int noutput_items,
- const unsigned char * src_pixels)
-{
- const int first_dst_plane=(12==plane ||1122==plane)?1:plane;
- const int second_dst_plane=(12==plane ||1122==plane)?2:plane;
- int current_line=(0==plane)?d_current_line:d_current_line/2;
- unsigned char * dst_pixels = (unsigned char *)d_image->pixels[first_dst_plane];
- dst_pixels=&dst_pixels[current_line*d_image->pitches[first_dst_plane]];
- unsigned char * dst_pixels_2 = (unsigned char *)d_image->pixels[second_dst_plane];
- dst_pixels_2=&dst_pixels_2[current_line*d_image->pitches[second_dst_plane]];
- int src_width=(0==plane || 12==plane || 1122==plane)?d_width:d_width/2;
- int noutput_items_produced=0;
- int max_height=(0==plane)?d_height-1:d_height/2-1;
- for (int i = 0; i < noutput_items; i += src_width){
- //output one line at a time
- if(12==plane)
- {
- copy_line_pixel_interleaved(dst_pixels,dst_pixels_2,src_pixels,src_width);
- dst_pixels_2 += d_image->pitches[second_dst_plane];
- }
- else if (1122==plane)
- {
- copy_line_line_interleaved(dst_pixels,dst_pixels_2,src_pixels,src_width);
- dst_pixels_2 += d_image->pitches[second_dst_plane];
- src_pixels += src_width;
- }
- else if (0==plane)
- copy_line_single_plane(dst_pixels,src_pixels,src_width);
- else /* 1==plane || 2==plane*/
- copy_line_single_plane_dec2(dst_pixels,src_pixels,src_width);//decimate by two horizontally
- src_pixels += src_width;
- dst_pixels += d_image->pitches[first_dst_plane];
- noutput_items_produced+=src_width;
- current_line++;
- if (current_line>max_height)
- {
- //Start new frame
- //TODO, do this all in a seperate thread
- current_line=0;
- dst_pixels=d_image->pixels[first_dst_plane];
- dst_pixels_2=d_image->pixels[second_dst_plane];
- if(0==plane)
- {
- SDL_DisplayYUVOverlay(d_image, &d_dst_rect);
- //SDL_Flip(d_screen);
- unsigned int ticks=SDL_GetTicks();//milliseconds
- d_wanted_ticks+=d_wanted_frametime_ms;
- float avg_alpha=0.1;
- int time_diff=d_wanted_ticks-ticks;
- d_avg_delay=time_diff*avg_alpha +d_avg_delay*(1.0-avg_alpha);
- }
- }
- }
- if(0==plane) d_current_line=current_line;
- return noutput_items_produced;
-}
-
-int
-video_sdl_sink_uc::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
-{
- unsigned char *src_pixels_0,*src_pixels_1,*src_pixels_2;
- int noutput_items_produced=0;
- int plane;
- int delay=(int)d_avg_delay;
- if(0==d_wanted_ticks)
- d_wanted_ticks=SDL_GetTicks();
- if(delay>0)
- SDL_Delay((unsigned int)delay);//compensate if running too fast
-
- if ( SDL_LockYUVOverlay( d_image ) ) {
- return 0;
- }
- switch (input_items.size ()){
- case 3: // first channel=Y, second channel is U , third channel is V
- src_pixels_0 = (unsigned char *) input_items[0];
- src_pixels_1 = (unsigned char *) input_items[1];
- src_pixels_2 = (unsigned char *) input_items[2];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- copy_plane_to_surface (1,d_chunk_size, src_pixels_1);
- copy_plane_to_surface (2,d_chunk_size, src_pixels_2);
- noutput_items_produced+=copy_plane_to_surface (0,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- src_pixels_1 += d_chunk_size;
- src_pixels_2 += d_chunk_size;
- }
- break;
- case 2:
- if(1) //if(pixel_interleaved_uv)
- {
- // first channel=Y, second channel is alternating pixels U and V
- src_pixels_0 = (unsigned char *) input_items[0];
- src_pixels_1 = (unsigned char *) input_items[1];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- copy_plane_to_surface (12,d_chunk_size/2, src_pixels_1);
- noutput_items_produced+=copy_plane_to_surface (0,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- src_pixels_1 += d_chunk_size;
- }
- } else
- {
- // first channel=Y, second channel is alternating lines U and V
- src_pixels_0 = (unsigned char *) input_items[0];
- src_pixels_1 = (unsigned char *) input_items[1];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- copy_plane_to_surface (1222,d_chunk_size/2, src_pixels_1);
- noutput_items_produced+=copy_plane_to_surface (0,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- src_pixels_1 += d_chunk_size;
- }
- }
- break;
- case 1: // grey (Y) input
- /* Y component */
- plane=0;
- src_pixels_0 = (unsigned char *) input_items[plane];
- for (int i = 0; i < noutput_items; i += d_chunk_size){
- noutput_items_produced+=copy_plane_to_surface (plane,d_chunk_size, src_pixels_0);
- src_pixels_0 += d_chunk_size;
- }
- break;
- default: //0 or more then 3 channels
- std::cerr << "video_sdl_sink_uc: Wrong number of channels: ";
- std::cerr <<"1, 2 or 3 channels are supported.\n Requested number of channels is "<< input_items.size () <<"\n";
- throw std::runtime_error ("video_sdl_sink_uc");
- }
-
- SDL_UnlockYUVOverlay( d_image );
- return noutput_items_produced;
-}
diff --git a/gr-video-sdl/src/video_sdl_sink_uc.h b/gr-video-sdl/src/video_sdl_sink_uc.h
deleted file mode 100644
index 6c071cf9d..000000000
--- a/gr-video-sdl/src/video_sdl_sink_uc.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2006 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef INCLUDED_VIDEO_SDL_SINK_UC_H
-#define INCLUDED_VIDEO_SDL_SINK_UC_H
-
-#include <video_sdl_api.h>
-#include <gr_sync_block.h>
-#include <string>
-#include <SDL.h>
-
-/* fourcc (four character code) */
-#define vid_fourcc(a,b,c,d) (((unsigned)(a)<<0) | ((unsigned)(b)<<8) | ((unsigned)(c)<<16) | ((unsigned)(d)<<24))
-#define IMGFMT_YV12 vid_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */
-
-class video_sdl_sink_uc;
-typedef boost::shared_ptr<video_sdl_sink_uc> video_sdl_sink_uc_sptr;
-
-VIDEO_SDL_API video_sdl_sink_uc_sptr
-video_sdl_make_sink_uc (double framerate,int width=640, int height=480,unsigned int format=IMGFMT_YV12,int dst_width=-1,int dst_height=-1);
-
-/*!
- * \brief video sink using SDL
- *
- * input signature is one, two or three streams of uchar.
- * One stream: stream is grey (Y)
- * two streems: first is grey (Y), second is alternating U and V
- * Three streams: first is grey (Y), second is U, third is V
- * Input samples must be in the range [0,255].
- */
-
-class VIDEO_SDL_API video_sdl_sink_uc : public gr_sync_block {
- friend VIDEO_SDL_API video_sdl_sink_uc_sptr
- video_sdl_make_sink_uc (double framerate,int width, int height,unsigned int format,int dst_width,int dst_height);
-
- int d_chunk_size;
-
- protected:
- video_sdl_sink_uc (double framerate,int width, int height,unsigned int format,
- int dst_width,int dst_height);
- void copy_line_pixel_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,
- const unsigned char * src_pixels,int src_width);
- void copy_line_line_interleaved(unsigned char *dst_pixels_u,unsigned char *dst_pixels_v,
- const unsigned char * src_pixels,int src_width);
- void copy_line_single_plane(unsigned char *dst_pixels,const unsigned char * src_pixels,int src_width);
- void copy_line_single_plane_dec2(unsigned char *dst_pixels,const unsigned char * src_pixels,int src_width);
- int copy_plane_to_surface (int plane,int noutput_items,
- const unsigned char * src_pixels);
- float d_framerate;
- int d_wanted_frametime_ms;
- int d_width;
- int d_height;
- int d_dst_width;
- int d_dst_height;
- int d_format;
- int d_current_line;
- SDL_Surface *d_screen;
- SDL_Overlay *d_image;
- SDL_Rect d_dst_rect;
- float d_avg_delay;
- unsigned int d_wanted_ticks;
-
-
- public:
- ~video_sdl_sink_uc ();
-
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
-};
-
-#endif /* INCLUDED_VIDEO_SDL_SINK_UC_H */