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

View File

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