⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.c

📁 图象压缩程序
💻 C
字号:
/***************************************************************************** * common.c: h264 library ***************************************************************************** * Copyright (C) 2003 Laurent Aimar * $Id: common.c,v 1.6 2004/03/28 09:21:44 fenrir Exp $ * * Authors: Laurent Aimar <fenrir@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#include <stdlib.h>#include <stdio.h>#include <string.h>#include <stdint.h>#ifdef HAVE_MALLOC_H#include <malloc.h>#endif#include "common.h"#include "cpu.h"/**************************************************************************** * x264_picture_new/x264_picture_delete: ****************************************************************************/x264_picture_t *x264_picture_new( x264_t *h ){    x264_picture_t *pic = x264_malloc( sizeof( x264_picture_t ) );    int i_stride;    int i_lines;    pic->i_width = h->param.i_width;    pic->i_height= h->param.i_height;    i_stride = ( h->param.i_width + 15 )&0xfffff0;    i_lines  = ( h->param.i_height + 15 )&0xfffff0;    pic->i_plane = 3;    pic->i_stride[0] = i_stride;    pic->i_stride[1] = i_stride / 2;    pic->i_stride[2] = i_stride / 2;    pic->i_stride[3] = 0;    pic->plane[0] = x264_malloc( i_lines * pic->i_stride[0] );    pic->plane[1] = x264_malloc( i_lines / 2 * pic->i_stride[1] );    pic->plane[2] = x264_malloc( i_lines / 2 * pic->i_stride[2] );    pic->plane[3] = NULL;    memset( pic->plane[0],   0, i_lines * pic->i_stride[0] );    memset( pic->plane[1], 128, i_lines / 2 * pic->i_stride[1] );    memset( pic->plane[2], 128, i_lines / 2 * pic->i_stride[2] );    return pic;}void x264_picture_delete( x264_picture_t *pic ){    int i;    for( i = 0; i < pic->i_plane; i++ )    {        x264_free( pic->plane[i] );    }    x264_free( pic );}/**************************************************************************** * x264_param_default: ****************************************************************************/void    x264_param_default( x264_param_t *param ){    /* */    memset( param, 0, sizeof( x264_param_t ) );    /* CPU autodetect */    param->cpu = x264_cpu_detect();    fprintf( stderr, "x264: cpu capabilities: %s%s%s%s%s%s\n",             param->cpu&X264_CPU_MMX ? "MMX " : "",             param->cpu&X264_CPU_MMXEXT ? "MMXEXT " : "",             param->cpu&X264_CPU_SSE ? "SSE " : "",             param->cpu&X264_CPU_SSE2 ? "SSE2 " : "",             param->cpu&X264_CPU_3DNOW ? "3DNow! " : "",             param->cpu&X264_CPU_ALTIVEC ? "Altivec " : "" );    /* Video properties */    param->i_width         = 0;    param->i_height        = 0;    param->vui.i_sar_width = 0;    param->vui.i_sar_height= 0;    param->f_fps           = 25.0;    /* Encoder parameters */    param->i_frame_reference = 1;    param->i_idrframe = 2;    param->i_iframe = 60;    param->i_bframe = 0;    param->b_deblocking_filter = 1;    param->b_cabac = 0;    param->i_cabac_init_idc = -1;    param->i_bitrate = 3000;    param->i_qp_constant = 26;    param->i_me = X264_ME_DIAMOND;}/**************************************************************************** * x264_malloc: ****************************************************************************/void *x264_malloc( int i_size ){#ifdef HAVE_MALLOC_H    return memalign( 16, i_size );#else    uint8_t * buf;    uint8_t * align_buf;    buf = (uint8_t *) malloc( i_size + 15 + sizeof( void ** ) +              sizeof( int ) );    align_buf = buf + 15 + sizeof( void ** ) + sizeof( int );    align_buf -= (long) align_buf & 15;    *( (void **) ( align_buf - sizeof( void ** ) ) ) = buf;    *( (int *) ( align_buf - sizeof( void ** ) - sizeof( int ) ) ) = i_size;    return align_buf;#endif}/**************************************************************************** * x264_free: ****************************************************************************/void x264_free( void *p ){    if( p )    {#ifdef HAVE_MALLOC_H        free( p );#else        free( *( ( ( void **) p ) - 1 ) );#endif    }}/**************************************************************************** * x264_realloc: ****************************************************************************/void *x264_realloc( void *p, int i_size ){#ifdef HAVE_MALLOC_H    return realloc( p, i_size );#else    int       i_old_size = 0;    uint8_t * p_new;    if( p )    {        i_old_size = *( (int*) ( (uint8_t*) p ) - sizeof( void ** ) -                         sizeof( int ) );    }    p_new = x264_malloc( i_size );    if( i_old_size > 0 && i_size > 0 )    {        memcpy( p_new, p, ( i_old_size < i_size ) ? i_old_size : i_size );    }    x264_free( p );    return p_new;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -