Update for new API

Original commit message from CVS:
Update for new API
This commit is contained in:
David Schleef 2003-01-17 05:27:12 +00:00
parent fd3571bdd4
commit b2d148685a
2 changed files with 37 additions and 35 deletions

View file

@ -70,7 +70,7 @@ GST_PAD_TEMPLATE_FACTORY (audio_template_factory,
"width", GST_PROPS_INT(16),
"depth", GST_PROPS_INT(16),
"rate", GST_PROPS_INT(44100),
"channels", GST_PROPS_INT(1)
"channels", GST_PROPS_INT(2)
)
);
@ -496,8 +496,9 @@ printf("setting caps\n");
"video/raw",
gst_props_new (
"format", GST_PROPS_FOURCC (GST_MAKE_FOURCC ('R','G','B',' ')),
"width", GST_PROPS_INT (640),
"height", GST_PROPS_INT (480),
///"width", GST_PROPS_INT (640),
//"height", GST_PROPS_INT (480),
"rate", GST_PROPS_INT(12),
NULL)));
gst_pad_try_set_caps (swfdec->audiopad,
@ -520,7 +521,7 @@ printf("adding pad\n");
gst_element_add_pad(element, swfdec->audiopad);
}
ret = swf_parse(swfdec->state);
ret = swfdec_decoder_parse(swfdec->state);
if(ret==SWF_NEEDBITS){
buf = gst_pad_pull(swfdec->sinkpad);
if(GST_IS_EVENT(buf)){
@ -537,15 +538,16 @@ printf("adding pad\n");
if(!GST_BUFFER_DATA(buf)){
printf("expected non-null buffer\n");
}
ret = swf_addbits(swfdec->state,GST_BUFFER_DATA(buf),
GST_BUFFER_SIZE(buf));
ret = swfdec_decoder_addbits(swfdec->state,
GST_BUFFER_DATA(buf), GST_BUFFER_SIZE(buf));
}
}
if(ret==SWF_CHANGE){
swfdec->width = swfdec->state->width;
swfdec->height = swfdec->state->height;
swfdec->interval = GST_SECOND / swfdec->state->rate;
swfdec_decoder_get_image_size(swfdec->state,
&swfdec->width, &swfdec->height);
swfdec_decoder_get_rate(swfdec->state, &swfdec->rate);
swfdec->interval = GST_SECOND / swfdec->rate;
#if G_BYTE_ORDER == 4321
#define RED_MASK 0xff0000
#define GREEN_MASK 0x00ff00
@ -604,20 +606,15 @@ printf("adding pad\n");
if(ret==SWF_IMAGE){
GstBuffer *newbuf = NULL;
int newsize = swfdec->state->width * swfdec->state->height * 3;
unsigned char *data;
int len;
/* video stuff */
if(swfdec->pool){
newbuf = gst_buffer_new_from_pool(swfdec->pool, 0, 0);
}
if(!newbuf){
newbuf = gst_buffer_new();
GST_BUFFER_SIZE(newbuf) = newsize;
GST_BUFFER_DATA(newbuf) = g_malloc(newsize);
}
g_return_if_fail(GST_BUFFER_DATA(newbuf) != NULL);
newbuf = gst_buffer_new();
GST_BUFFER_SIZE(newbuf) = swfdec->width * swfdec->height * 3;
memcpy(GST_BUFFER_DATA(newbuf),swfdec->state->buffer,newsize);
swfdec_decoder_get_image(swfdec->state, &data);
GST_BUFFER_DATA(newbuf) = data;
swfdec->timestamp += swfdec->interval;
GST_BUFFER_TIMESTAMP(newbuf) = swfdec->timestamp;
@ -625,15 +622,19 @@ printf("adding pad\n");
gst_pad_push(swfdec->videopad, newbuf);
/* audio stuff */
newbuf = gst_buffer_new();
newsize = 2*44100.0/swfdec->state->rate;
GST_BUFFER_SIZE(newbuf) = newsize;
GST_BUFFER_DATA(newbuf) = g_malloc(newsize);
memcpy(GST_BUFFER_DATA(newbuf),swfdec->state->sound_buffer,
newsize);
GST_BUFFER_TIMESTAMP(newbuf) = swfdec->timestamp;
gst_pad_push(swfdec->audiopad, newbuf);
data = swfdec_decoder_get_sound_chunk(swfdec->state, &len);
while(data){
newbuf = gst_buffer_new();
GST_BUFFER_SIZE(newbuf) = len;
GST_BUFFER_DATA(newbuf) = data;
GST_BUFFER_TIMESTAMP(newbuf) = swfdec->timestamp;
gst_pad_push(swfdec->audiopad, newbuf);
data = swfdec_decoder_get_sound_chunk(swfdec->state, &len);
}
}
if(ret==SWF_EOF){
@ -670,10 +671,10 @@ gst_swfdec_init (GstSwfdec *swfdec)
gst_element_set_loop_function(GST_ELEMENT(swfdec), gst_swfdec_loop);
/* initialize the swfdec decoder state */
swfdec->state = swf_init();
swfdec->state = swfdec_decoder_new();
g_return_if_fail(swfdec->state != NULL);
swfdec->state->colorspace = SWF_COLORSPACE_RGB888;
swfdec_decoder_set_colorspace(swfdec->state, SWF_COLORSPACE_RGB888);
GST_FLAG_SET (GST_ELEMENT (swfdec), GST_ELEMENT_EVENT_AWARE);
}
@ -684,7 +685,7 @@ gst_swfdec_dispose (GObject *object)
//GstSwfdec *swfdec = GST_SWFDEC (object);
/* FIXME */
//swf_state_free(swfdec->state);
//swfdec_decoder_free(swfdec->state);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@ -737,7 +738,7 @@ gst_swfdec_chain (GstPad *pad, GstBuffer *buf)
/* fprintf(stderr, "SWFDEC: in timestamp=%llu\n",GST_BUFFER_TIMESTAMP(buf)); */
/* fprintf(stderr, "SWFDEC: have buffer of %d bytes\n",size); */
ret = swf_addbits(swfdec->state, data, size);
ret = swfdec_decoder_addbits(swfdec->state, data, size);
if(ret==SWF_IMAGE){
@ -1010,7 +1011,7 @@ gst_swfdec_change_state (GstElement *element)
case GST_STATE_READY_TO_PAUSED:
{
//gst_swfdec_vo_open (swfdec);
//swf_init (swfdec->decoder, swfdec->accel, swfdec->vo);
//swfdec_decoder_new (swfdec->decoder, swfdec->accel, swfdec->vo);
//swfdec->decoder->is_sequence_needed = 1;
//swfdec->decoder->frame_rate_code = 0;

View file

@ -24,7 +24,7 @@
#include <config.h>
#include <gst/gst.h>
#include <swf.h>
#include <swfdec.h>
#ifdef __cplusplus
extern "C" {
@ -54,12 +54,13 @@ struct _GstSwfdec {
GstPad *audiopad;
GstBufferPool *pool;
swf_state_t *state;
SwfdecDecoder *state;
gboolean closed;
/* the timestamp of the next frame */
gboolean first;
double rate;
gint64 timestamp;
gint64 interval;
gdouble frame_rate;