LCOV - code coverage report
Current view: top level - media/libvpx/libvpx/vp9 - vp9_iface_common.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 67 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright (c) 2013 The WebM project authors. All Rights Reserved.
       3             :  *
       4             :  *  Use of this source code is governed by a BSD-style license
       5             :  *  that can be found in the LICENSE file in the root of the source
       6             :  *  tree. An additional intellectual property rights grant can be found
       7             :  *  in the file PATENTS.  All contributing project authors may
       8             :  *  be found in the AUTHORS file in the root of the source tree.
       9             :  */
      10             : #ifndef VP9_VP9_IFACE_COMMON_H_
      11             : #define VP9_VP9_IFACE_COMMON_H_
      12             : 
      13             : #include "vpx_ports/mem.h"
      14             : 
      15           0 : static void yuvconfig2image(vpx_image_t *img, const YV12_BUFFER_CONFIG *yv12,
      16             :                             void *user_priv) {
      17             :   /** vpx_img_wrap() doesn't allow specifying independent strides for
      18             :     * the Y, U, and V planes, nor other alignment adjustments that
      19             :     * might be representable by a YV12_BUFFER_CONFIG, so we just
      20             :     * initialize all the fields.*/
      21             :   int bps;
      22           0 :   if (!yv12->subsampling_y) {
      23           0 :     if (!yv12->subsampling_x) {
      24           0 :       img->fmt = VPX_IMG_FMT_I444;
      25           0 :       bps = 24;
      26             :     } else {
      27           0 :       img->fmt = VPX_IMG_FMT_I422;
      28           0 :       bps = 16;
      29             :     }
      30             :   } else {
      31           0 :     if (!yv12->subsampling_x) {
      32           0 :       img->fmt = VPX_IMG_FMT_I440;
      33           0 :       bps = 16;
      34             :     } else {
      35           0 :       img->fmt = VPX_IMG_FMT_I420;
      36           0 :       bps = 12;
      37             :     }
      38             :   }
      39           0 :   img->cs = yv12->color_space;
      40           0 :   img->range = yv12->color_range;
      41           0 :   img->bit_depth = 8;
      42           0 :   img->w = yv12->y_stride;
      43           0 :   img->h = ALIGN_POWER_OF_TWO(yv12->y_height + 2 * VP9_ENC_BORDER_IN_PIXELS, 3);
      44           0 :   img->d_w = yv12->y_crop_width;
      45           0 :   img->d_h = yv12->y_crop_height;
      46           0 :   img->r_w = yv12->render_width;
      47           0 :   img->r_h = yv12->render_height;
      48           0 :   img->x_chroma_shift = yv12->subsampling_x;
      49           0 :   img->y_chroma_shift = yv12->subsampling_y;
      50           0 :   img->planes[VPX_PLANE_Y] = yv12->y_buffer;
      51           0 :   img->planes[VPX_PLANE_U] = yv12->u_buffer;
      52           0 :   img->planes[VPX_PLANE_V] = yv12->v_buffer;
      53           0 :   img->planes[VPX_PLANE_ALPHA] = NULL;
      54           0 :   img->stride[VPX_PLANE_Y] = yv12->y_stride;
      55           0 :   img->stride[VPX_PLANE_U] = yv12->uv_stride;
      56           0 :   img->stride[VPX_PLANE_V] = yv12->uv_stride;
      57           0 :   img->stride[VPX_PLANE_ALPHA] = yv12->y_stride;
      58             : #if CONFIG_VP9_HIGHBITDEPTH
      59             :   if (yv12->flags & YV12_FLAG_HIGHBITDEPTH) {
      60             :     // vpx_image_t uses byte strides and a pointer to the first byte
      61             :     // of the image.
      62             :     img->fmt = (vpx_img_fmt_t)(img->fmt | VPX_IMG_FMT_HIGHBITDEPTH);
      63             :     img->bit_depth = yv12->bit_depth;
      64             :     img->planes[VPX_PLANE_Y] = (uint8_t *)CONVERT_TO_SHORTPTR(yv12->y_buffer);
      65             :     img->planes[VPX_PLANE_U] = (uint8_t *)CONVERT_TO_SHORTPTR(yv12->u_buffer);
      66             :     img->planes[VPX_PLANE_V] = (uint8_t *)CONVERT_TO_SHORTPTR(yv12->v_buffer);
      67             :     img->planes[VPX_PLANE_ALPHA] = NULL;
      68             :     img->stride[VPX_PLANE_Y] = 2 * yv12->y_stride;
      69             :     img->stride[VPX_PLANE_U] = 2 * yv12->uv_stride;
      70             :     img->stride[VPX_PLANE_V] = 2 * yv12->uv_stride;
      71             :     img->stride[VPX_PLANE_ALPHA] = 2 * yv12->y_stride;
      72             :   }
      73             : #endif  // CONFIG_VP9_HIGHBITDEPTH
      74           0 :   img->bps = bps;
      75           0 :   img->user_priv = user_priv;
      76           0 :   img->img_data = yv12->buffer_alloc;
      77           0 :   img->img_data_owner = 0;
      78           0 :   img->self_allocd = 0;
      79           0 : }
      80             : 
      81           0 : static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img,
      82             :                                        YV12_BUFFER_CONFIG *yv12) {
      83           0 :   yv12->y_buffer = img->planes[VPX_PLANE_Y];
      84           0 :   yv12->u_buffer = img->planes[VPX_PLANE_U];
      85           0 :   yv12->v_buffer = img->planes[VPX_PLANE_V];
      86             : 
      87           0 :   yv12->y_crop_width = img->d_w;
      88           0 :   yv12->y_crop_height = img->d_h;
      89           0 :   yv12->render_width = img->r_w;
      90           0 :   yv12->render_height = img->r_h;
      91           0 :   yv12->y_width = img->d_w;
      92           0 :   yv12->y_height = img->d_h;
      93             : 
      94           0 :   yv12->uv_width =
      95           0 :       img->x_chroma_shift == 1 ? (1 + yv12->y_width) / 2 : yv12->y_width;
      96           0 :   yv12->uv_height =
      97           0 :       img->y_chroma_shift == 1 ? (1 + yv12->y_height) / 2 : yv12->y_height;
      98           0 :   yv12->uv_crop_width = yv12->uv_width;
      99           0 :   yv12->uv_crop_height = yv12->uv_height;
     100             : 
     101           0 :   yv12->y_stride = img->stride[VPX_PLANE_Y];
     102           0 :   yv12->uv_stride = img->stride[VPX_PLANE_U];
     103           0 :   yv12->color_space = img->cs;
     104           0 :   yv12->color_range = img->range;
     105             : 
     106             : #if CONFIG_VP9_HIGHBITDEPTH
     107             :   if (img->fmt & VPX_IMG_FMT_HIGHBITDEPTH) {
     108             :     // In vpx_image_t
     109             :     //     planes point to uint8 address of start of data
     110             :     //     stride counts uint8s to reach next row
     111             :     // In YV12_BUFFER_CONFIG
     112             :     //     y_buffer, u_buffer, v_buffer point to uint16 address of data
     113             :     //     stride and border counts in uint16s
     114             :     // This means that all the address calculations in the main body of code
     115             :     // should work correctly.
     116             :     // However, before we do any pixel operations we need to cast the address
     117             :     // to a uint16 ponter and double its value.
     118             :     yv12->y_buffer = CONVERT_TO_BYTEPTR(yv12->y_buffer);
     119             :     yv12->u_buffer = CONVERT_TO_BYTEPTR(yv12->u_buffer);
     120             :     yv12->v_buffer = CONVERT_TO_BYTEPTR(yv12->v_buffer);
     121             :     yv12->y_stride >>= 1;
     122             :     yv12->uv_stride >>= 1;
     123             :     yv12->flags = YV12_FLAG_HIGHBITDEPTH;
     124             :   } else {
     125             :     yv12->flags = 0;
     126             :   }
     127             :   yv12->border = (yv12->y_stride - img->w) / 2;
     128             : #else
     129           0 :   yv12->border = (img->stride[VPX_PLANE_Y] - img->w) / 2;
     130             : #endif  // CONFIG_VP9_HIGHBITDEPTH
     131           0 :   yv12->subsampling_x = img->x_chroma_shift;
     132           0 :   yv12->subsampling_y = img->y_chroma_shift;
     133           0 :   return VPX_CODEC_OK;
     134             : }
     135             : 
     136           0 : static VP9_REFFRAME ref_frame_to_vp9_reframe(vpx_ref_frame_type_t frame) {
     137           0 :   switch (frame) {
     138           0 :     case VP8_LAST_FRAME: return VP9_LAST_FLAG;
     139           0 :     case VP8_GOLD_FRAME: return VP9_GOLD_FLAG;
     140           0 :     case VP8_ALTR_FRAME: return VP9_ALT_FLAG;
     141             :   }
     142           0 :   assert(0 && "Invalid Reference Frame");
     143             :   return VP9_LAST_FLAG;
     144             : }
     145             : #endif  // VP9_VP9_IFACE_COMMON_H_

Generated by: LCOV version 1.13