ext: Use new flush vfunc of video codec base classes and remove reset implementations

This commit is contained in:
Sebastian Dröge 2013-08-15 15:08:05 +02:00
parent f11c2c9b3b
commit b1e442236f
5 changed files with 36 additions and 43 deletions

View File

@ -98,8 +98,9 @@ static void gst_jpeg_dec_get_property (GObject * object, guint prop_id,
static gboolean gst_jpeg_dec_set_format (GstVideoDecoder * dec, static gboolean gst_jpeg_dec_set_format (GstVideoDecoder * dec,
GstVideoCodecState * state); GstVideoCodecState * state);
static gboolean gst_jpeg_dec_start (GstVideoDecoder * bdec);
static gboolean gst_jpeg_dec_stop (GstVideoDecoder * bdec); static gboolean gst_jpeg_dec_stop (GstVideoDecoder * bdec);
static gboolean gst_jpeg_dec_reset (GstVideoDecoder * bdec, gboolean hard); static gboolean gst_jpeg_dec_flush (GstVideoDecoder * bdec);
static GstFlowReturn gst_jpeg_dec_parse (GstVideoDecoder * bdec, static GstFlowReturn gst_jpeg_dec_parse (GstVideoDecoder * bdec,
GstVideoCodecFrame * frame, GstAdapter * adapter, gboolean at_eos); GstVideoCodecFrame * frame, GstAdapter * adapter, gboolean at_eos);
static GstFlowReturn gst_jpeg_dec_handle_frame (GstVideoDecoder * bdec, static GstFlowReturn gst_jpeg_dec_handle_frame (GstVideoDecoder * bdec,
@ -168,8 +169,9 @@ gst_jpeg_dec_class_init (GstJpegDecClass * klass)
"Codec/Decoder/Image", "Codec/Decoder/Image",
"Decode images from JPEG format", "Wim Taymans <wim@fluendo.com>"); "Decode images from JPEG format", "Wim Taymans <wim@fluendo.com>");
vdec_class->start = gst_jpeg_dec_start;
vdec_class->stop = gst_jpeg_dec_stop; vdec_class->stop = gst_jpeg_dec_stop;
vdec_class->reset = gst_jpeg_dec_reset; vdec_class->flush = gst_jpeg_dec_flush;
vdec_class->parse = gst_jpeg_dec_parse; vdec_class->parse = gst_jpeg_dec_parse;
vdec_class->set_format = gst_jpeg_dec_set_format; vdec_class->set_format = gst_jpeg_dec_set_format;
vdec_class->handle_frame = gst_jpeg_dec_handle_frame; vdec_class->handle_frame = gst_jpeg_dec_handle_frame;
@ -1268,7 +1270,21 @@ gst_jpeg_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
} }
static gboolean static gboolean
gst_jpeg_dec_reset (GstVideoDecoder * bdec, gboolean hard) gst_jpeg_dec_start (GstVideoDecoder * bdec)
{
GstJpegDec *dec = (GstJpegDec *) bdec;
dec->saw_header = FALSE;
dec->parse_entropy_len = 0;
dec->parse_resync = FALSE;
gst_video_decoder_set_packetized (bdec, FALSE);
return TRUE;
}
static gboolean
gst_jpeg_dec_flush (GstVideoDecoder * bdec)
{ {
GstJpegDec *dec = (GstJpegDec *) bdec; GstJpegDec *dec = (GstJpegDec *) bdec;
@ -1277,13 +1293,6 @@ gst_jpeg_dec_reset (GstVideoDecoder * bdec, gboolean hard)
dec->parse_resync = FALSE; dec->parse_resync = FALSE;
dec->saw_header = FALSE; dec->saw_header = FALSE;
if (hard) {
dec->parse_entropy_len = 0;
dec->parse_resync = FALSE;
gst_video_decoder_set_packetized (bdec, FALSE);
}
return TRUE; return TRUE;
} }

View File

@ -80,7 +80,6 @@ static void gst_jpegenc_get_property (GObject * object, guint prop_id,
static gboolean gst_jpegenc_start (GstVideoEncoder * benc); static gboolean gst_jpegenc_start (GstVideoEncoder * benc);
static gboolean gst_jpegenc_stop (GstVideoEncoder * benc); static gboolean gst_jpegenc_stop (GstVideoEncoder * benc);
static gboolean gst_jpegenc_reset (GstVideoEncoder * benc, gboolean hard);
static gboolean gst_jpegenc_set_format (GstVideoEncoder * encoder, static gboolean gst_jpegenc_set_format (GstVideoEncoder * encoder,
GstVideoCodecState * state); GstVideoCodecState * state);
static GstFlowReturn gst_jpegenc_handle_frame (GstVideoEncoder * encoder, static GstFlowReturn gst_jpegenc_handle_frame (GstVideoEncoder * encoder,
@ -161,7 +160,6 @@ gst_jpegenc_class_init (GstJpegEncClass * klass)
venc_class->start = gst_jpegenc_start; venc_class->start = gst_jpegenc_start;
venc_class->stop = gst_jpegenc_stop; venc_class->stop = gst_jpegenc_stop;
venc_class->reset = gst_jpegenc_reset;
venc_class->set_format = gst_jpegenc_set_format; venc_class->set_format = gst_jpegenc_set_format;
venc_class->handle_frame = gst_jpegenc_handle_frame; venc_class->handle_frame = gst_jpegenc_handle_frame;
venc_class->propose_allocation = gst_jpegenc_propose_allocation; venc_class->propose_allocation = gst_jpegenc_propose_allocation;
@ -303,16 +301,6 @@ gst_jpegenc_init (GstJpegEnc * jpegenc)
jpegenc->idct_method = JPEG_DEFAULT_IDCT_METHOD; jpegenc->idct_method = JPEG_DEFAULT_IDCT_METHOD;
} }
static gboolean
gst_jpegenc_reset (GstVideoEncoder * benc, gboolean hard)
{
GstJpegEnc *enc = (GstJpegEnc *) benc;
enc->sof_marker = -1;
return TRUE;
}
static void static void
gst_jpegenc_finalize (GObject * object) gst_jpegenc_finalize (GObject * object)
{ {
@ -614,6 +602,7 @@ gst_jpegenc_start (GstVideoEncoder * benc)
enc->line[0] = NULL; enc->line[0] = NULL;
enc->line[1] = NULL; enc->line[1] = NULL;
enc->line[2] = NULL; enc->line[2] = NULL;
enc->sof_marker = -1;
return TRUE; return TRUE;
} }

View File

@ -42,12 +42,12 @@ GST_DEBUG_CATEGORY_STATIC (pngdec_debug);
#define GST_CAT_DEFAULT pngdec_debug #define GST_CAT_DEFAULT pngdec_debug
static gboolean gst_pngdec_libpng_init (GstPngDec * pngdec); static gboolean gst_pngdec_libpng_init (GstPngDec * pngdec);
static gboolean gst_pngdec_reset (GstVideoDecoder * decoder, gboolean hard);
static GstFlowReturn gst_pngdec_caps_create_and_set (GstPngDec * pngdec); static GstFlowReturn gst_pngdec_caps_create_and_set (GstPngDec * pngdec);
static gboolean gst_pngdec_start (GstVideoDecoder * decoder); static gboolean gst_pngdec_start (GstVideoDecoder * decoder);
static gboolean gst_pngdec_stop (GstVideoDecoder * decoder); static gboolean gst_pngdec_stop (GstVideoDecoder * decoder);
static gboolean gst_pngdec_flush (GstVideoDecoder * decoder);
static gboolean gst_pngdec_set_format (GstVideoDecoder * Decoder, static gboolean gst_pngdec_set_format (GstVideoDecoder * Decoder,
GstVideoCodecState * state); GstVideoCodecState * state);
static GstFlowReturn gst_pngdec_parse (GstVideoDecoder * decoder, static GstFlowReturn gst_pngdec_parse (GstVideoDecoder * decoder,
@ -92,7 +92,7 @@ gst_pngdec_class_init (GstPngDecClass * klass)
vdec_class->start = gst_pngdec_start; vdec_class->start = gst_pngdec_start;
vdec_class->stop = gst_pngdec_stop; vdec_class->stop = gst_pngdec_stop;
vdec_class->reset = gst_pngdec_reset; vdec_class->flush = gst_pngdec_flush;
vdec_class->set_format = gst_pngdec_set_format; vdec_class->set_format = gst_pngdec_set_format;
vdec_class->parse = gst_pngdec_parse; vdec_class->parse = gst_pngdec_parse;
vdec_class->handle_frame = gst_pngdec_handle_frame; vdec_class->handle_frame = gst_pngdec_handle_frame;
@ -382,16 +382,11 @@ gst_pngdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
pngdec->current_frame_map.data, pngdec->current_frame_map.size); pngdec->current_frame_map.data, pngdec->current_frame_map.size);
if (pngdec->image_ready) { if (pngdec->image_ready) {
if (1) { /* Reset ourselves for the next frame */
/* Reset ourselves for the next frame */ gst_pngdec_flush (decoder);
gst_pngdec_reset (decoder, TRUE); GST_LOG_OBJECT (pngdec, "setting up callbacks for next frame");
GST_LOG_OBJECT (pngdec, "setting up callbacks for next frame"); png_set_progressive_read_fn (pngdec->png, pngdec,
png_set_progressive_read_fn (pngdec->png, pngdec, user_info_callback, user_endrow_callback, user_end_callback);
user_info_callback, user_endrow_callback, user_end_callback);
} else {
GST_LOG_OBJECT (pngdec, "sending EOS");
pngdec->ret = GST_FLOW_EOS;
}
pngdec->image_ready = FALSE; pngdec->image_ready = FALSE;
} else { } else {
/* An error happened and we have to unmap */ /* An error happened and we have to unmap */
@ -629,7 +624,7 @@ gst_pngdec_stop (GstVideoDecoder * decoder)
/* Clean up the libpng structures */ /* Clean up the libpng structures */
static gboolean static gboolean
gst_pngdec_reset (GstVideoDecoder * decoder, gboolean hard) gst_pngdec_flush (GstVideoDecoder * decoder)
{ {
gst_pngdec_libpng_clear ((GstPngDec *) decoder); gst_pngdec_libpng_clear ((GstPngDec *) decoder);
gst_pngdec_libpng_init ((GstPngDec *) decoder); gst_pngdec_libpng_init ((GstPngDec *) decoder);

View File

@ -106,7 +106,7 @@ static gboolean gst_vp8_dec_start (GstVideoDecoder * decoder);
static gboolean gst_vp8_dec_stop (GstVideoDecoder * decoder); static gboolean gst_vp8_dec_stop (GstVideoDecoder * decoder);
static gboolean gst_vp8_dec_set_format (GstVideoDecoder * decoder, static gboolean gst_vp8_dec_set_format (GstVideoDecoder * decoder,
GstVideoCodecState * state); GstVideoCodecState * state);
static gboolean gst_vp8_dec_reset (GstVideoDecoder * decoder, gboolean hard); static gboolean gst_vp8_dec_flush (GstVideoDecoder * decoder);
static GstFlowReturn gst_vp8_dec_handle_frame (GstVideoDecoder * decoder, static GstFlowReturn gst_vp8_dec_handle_frame (GstVideoDecoder * decoder,
GstVideoCodecFrame * frame); GstVideoCodecFrame * frame);
static gboolean gst_vp8_dec_decide_allocation (GstVideoDecoder * decoder, static gboolean gst_vp8_dec_decide_allocation (GstVideoDecoder * decoder,
@ -184,7 +184,7 @@ gst_vp8_dec_class_init (GstVP8DecClass * klass)
base_video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_vp8_dec_start); base_video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_vp8_dec_start);
base_video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_vp8_dec_stop); base_video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_vp8_dec_stop);
base_video_decoder_class->reset = GST_DEBUG_FUNCPTR (gst_vp8_dec_reset); base_video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_vp8_dec_flush);
base_video_decoder_class->set_format = base_video_decoder_class->set_format =
GST_DEBUG_FUNCPTR (gst_vp8_dec_set_format); GST_DEBUG_FUNCPTR (gst_vp8_dec_set_format);
base_video_decoder_class->handle_frame = base_video_decoder_class->handle_frame =
@ -324,11 +324,11 @@ gst_vp8_dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
} }
static gboolean static gboolean
gst_vp8_dec_reset (GstVideoDecoder * base_video_decoder, gboolean hard) gst_vp8_dec_flush (GstVideoDecoder * base_video_decoder)
{ {
GstVP8Dec *decoder; GstVP8Dec *decoder;
GST_DEBUG_OBJECT (base_video_decoder, "reset"); GST_DEBUG_OBJECT (base_video_decoder, "flush");
decoder = GST_VP8_DEC (base_video_decoder); decoder = GST_VP8_DEC (base_video_decoder);

View File

@ -106,7 +106,7 @@ static gboolean gst_vp9_dec_start (GstVideoDecoder * decoder);
static gboolean gst_vp9_dec_stop (GstVideoDecoder * decoder); static gboolean gst_vp9_dec_stop (GstVideoDecoder * decoder);
static gboolean gst_vp9_dec_set_format (GstVideoDecoder * decoder, static gboolean gst_vp9_dec_set_format (GstVideoDecoder * decoder,
GstVideoCodecState * state); GstVideoCodecState * state);
static gboolean gst_vp9_dec_reset (GstVideoDecoder * decoder, gboolean hard); static gboolean gst_vp9_dec_flush (GstVideoDecoder * decoder);
static GstFlowReturn gst_vp9_dec_handle_frame (GstVideoDecoder * decoder, static GstFlowReturn gst_vp9_dec_handle_frame (GstVideoDecoder * decoder,
GstVideoCodecFrame * frame); GstVideoCodecFrame * frame);
static gboolean gst_vp9_dec_decide_allocation (GstVideoDecoder * decoder, static gboolean gst_vp9_dec_decide_allocation (GstVideoDecoder * decoder,
@ -184,7 +184,7 @@ gst_vp9_dec_class_init (GstVP9DecClass * klass)
base_video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_vp9_dec_start); base_video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_vp9_dec_start);
base_video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_vp9_dec_stop); base_video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_vp9_dec_stop);
base_video_decoder_class->reset = GST_DEBUG_FUNCPTR (gst_vp9_dec_reset); base_video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_vp9_dec_flush);
base_video_decoder_class->set_format = base_video_decoder_class->set_format =
GST_DEBUG_FUNCPTR (gst_vp9_dec_set_format); GST_DEBUG_FUNCPTR (gst_vp9_dec_set_format);
base_video_decoder_class->handle_frame = base_video_decoder_class->handle_frame =
@ -324,11 +324,11 @@ gst_vp9_dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
} }
static gboolean static gboolean
gst_vp9_dec_reset (GstVideoDecoder * base_video_decoder, gboolean hard) gst_vp9_dec_flush (GstVideoDecoder * base_video_decoder)
{ {
GstVP9Dec *decoder; GstVP9Dec *decoder;
GST_DEBUG_OBJECT (base_video_decoder, "reset"); GST_DEBUG_OBJECT (base_video_decoder, "flush");
decoder = GST_VP9_DEC (base_video_decoder); decoder = GST_VP9_DEC (base_video_decoder);