void compute_distortion(ImageParameters *p_Img, InputParameters *p_Inp, ImageData *imgData) { DistortionParams *p_Dist = p_Img->p_Dist; if (p_Inp->Verbose != 0) { select_img(p_Img, p_Inp, &p_Img->imgSRC, &p_Img->imgREF, imgData); find_snr (p_Img, p_Inp, &p_Img->imgREF, &p_Img->imgSRC, &p_Dist->metric[SSE], &p_Dist->metric[PSNR]); if (p_Inp->Distortion[SSIM] == 1) find_ssim (p_Img, p_Inp, &p_Img->imgREF, &p_Img->imgSRC, &p_Dist->metric[SSIM]); if (p_Inp->Distortion[MS_SSIM] == 1) find_ms_ssim(p_Img, p_Inp, &p_Img->imgREF, &p_Img->imgSRC, &p_Dist->metric[MS_SSIM]); // RGB Distortion if(p_Inp->DistortionYUVtoRGB == 1) { YUVtoRGB(p_Img, &p_Img->imgREF, &p_Img->imgRGB_ref); YUVtoRGB(p_Img, &p_Img->imgSRC, &p_Img->imgRGB_src); find_snr (p_Img, p_Inp, &p_Img->imgRGB_ref, &p_Img->imgRGB_src, &p_Dist->metric[SSE_RGB], &p_Dist->metric[PSNR_RGB]); if (p_Inp->Distortion[SSIM] == 1) find_ssim (p_Img, p_Inp, &p_Img->imgRGB_ref, &p_Img->imgRGB_src, &p_Dist->metric[SSIM_RGB]); if (p_Inp->Distortion[MS_SSIM] == 1) find_ms_ssim(p_Img, p_Inp, &p_Img->imgRGB_ref, &p_Img->imgRGB_src, &p_Dist->metric[MS_SSIM_RGB]); } } }
/*! ************************************************************************ * \brief * Directly output a picture without storing it in the DPB. Fields * are buffered before they are written to the file. * \param p * Picture for output * \param p_out * Output file ************************************************************************ */ void direct_output(StorablePicture *p, FILE *p_out) { if (p->structure==FRAME) { // we have a frame (or complementary field pair) // so output it directly flush_direct_output(p_out); write_picture (p, p_out, FRAME); if (p_ref) find_snr(snr, p, p_ref); free_storable_picture(p); return; } if (p->structure == TOP_FIELD) { if (out_buffer->is_used &1) flush_direct_output(p_out); out_buffer->top_field = p; out_buffer->is_used |= 1; } if (p->structure == BOTTOM_FIELD) { if (out_buffer->is_used &2) flush_direct_output(p_out); out_buffer->bottom_field = p; out_buffer->is_used |= 2; } if (out_buffer->is_used == 3) { // we have both fields, so output them dpb_combine_field(out_buffer); write_picture (out_buffer->frame, p_out, FRAME); if (p_ref) find_snr(snr, out_buffer->frame, p_ref); free_storable_picture(out_buffer->frame); out_buffer->frame = NULL; free_storable_picture(out_buffer->top_field); out_buffer->top_field = NULL; free_storable_picture(out_buffer->bottom_field); out_buffer->bottom_field = NULL; out_buffer->is_used = 0; } }