static gboolean ensure_quantization_table (GstVaapiEncoderVP8 * encoder, GstVaapiEncPicture * picture) { g_assert (picture); picture->q_matrix = GST_VAAPI_ENC_Q_MATRIX_NEW (VP8, encoder); if (!picture->q_matrix) { GST_ERROR ("failed to allocate quantiser table"); return GST_VAAPI_DECODER_STATUS_ERROR_ALLOCATION_FAILED; } if (!fill_quantization_table (encoder, picture, picture->q_matrix)) return FALSE; return TRUE; }
static gboolean fill_quantization_table (GstVaapiEncoderJpeg * encoder, GstVaapiEncPicture * picture) { VAQMatrixBufferJPEG *q_matrix; int i; g_assert (picture); picture->q_matrix = GST_VAAPI_ENC_Q_MATRIX_NEW (JPEG, encoder); if (!picture->q_matrix) { GST_ERROR ("failed to allocate quantiser table"); return GST_VAAPI_DECODER_STATUS_ERROR_ALLOCATION_FAILED; } q_matrix = picture->q_matrix->param; if (!encoder->has_quant_tables) { gst_jpeg_get_default_quantization_tables (&encoder->quant_tables); encoder->has_quant_tables = TRUE; generate_scaled_qm (&encoder->quant_tables, &encoder->scaled_quant_tables, encoder->quality); } q_matrix->load_lum_quantiser_matrix = 1; for (i = 0; i < GST_JPEG_MAX_QUANT_ELEMENTS; i++) { q_matrix->lum_quantiser_matrix[i] = encoder->quant_tables.quant_tables[0].quant_table[i]; } q_matrix->load_chroma_quantiser_matrix = 1; for (i = 0; i < GST_JPEG_MAX_QUANT_ELEMENTS; i++) { q_matrix->chroma_quantiser_matrix[i] = encoder->quant_tables.quant_tables[1].quant_table[i]; } return TRUE; }