From 49d0bcce24d6627c5996d7de171b66075e8703f8 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Sat, 9 Oct 2010 17:36:07 -0700 Subject: [PATCH] [MOVED FROM BAD 057/134] basevideo: Move common fields/functions to basecodec --- ext/vp8/gstvp8dec.c | 41 ++++++++++++++++---------------------- ext/vp8/gstvp8enc.c | 57 ++++++++++++++++++++++++++--------------------------- 2 files changed, 45 insertions(+), 53 deletions(-) diff --git a/ext/vp8/gstvp8dec.c b/ext/vp8/gstvp8dec.c index 7bad465..ecc7563 100644 --- a/ext/vp8/gstvp8dec.c +++ b/ext/vp8/gstvp8dec.c @@ -330,21 +330,17 @@ static void gst_vp8_dec_image_to_buffer (GstVP8Dec * dec, const vpx_image_t * img, GstBuffer * buffer) { - GstBaseVideoDecoder *decoder = (GstBaseVideoDecoder *) dec; int stride, w, h, i; guint8 *d; + GstVideoState *state = &GST_BASE_VIDEO_CODEC (dec)->state; d = GST_BUFFER_DATA (buffer) + - gst_video_format_get_component_offset (decoder->state.format, 0, - decoder->state.width, decoder->state.height); - stride = - gst_video_format_get_row_stride (decoder->state.format, 0, - decoder->state.width); - h = gst_video_format_get_component_height (decoder->state.format, 0, - decoder->state.height); + gst_video_format_get_component_offset (state->format, 0, + state->width, state->height); + stride = gst_video_format_get_row_stride (state->format, 0, state->width); + h = gst_video_format_get_component_height (state->format, 0, state->height); h = MIN (h, img->h); - w = gst_video_format_get_component_width (decoder->state.format, 0, - decoder->state.width); + w = gst_video_format_get_component_width (state->format, 0, state->width); w = MIN (w, img->w); for (i = 0; i < h; i++) @@ -352,24 +348,20 @@ gst_vp8_dec_image_to_buffer (GstVP8Dec * dec, const vpx_image_t * img, img->planes[VPX_PLANE_Y] + i * img->stride[VPX_PLANE_Y], w); d = GST_BUFFER_DATA (buffer) + - gst_video_format_get_component_offset (decoder->state.format, 1, - decoder->state.width, decoder->state.height); - stride = - gst_video_format_get_row_stride (decoder->state.format, 1, - decoder->state.width); - h = gst_video_format_get_component_height (decoder->state.format, 1, - decoder->state.height); + gst_video_format_get_component_offset (state->format, 1, + state->width, state->height); + stride = gst_video_format_get_row_stride (state->format, 1, state->width); + h = gst_video_format_get_component_height (state->format, 1, state->height); h = MIN (h, img->h >> img->y_chroma_shift); - w = gst_video_format_get_component_width (decoder->state.format, 1, - decoder->state.width); + w = gst_video_format_get_component_width (state->format, 1, state->width); w = MIN (w, img->w >> img->x_chroma_shift); for (i = 0; i < h; i++) memcpy (d + i * stride, img->planes[VPX_PLANE_U] + i * img->stride[VPX_PLANE_U], w); d = GST_BUFFER_DATA (buffer) + - gst_video_format_get_component_offset (decoder->state.format, 2, - decoder->state.width, decoder->state.height); + gst_video_format_get_component_offset (state->format, 2, + state->width, state->height); /* Same stride, height, width as above */ for (i = 0; i < h; i++) memcpy (d + i * stride, @@ -395,6 +387,7 @@ gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder, GstVideoFrame * frame) int flags = 0; vpx_codec_stream_info_t stream_info; vpx_codec_caps_t caps; + GstVideoState *state = &GST_BASE_VIDEO_CODEC (dec)->state; memset (&stream_info, 0, sizeof (stream_info)); stream_info.sz = sizeof (stream_info); @@ -410,9 +403,9 @@ gst_vp8_dec_handle_frame (GstBaseVideoDecoder * decoder, GstVideoFrame * frame) } /* should set size here */ - decoder->state.width = stream_info.w; - decoder->state.height = stream_info.h; - decoder->state.format = GST_VIDEO_FORMAT_I420; + state->width = stream_info.w; + state->height = stream_info.h; + state->format = GST_VIDEO_FORMAT_I420; gst_vp8_dec_send_tags (dec); caps = vpx_codec_get_caps (&vpx_codec_vp8_dx_algo); diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c index 77a425e..e284191 100644 --- a/ext/vp8/gstvp8enc.c +++ b/ext/vp8/gstvp8enc.c @@ -672,34 +672,31 @@ static vpx_image_t * gst_vp8_enc_buffer_to_image (GstVP8Enc * enc, GstBuffer * buffer) { vpx_image_t *image = g_slice_new0 (vpx_image_t); - GstBaseVideoEncoder *encoder = (GstBaseVideoEncoder *) enc; guint8 *data = GST_BUFFER_DATA (buffer); + GstVideoState *state = &GST_BASE_VIDEO_CODEC (enc)->state; image->fmt = VPX_IMG_FMT_I420; image->bps = 12; image->x_chroma_shift = image->y_chroma_shift = 1; image->img_data = data; - image->w = image->d_w = encoder->state.width; - image->h = image->d_h = encoder->state.height; + image->w = image->d_w = state->width; + image->h = image->d_h = state->height; image->stride[VPX_PLANE_Y] = - gst_video_format_get_row_stride (encoder->state.format, 0, - encoder->state.width); + gst_video_format_get_row_stride (state->format, 0, state->width); image->stride[VPX_PLANE_U] = - gst_video_format_get_row_stride (encoder->state.format, 1, - encoder->state.width); + gst_video_format_get_row_stride (state->format, 1, state->width); image->stride[VPX_PLANE_V] = - gst_video_format_get_row_stride (encoder->state.format, 2, - encoder->state.width); + gst_video_format_get_row_stride (state->format, 2, state->width); image->planes[VPX_PLANE_Y] = - data + gst_video_format_get_component_offset (encoder->state.format, 0, - encoder->state.width, encoder->state.height); + data + gst_video_format_get_component_offset (state->format, 0, + state->width, state->height); image->planes[VPX_PLANE_U] = - data + gst_video_format_get_component_offset (encoder->state.format, 1, - encoder->state.width, encoder->state.height); + data + gst_video_format_get_component_offset (state->format, 1, + state->width, state->height); image->planes[VPX_PLANE_V] = - data + gst_video_format_get_component_offset (encoder->state.format, 2, - encoder->state.width, encoder->state.height); + data + gst_video_format_get_component_offset (state->format, 2, + state->width, state->height); return image; } @@ -746,10 +743,10 @@ gst_vp8_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder, return FALSE; } - cfg.g_w = base_video_encoder->state.width; - cfg.g_h = base_video_encoder->state.height; - cfg.g_timebase.num = base_video_encoder->state.fps_d; - cfg.g_timebase.den = base_video_encoder->state.fps_n; + cfg.g_w = state->width; + cfg.g_h = state->height; + cfg.g_timebase.num = state->fps_d; + cfg.g_timebase.den = state->fps_n; cfg.g_error_resilient = encoder->error_resilient; cfg.g_lag_in_frames = encoder->max_latency; @@ -818,8 +815,7 @@ gst_vp8_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder, gst_base_video_encoder_set_latency (base_video_encoder, 0, gst_util_uint64_scale (encoder->max_latency, - base_video_encoder->state.fps_d * GST_SECOND, - base_video_encoder->state.fps_n)); + state->fps_d * GST_SECOND, state->fps_n)); encoder->inited = TRUE; } @@ -954,7 +950,8 @@ gst_vp8_enc_shape_output (GstBaseVideoEncoder * base_video_encoder, } GST_BUFFER_TIMESTAMP (buf) = gst_video_state_get_timestamp (state, - &base_video_encoder->segment, frame->presentation_frame_number); + &GST_BASE_VIDEO_CODEC (base_video_encoder)->segment, + frame->presentation_frame_number); GST_BUFFER_DURATION (buf) = 0; GST_BUFFER_OFFSET_END (buf) = _to_granulepos (frame->presentation_frame_number + 1, @@ -963,7 +960,7 @@ gst_vp8_enc_shape_output (GstBaseVideoEncoder * base_video_encoder, gst_util_uint64_scale (frame->presentation_frame_number + 1, GST_SECOND * state->fps_d, state->fps_n); - gst_buffer_set_caps (buf, base_video_encoder->caps); + gst_buffer_set_caps (buf, GST_BASE_VIDEO_CODEC (base_video_encoder)->caps); ret = gst_pad_push (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder), buf); if (ret != GST_FLOW_OK) { @@ -984,18 +981,20 @@ gst_vp8_enc_shape_output (GstBaseVideoEncoder * base_video_encoder, } GST_BUFFER_TIMESTAMP (buf) = gst_video_state_get_timestamp (state, - &base_video_encoder->segment, frame->presentation_frame_number); - GST_BUFFER_DURATION (buf) = gst_video_state_get_timestamp (state, - &base_video_encoder->segment, + &GST_BASE_VIDEO_CODEC (base_video_encoder)->segment, + frame->presentation_frame_number); + GST_BUFFER_DURATION (buf) = + gst_video_state_get_timestamp (state, + &GST_BASE_VIDEO_CODEC (base_video_encoder)->segment, frame->presentation_frame_number + 1) - GST_BUFFER_TIMESTAMP (buf); GST_BUFFER_OFFSET_END (buf) = - _to_granulepos (frame->presentation_frame_number + 1, - 0, encoder->keyframe_distance); + _to_granulepos (frame->presentation_frame_number + 1, 0, + encoder->keyframe_distance); GST_BUFFER_OFFSET (buf) = gst_util_uint64_scale (frame->presentation_frame_number + 1, GST_SECOND * state->fps_d, state->fps_n); - gst_buffer_set_caps (buf, base_video_encoder->caps); + gst_buffer_set_caps (buf, GST_BASE_VIDEO_CODEC (base_video_encoder)->caps); ret = gst_pad_push (GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder), buf); if (ret != GST_FLOW_OK) { -- 2.7.4