encoder: refactor status codes.

Drop obsolete or unused status codes. Align some status codes with the
decoder counterparts.
This commit is contained in:
Gwenole Beauchesne 2013-12-03 17:04:43 +01:00
parent 8ecc35ecf2
commit 038149b69b
5 changed files with 45 additions and 48 deletions

View file

@ -208,7 +208,7 @@ gst_vaapi_encoder_free_sync_pictures (GstVaapiEncoder * encoder)
GST_VAAPI_ENCODER_UNLOCK (encoder);
}
static gboolean
static void
gst_vaapi_encoder_push_sync_picture (GstVaapiEncoder * encoder,
GstVaapiEncoderSyncPic * sync_pic)
{
@ -216,7 +216,6 @@ gst_vaapi_encoder_push_sync_picture (GstVaapiEncoder * encoder,
g_queue_push_tail (&encoder->sync_pictures, sync_pic);
GST_VAAPI_ENCODER_SYNC_SIGNAL (encoder);
GST_VAAPI_ENCODER_UNLOCK (encoder);
return TRUE;
}
static GstVaapiEncoderStatus
@ -233,7 +232,7 @@ gst_vaapi_encoder_pop_sync_picture (GstVaapiEncoder * encoder,
goto timeout;
if (g_queue_is_empty (&encoder->sync_pictures)) {
ret = GST_VAAPI_ENCODER_STATUS_UNKNOWN_ERR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_UNKNOWN;
goto end;
}
@ -244,7 +243,7 @@ gst_vaapi_encoder_pop_sync_picture (GstVaapiEncoder * encoder,
goto end;
timeout:
ret = GST_VAAPI_ENCODER_STATUS_TIMEOUT;
ret = GST_VAAPI_ENCODER_STATUS_NO_BUFFER;
end:
GST_VAAPI_ENCODER_UNLOCK (encoder);
@ -265,21 +264,14 @@ again:
picture = NULL;
sync_pic = NULL;
ret = klass->reordering (encoder, frame, FALSE, &picture);
if (ret == GST_VAAPI_ENCODER_STATUS_FRAME_NOT_READY)
if (ret == GST_VAAPI_ENCODER_STATUS_NO_SURFACE)
return GST_VAAPI_ENCODER_STATUS_SUCCESS;
g_assert (picture);
if (ret != GST_VAAPI_ENCODER_STATUS_SUCCESS)
goto error;
if (!picture) {
ret = GST_VAAPI_ENCODER_STATUS_PICTURE_ERR;
goto error;
}
coded_buf = gst_vaapi_encoder_create_coded_buffer (encoder);
if (!coded_buf) {
ret = GST_VAAPI_ENCODER_STATUS_OBJECT_ERR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;
goto error;
}
@ -291,11 +283,7 @@ again:
sync_pic = _create_sync_picture (picture, coded_buf);
gst_vaapi_coded_buffer_proxy_replace (&coded_buf, NULL);
gst_vaapi_enc_picture_replace (&picture, NULL);
if (!gst_vaapi_encoder_push_sync_picture (encoder, sync_pic)) {
ret = GST_VAAPI_ENCODER_STATUS_THREAD_ERR;
goto error;
}
gst_vaapi_encoder_push_sync_picture (encoder, sync_pic);
frame = NULL;
goto again;
@ -326,11 +314,11 @@ gst_vaapi_encoder_get_buffer (GstVaapiEncoder * encoder,
picture = sync_pic->picture;
if (!picture->surface || !gst_vaapi_surface_sync (picture->surface)) {
ret = GST_VAAPI_ENCODER_STATUS_PARAM_ERR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_PARAMETER;
goto end;
}
if (!gst_vaapi_surface_query_status (picture->surface, &surface_status)) {
ret = GST_VAAPI_ENCODER_STATUS_PICTURE_ERR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_SURFACE;
goto end;
}
if (frame)

View file

@ -27,23 +27,32 @@
G_BEGIN_DECLS
/**
* GstVaapiEncoderStatus:
* @GST_VAAPI_ENCODER_STATUS_SUCCESS: Success.
* @GST_VAAPI_ENCODER_STATUS_ERROR_NO_SURFACE: No surface left to encode.
* @GST_VAAPI_ENCODER_STATUS_ERROR_NO_BUFFER: No coded buffer left to hold the encoded picture.
* @GST_VAAPI_ENCODER_STATUS_ERROR_UNKNOWN: Unknown error.
* @GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED: No memory left.
* @GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_PARAMETER: Invalid parameter.
* @GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_BUFFER: Invalid buffer.
* @GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_SURFACE: Invalid surface.
* @GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_HEADER: Invalid header.
*
* Set of #GstVaapiEncoder status codes.
*/
typedef enum
{
GST_VAAPI_ENCODER_STATUS_SUCCESS = 0,
GST_VAAPI_ENCODER_STATUS_FRAME_NOT_READY = 1,
GST_VAAPI_ENCODER_STATUS_NO_DATA = 2,
GST_VAAPI_ENCODER_STATUS_TIMEOUT = 3,
GST_VAAPI_ENCODER_STATUS_NOT_READY = 4,
GST_VAAPI_ENCODER_STATUS_FRAME_IN_ORDER = 5,
GST_VAAPI_ENCODER_STATUS_NO_SURFACE = 1,
GST_VAAPI_ENCODER_STATUS_NO_BUFFER = 2,
GST_VAAPI_ENCODER_STATUS_PARAM_ERR = -1,
GST_VAAPI_ENCODER_STATUS_OBJECT_ERR = -2,
GST_VAAPI_ENCODER_STATUS_PICTURE_ERR = -3,
GST_VAAPI_ENCODER_STATUS_THREAD_ERR = -4,
GST_VAAPI_ENCODER_STATUS_PROFILE_ERR = -5,
GST_VAAPI_ENCODER_STATUS_FUNC_PTR_ERR = -6,
GST_VAAPI_ENCODER_STATUS_MEM_ERROR = -7,
GST_VAAPI_ENCODER_STATUS_UNKNOWN_ERR = -8,
GST_VAAPI_ENCODER_STATUS_ERROR_UNKNOWN = -1,
GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED = -2,
GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_PARAMETER = -100,
GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_BUFFER = -101,
GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_SURFACE = -102,
GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_HEADER = -103,
} GstVaapiEncoderStatus;
typedef struct _GstVaapiEncoder GstVaapiEncoder;

View file

@ -1350,7 +1350,7 @@ gst_vaapi_encoder_h264_encode (GstVaapiEncoder * base,
GstVaapiEncPicture * picture, GstVaapiCodedBufferProxy * codedbuf)
{
GstVaapiEncoderH264 *encoder = GST_VAAPI_ENCODER_H264_CAST (base);
GstVaapiEncoderStatus ret = GST_VAAPI_ENCODER_STATUS_UNKNOWN_ERR;
GstVaapiEncoderStatus ret = GST_VAAPI_ENCODER_STATUS_ERROR_UNKNOWN;
GstVaapiSurfaceProxy *reconstruct = NULL;
reconstruct = gst_vaapi_encoder_create_surface (base);
@ -1412,19 +1412,19 @@ gst_vaapi_encoder_h264_get_avcC_codec_data (GstVaapiEncoderH264 * encoder,
g_assert (buffer);
if (!encoder->sps_data || !encoder->pps_data)
return GST_VAAPI_ENCODER_STATUS_NOT_READY;
return GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_HEADER;
if (!gst_buffer_map (encoder->sps_data, &sps_info, GST_MAP_READ))
return GST_VAAPI_ENCODER_STATUS_MEM_ERROR;
return GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;
if (FALSE == _read_sps_attributes (sps_info.data, sps_info.size,
&profile, &profile_comp, &level_idc)) {
ret = GST_VAAPI_ENCODER_STATUS_UNKNOWN_ERR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_INVALID_HEADER;
goto end;
}
if (!gst_buffer_map (encoder->pps_data, &pps_info, GST_MAP_READ)) {
ret = GST_VAAPI_ENCODER_STATUS_MEM_ERROR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;
goto end;
}
@ -1453,7 +1453,7 @@ gst_vaapi_encoder_h264_get_avcC_codec_data (GstVaapiEncoderH264 * encoder,
GST_BIT_WRITER_BIT_SIZE (&writer) / 8);
g_assert (avc_codec);
if (!avc_codec) {
ret = GST_VAAPI_ENCODER_STATUS_MEM_ERROR;
ret = GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;
goto clear_writer;
}
*buffer = avc_codec;
@ -1498,13 +1498,13 @@ gst_vaapi_encoder_h264_reordering (GstVaapiEncoder * base,
if (!frame) {
if (encoder->reorder_state != GST_VAAPI_ENC_H264_REORD_DUMP_FRAMES)
return GST_VAAPI_ENCODER_STATUS_FRAME_NOT_READY;
return GST_VAAPI_ENCODER_STATUS_NO_SURFACE;
/* reorder_state = GST_VAAPI_ENC_H264_REORD_DUMP_FRAMES
dump B frames from queue, sometime, there may also have P frame or I frame */
g_assert (encoder->b_frame_num > 0);
g_return_val_if_fail (!g_queue_is_empty (&encoder->reorder_frame_list),
GST_VAAPI_ENCODER_STATUS_UNKNOWN_ERR);
GST_VAAPI_ENCODER_STATUS_ERROR_UNKNOWN);
picture = g_queue_pop_head (&encoder->reorder_frame_list);
g_assert (picture);
if (g_queue_is_empty (&encoder->reorder_frame_list)) {
@ -1518,7 +1518,7 @@ gst_vaapi_encoder_h264_reordering (GstVaapiEncoder * base,
if (!picture) {
GST_WARNING ("create H264 picture failed, frame timestamp:%"
GST_TIME_FORMAT, GST_TIME_ARGS (frame->pts));
return GST_VAAPI_ENCODER_STATUS_OBJECT_ERR;
return GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;
}
++encoder->cur_present_index;
picture->poc = ((encoder->cur_present_index * 2) %
@ -1562,7 +1562,7 @@ gst_vaapi_encoder_h264_reordering (GstVaapiEncoder * base,
g_queue_get_length (&encoder->reorder_frame_list) <
encoder->b_frame_num) {
g_queue_push_tail (&encoder->reorder_frame_list, picture);
return GST_VAAPI_ENCODER_STATUS_FRAME_NOT_READY;
return GST_VAAPI_ENCODER_STATUS_NO_SURFACE;
}
++encoder->cur_frame_num;

View file

@ -501,7 +501,7 @@ gst_vaapi_encoder_mpeg2_encode (GstVaapiEncoder * base,
GstVaapiEncPicture * picture, GstVaapiCodedBufferProxy * codedbuf)
{
GstVaapiEncoderMpeg2 *encoder = GST_VAAPI_ENCODER_MPEG2_CAST (base);
GstVaapiEncoderStatus ret = GST_VAAPI_ENCODER_STATUS_UNKNOWN_ERR;
GstVaapiEncoderStatus ret = GST_VAAPI_ENCODER_STATUS_ERROR_UNKNOWN;
GstVaapiSurfaceProxy *reconstruct = NULL;
reconstruct = gst_vaapi_encoder_create_surface (base);
@ -564,7 +564,7 @@ gst_vaapi_encoder_mpeg2_reordering (GstVaapiEncoder * base,
encoder->dump_frames = FALSE;
}
if (!encoder->dump_frames) {
return GST_VAAPI_ENCODER_STATUS_FRAME_NOT_READY;
return GST_VAAPI_ENCODER_STATUS_NO_SURFACE;
}
picture = g_queue_pop_head (&encoder->b_frames);
g_assert (picture);
@ -575,7 +575,7 @@ gst_vaapi_encoder_mpeg2_reordering (GstVaapiEncoder * base,
if (!picture) {
GST_WARNING ("create MPEG2 picture failed, frame timestamp:%"
GST_TIME_FORMAT, GST_TIME_ARGS (frame->pts));
return GST_VAAPI_ENCODER_STATUS_OBJECT_ERR;
return GST_VAAPI_ENCODER_STATUS_ERROR_ALLOCATION_FAILED;
}
if (encoder->frame_num >= encoder->intra_period) {
@ -594,7 +594,7 @@ gst_vaapi_encoder_mpeg2_reordering (GstVaapiEncoder * base,
encoder->dump_frames = TRUE;
} else {
picture->type = GST_VAAPI_PICTURE_TYPE_B;
status = GST_VAAPI_ENCODER_STATUS_FRAME_NOT_READY;
status = GST_VAAPI_ENCODER_STATUS_NO_SURFACE;
}
}

View file

@ -231,7 +231,7 @@ gst_vaapiencode_push_frame (GstVaapiEncode * encode, gint64 timeout)
status = gst_vaapi_encoder_get_buffer (encode->encoder,
&out_frame, &codedbuf_proxy, timeout);
if (status == GST_VAAPI_ENCODER_STATUS_TIMEOUT)
if (status == GST_VAAPI_ENCODER_STATUS_NO_BUFFER)
return GST_VAAPI_ENCODE_FLOW_TIMEOUT;
if (status != GST_VAAPI_ENCODER_STATUS_SUCCESS)
goto error_get_buffer;