static void gst_aasink_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstAASink *aasink; aasink = GST_AASINK (object); switch (prop_id) { case PROP_WIDTH:{ g_value_set_int (value, aasink->ascii_surf.width); break; } case PROP_HEIGHT:{ g_value_set_int (value, aasink->ascii_surf.height); break; } case PROP_DRIVER:{ g_value_set_enum (value, aasink->aa_driver); break; } case PROP_DITHER:{ g_value_set_enum (value, aasink->ascii_parms.dither); break; } case PROP_BRIGHTNESS:{ g_value_set_int (value, aasink->ascii_parms.bright); break; } case PROP_CONTRAST:{ g_value_set_int (value, aasink->ascii_parms.contrast); break; } case PROP_GAMMA:{ g_value_set_float (value, aasink->ascii_parms.gamma); break; } case PROP_INVERSION:{ g_value_set_boolean (value, aasink->ascii_parms.inversion); break; } case PROP_RANDOMVAL:{ g_value_set_int (value, aasink->ascii_parms.randomval); break; } case PROP_FRAMES_DISPLAYED:{ g_value_set_int (value, aasink->frames_displayed); break; } case PROP_FRAME_TIME:{ g_value_set_int (value, aasink->frame_time / 1000000); break; } default:{ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } }
static GstStateChangeReturn gst_aasink_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: if (!gst_aasink_open (GST_AASINK (element))) goto open_failed; break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: break; case GST_STATE_CHANGE_READY_TO_NULL: gst_aasink_close (GST_AASINK (element)); break; default: break; } return ret; open_failed: { return GST_STATE_CHANGE_FAILURE; } }
static void gst_aasink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstAASink *aasink; aasink = GST_AASINK (object); switch (prop_id) { case PROP_WIDTH: aasink->ascii_surf.width = g_value_get_int (value); break; case PROP_HEIGHT: aasink->ascii_surf.height = g_value_get_int (value); break; case PROP_DRIVER:{ aasink->aa_driver = g_value_get_enum (value); break; } case PROP_DITHER:{ aasink->ascii_parms.dither = g_value_get_enum (value); break; } case PROP_BRIGHTNESS:{ aasink->ascii_parms.bright = g_value_get_int (value); break; } case PROP_CONTRAST:{ aasink->ascii_parms.contrast = g_value_get_int (value); break; } case PROP_GAMMA:{ aasink->ascii_parms.gamma = g_value_get_float (value); break; } case PROP_INVERSION:{ aasink->ascii_parms.inversion = g_value_get_boolean (value); break; } case PROP_RANDOMVAL:{ aasink->ascii_parms.randomval = g_value_get_int (value); break; } default: break; } }
static gboolean gst_aasink_setcaps (GstBaseSink * basesink, GstCaps * caps) { GstAASink *aasink; GstVideoInfo info; aasink = GST_AASINK (basesink); if (!gst_video_info_from_caps (&info, caps)) goto invalid_caps; aasink->info = info; return TRUE; /* ERRORS */ invalid_caps: { GST_DEBUG_OBJECT (aasink, "invalid caps"); return FALSE; } }
static GstFlowReturn gst_aasink_render (GstBaseSink * basesink, GstBuffer * buffer) { GstAASink *aasink; aasink = GST_AASINK (basesink); GST_DEBUG ("render"); gst_aasink_scale (aasink, GST_BUFFER_DATA (buffer), /* src */ aa_image (aasink->context), /* dest */ aasink->width, /* sw */ aasink->height, /* sh */ aa_imgwidth (aasink->context), /* dw */ aa_imgheight (aasink->context)); /* dh */ aa_render (aasink->context, &aasink->ascii_parms, 0, 0, aa_imgwidth (aasink->context), aa_imgheight (aasink->context)); aa_flush (aasink->context); aa_getevent (aasink->context, FALSE); return GST_FLOW_OK; }
static gboolean gst_aasink_setcaps (GstBaseSink * basesink, GstCaps * caps) { GstAASink *aasink; GstStructure *structure; aasink = GST_AASINK (basesink); structure = gst_caps_get_structure (caps, 0); gst_structure_get_int (structure, "width", &aasink->width); gst_structure_get_int (structure, "height", &aasink->height); /* FIXME aasink->format is never set */ g_print ("%d %d\n", aasink->width, aasink->height); GST_DEBUG ("aasink: setting %08lx (%" GST_FOURCC_FORMAT ")", aasink->format, GST_FOURCC_ARGS (aasink->format)); g_signal_emit (G_OBJECT (aasink), gst_aasink_signals[SIGNAL_HAVE_SIZE], 0, aasink->width, aasink->height); return TRUE; }
static GstFlowReturn gst_aasink_show_frame (GstVideoSink * videosink, GstBuffer * buffer) { GstAASink *aasink; GstVideoFrame frame; aasink = GST_AASINK (videosink); GST_DEBUG ("show frame"); if (!gst_video_frame_map (&frame, &aasink->info, buffer, GST_MAP_READ)) goto invalid_frame; gst_aasink_scale (aasink, GST_VIDEO_FRAME_PLANE_DATA (&frame, 0), /* src */ aa_image (aasink->context), /* dest */ GST_VIDEO_INFO_WIDTH (&aasink->info), /* sw */ GST_VIDEO_INFO_HEIGHT (&aasink->info), /* sh */ GST_VIDEO_FRAME_PLANE_STRIDE (&frame, 0), /* ss */ aa_imgwidth (aasink->context), /* dw */ aa_imgheight (aasink->context)); /* dh */ aa_render (aasink->context, &aasink->ascii_parms, 0, 0, aa_imgwidth (aasink->context), aa_imgheight (aasink->context)); aa_flush (aasink->context); aa_getevent (aasink->context, FALSE); gst_video_frame_unmap (&frame); return GST_FLOW_OK; /* ERRORS */ invalid_frame: { GST_DEBUG_OBJECT (aasink, "invalid frame"); return GST_FLOW_ERROR; } }