utils.c
来自「linux下的MPEG1」· C语言 代码 · 共 1,355 行 · 第 1/5 页
C
1,355 行
switch(enc->codec_type) { case CODEC_TYPE_VIDEO: snprintf(buf, buf_size, "Video: %s%s", codec_name, enc->mb_decision ? " (hq)" : ""); if (enc->pix_fmt != PIX_FMT_NONE) { snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %s", avcodec_get_pix_fmt_name(enc->pix_fmt)); } if (enc->width) { snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %dx%d", enc->width, enc->height); if(av_log_get_level() >= AV_LOG_DEBUG){ int g= ff_gcd(enc->time_base.num, enc->time_base.den); snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %d/%d", enc->time_base.num/g, enc->time_base.den/g); } } if (encode) { snprintf(buf + strlen(buf), buf_size - strlen(buf), ", q=%d-%d", enc->qmin, enc->qmax); } bitrate = enc->bit_rate; break; case CODEC_TYPE_AUDIO: snprintf(buf, buf_size, "Audio: %s", codec_name); switch (enc->channels) { case 1: strcpy(channels_str, "mono"); break; case 2: strcpy(channels_str, "stereo"); break; case 6: strcpy(channels_str, "5:1"); break; default: snprintf(channels_str, sizeof(channels_str), "%d channels", enc->channels); break; } if (enc->sample_rate) { snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %d Hz, %s", enc->sample_rate, channels_str); } /* for PCM codecs, compute bitrate directly */ switch(enc->codec_id) { case CODEC_ID_PCM_S32LE: case CODEC_ID_PCM_S32BE: case CODEC_ID_PCM_U32LE: case CODEC_ID_PCM_U32BE: bitrate = enc->sample_rate * enc->channels * 32; break; case CODEC_ID_PCM_S24LE: case CODEC_ID_PCM_S24BE: case CODEC_ID_PCM_U24LE: case CODEC_ID_PCM_U24BE: case CODEC_ID_PCM_S24DAUD: bitrate = enc->sample_rate * enc->channels * 24; break; case CODEC_ID_PCM_S16LE: case CODEC_ID_PCM_S16BE: case CODEC_ID_PCM_U16LE: case CODEC_ID_PCM_U16BE: bitrate = enc->sample_rate * enc->channels * 16; break; case CODEC_ID_PCM_S8: case CODEC_ID_PCM_U8: case CODEC_ID_PCM_ALAW: case CODEC_ID_PCM_MULAW: bitrate = enc->sample_rate * enc->channels * 8; break; default: bitrate = enc->bit_rate; break; } break; case CODEC_TYPE_DATA: snprintf(buf, buf_size, "Data: %s", codec_name); bitrate = enc->bit_rate; break; case CODEC_TYPE_SUBTITLE: snprintf(buf, buf_size, "Subtitle: %s", codec_name); bitrate = enc->bit_rate; break; default: snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type); return; } if (encode) { if (enc->flags & CODEC_FLAG_PASS1) snprintf(buf + strlen(buf), buf_size - strlen(buf), ", pass 1"); if (enc->flags & CODEC_FLAG_PASS2) snprintf(buf + strlen(buf), buf_size - strlen(buf), ", pass 2"); } if (bitrate != 0) { snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %d kb/s", bitrate / 1000); }}unsigned avcodec_version( void ){ return LIBAVCODEC_VERSION_INT;}unsigned avcodec_build( void ){ return LIBAVCODEC_BUILD;}static void init_crcs(void){ av_crc04C11DB7= av_mallocz_static(sizeof(AVCRC) * 257); av_crc8005 = av_mallocz_static(sizeof(AVCRC) * 257); av_crc07 = av_mallocz_static(sizeof(AVCRC) * 257); av_crc_init(av_crc04C11DB7, 0, 32, 0x04c11db7, sizeof(AVCRC)*257); av_crc_init(av_crc8005 , 0, 16, 0x8005 , sizeof(AVCRC)*257); av_crc_init(av_crc07 , 0, 8, 0x07 , sizeof(AVCRC)*257);}/* must be called before any other functions */void avcodec_init(void){ static int inited = 0; if (inited != 0) return; inited = 1; dsputil_static_init(); init_crcs();}/** * Flush buffers, should be called when seeking or when swicthing to a different stream. */void avcodec_flush_buffers(AVCodecContext *avctx){ if(avctx->codec->flush) avctx->codec->flush(avctx);}void avcodec_default_free_buffers(AVCodecContext *s){ int i, j; if(s->internal_buffer==NULL) return; for(i=0; i<INTERNAL_BUFFER_SIZE; i++){ InternalBuffer *buf= &((InternalBuffer*)s->internal_buffer)[i]; for(j=0; j<4; j++){ av_freep(&buf->base[j]); buf->data[j]= NULL; } } av_freep(&s->internal_buffer); s->internal_buffer_count=0;}char av_get_pict_type_char(int pict_type){ switch(pict_type){ case I_TYPE: return 'I'; case P_TYPE: return 'P'; case B_TYPE: return 'B'; case S_TYPE: return 'S'; case SI_TYPE:return 'i'; case SP_TYPE:return 'p'; default: return '?'; }}int av_get_bits_per_sample(enum CodecID codec_id){ switch(codec_id){ case CODEC_ID_ADPCM_SBPRO_2: return 2; case CODEC_ID_ADPCM_SBPRO_3: return 3; case CODEC_ID_ADPCM_SBPRO_4: case CODEC_ID_ADPCM_CT: return 4; case CODEC_ID_PCM_ALAW: case CODEC_ID_PCM_MULAW: case CODEC_ID_PCM_S8: case CODEC_ID_PCM_U8: return 8; case CODEC_ID_PCM_S16BE: case CODEC_ID_PCM_S16LE: case CODEC_ID_PCM_U16BE: case CODEC_ID_PCM_U16LE: return 16; case CODEC_ID_PCM_S24DAUD: case CODEC_ID_PCM_S24BE: case CODEC_ID_PCM_S24LE: case CODEC_ID_PCM_U24BE: case CODEC_ID_PCM_U24LE: return 24; case CODEC_ID_PCM_S32BE: case CODEC_ID_PCM_S32LE: case CODEC_ID_PCM_U32BE: case CODEC_ID_PCM_U32LE: return 32; default: return 0; }}#if !defined(HAVE_THREADS)int avcodec_thread_init(AVCodecContext *s, int thread_count){ return -1;}#endifunsigned int av_xiphlacing(unsigned char *s, unsigned int v){ unsigned int n = 0; while(v >= 0xff) { *s++ = 0xff; v -= 0xff; n++; } *s = v; n++; return n;}/* Wrapper to work around the lack of mkstemp() on mingw/cygin. * Also, tries to create file in /tmp first, if possible. * *prefix can be a character constant; *filename will be allocated internally. * Returns file descriptor of opened file (or -1 on error) * and opened file name in **filename. */int av_tempfile(char *prefix, char **filename) { int fd=-1;#ifdef __MINGW32__ *filename = tempnam(".", prefix);#else size_t len = strlen(prefix) + 12; /* room for "/tmp/" and "XXXXXX\0" */ *filename = av_malloc(len);#endif /* -----common section-----*/ if (*filename == NULL) { av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n"); return -1; }#ifdef __MINGW32__ fd = open(*filename, _O_RDWR | _O_BINARY | _O_CREAT, 0444);#else snprintf(*filename, len, "/tmp/%sXXXXXX", prefix); fd = mkstemp(*filename); if (fd < 0) { snprintf(*filename, len, "./%sXXXXXX", prefix); fd = mkstemp(*filename); }#endif /* -----common section-----*/ if (fd < 0) { av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename); return -1; } return fd; /* success */}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?