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

📄 utils.c

📁 播放H264文件的播放器
💻 C
📖 第 1 页 / 共 3 页
字号:
        case CODEC_ID_PCM_S8:        case CODEC_ID_PCM_U8:        case CODEC_ID_PCM_ALAW:        case CODEC_ID_PCM_MULAW:        case CODEC_ID_PCM_ZORK:            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;    case CODEC_TYPE_ATTACHMENT:        snprintf(buf, buf_size, "Attachment: %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;}void avcodec_init(void){    static int initialized = 0;    if (initialized != 0)        return;    initialized = 1;    dsputil_static_init();	avcodec_register(&h264_decoder);}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 FF_I_TYPE: return 'I';    case FF_P_TYPE: return 'P';    case FF_B_TYPE: return 'B';    case FF_S_TYPE: return 'S';    case FF_SI_TYPE:return 'i';    case FF_SP_TYPE:return 'p';    case FF_BI_TYPE:return 'b';    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:    case CODEC_ID_PCM_ZORK:        return 8;    case CODEC_ID_PCM_S16BE:    case CODEC_ID_PCM_S16LE:    case CODEC_ID_PCM_S16LE_PLANAR:    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:    case CODEC_ID_PCM_F32BE:    case CODEC_ID_PCM_F32LE:        return 32;    case CODEC_ID_PCM_F64BE:    case CODEC_ID_PCM_F64LE:        return 64;    default:        return 0;    }}int av_get_bits_per_sample_format(enum SampleFormat sample_fmt) {    switch (sample_fmt) {    case SAMPLE_FMT_U8:        return 8;    case SAMPLE_FMT_S16:        return 16;    case SAMPLE_FMT_S32:    case SAMPLE_FMT_FLT:        return 32;    case SAMPLE_FMT_DBL:        return 64;    default:        return 0;    }}#if !HAVE_THREADSint 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;#if !HAVE_MKSTEMP    *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;    }#if !HAVE_MKSTEMP    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 */}typedef struct {    const char *abbr;    int width, height;} VideoFrameSizeAbbr;typedef struct {    const char *abbr;    int rate_num, rate_den;} VideoFrameRateAbbr;static const VideoFrameSizeAbbr video_frame_size_abbrs[] = {    { "ntsc",      720, 480 },    { "pal",       720, 576 },    { "qntsc",     352, 240 }, /* VCD compliant NTSC */    { "qpal",      352, 288 }, /* VCD compliant PAL */    { "sntsc",     640, 480 }, /* square pixel NTSC */    { "spal",      768, 576 }, /* square pixel PAL */    { "film",      352, 240 },    { "ntsc-film", 352, 240 },    { "sqcif",     128,  96 },    { "qcif",      176, 144 },    { "cif",       352, 288 },    { "4cif",      704, 576 },    { "qqvga",     160, 120 },    { "qvga",      320, 240 },    { "vga",       640, 480 },    { "svga",      800, 600 },    { "xga",      1024, 768 },    { "uxga",     1600,1200 },    { "qxga",     2048,1536 },    { "sxga",     1280,1024 },    { "qsxga",    2560,2048 },    { "hsxga",    5120,4096 },    { "wvga",      852, 480 },    { "wxga",     1366, 768 },    { "wsxga",    1600,1024 },    { "wuxga",    1920,1200 },    { "woxga",    2560,1600 },    { "wqsxga",   3200,2048 },    { "wquxga",   3840,2400 },    { "whsxga",   6400,4096 },    { "whuxga",   7680,4800 },    { "cga",       320, 200 },    { "ega",       640, 350 },    { "hd480",     852, 480 },    { "hd720",    1280, 720 },    { "hd1080",   1920,1080 },};static const VideoFrameRateAbbr video_frame_rate_abbrs[]= {    { "ntsc",      30000, 1001 },    { "pal",          25,    1 },    { "qntsc",     30000, 1001 }, /* VCD compliant NTSC */    { "qpal",         25,    1 }, /* VCD compliant PAL */    { "sntsc",     30000, 1001 }, /* square pixel NTSC */    { "spal",         25,    1 }, /* square pixel PAL */    { "film",         24,    1 },    { "ntsc-film", 24000, 1001 },};int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str){    int i;    int n = FF_ARRAY_ELEMS(video_frame_size_abbrs);    char *p;    int frame_width = 0, frame_height = 0;    for(i=0;i<n;i++) {        if (!strcmp(video_frame_size_abbrs[i].abbr, str)) {            frame_width = video_frame_size_abbrs[i].width;            frame_height = video_frame_size_abbrs[i].height;            break;        }    }    if (i == n) {        p = str;        frame_width = strtol(p, &p, 10);        if (*p)            p++;        frame_height = strtol(p, &p, 10);    }    if (frame_width <= 0 || frame_height <= 0)        return -1;    *width_ptr = frame_width;    *height_ptr = frame_height;    return 0;}int av_parse_video_frame_rate(AVRational *frame_rate, const char *arg){    int i;    int n = FF_ARRAY_ELEMS(video_frame_rate_abbrs);    char* cp;    /* First, we check our abbreviation table */    for (i = 0; i < n; ++i)         if (!strcmp(video_frame_rate_abbrs[i].abbr, arg)) {             frame_rate->num = video_frame_rate_abbrs[i].rate_num;             frame_rate->den = video_frame_rate_abbrs[i].rate_den;             return 0;         }    /* Then, we try to parse it as fraction */    cp = strchr(arg, '/');    if (!cp)        cp = strchr(arg, ':');    if (cp) {        char* cpp;        frame_rate->num = strtol(arg, &cpp, 10);        if (cpp != arg || cpp == cp)            frame_rate->den = strtol(cp+1, &cpp, 10);        else           frame_rate->num = 0;    }    else {        /* Finally we give up and parse it as double */        AVRational time_base = av_d2q(strtod(arg, 0), 1001000);        frame_rate->den = time_base.den;        frame_rate->num = time_base.num;    }    if (!frame_rate->num || !frame_rate->den)        return -1;    else        return 0;}void ff_log_missing_feature(void *avc, const char *feature, int want_sample){    av_log(avc, AV_LOG_WARNING, "%s not implemented. Update your FFmpeg "            "version to the newest one from SVN. If the problem still "            "occurs, it means that your file has a feature which has not "            "been implemented.", feature);    if(want_sample)        ff_log_ask_for_sample(avc, NULL);    else        av_log(avc, AV_LOG_WARNING, "\n");}void ff_log_ask_for_sample(void *avc, const char *msg){    if (msg)        av_log(avc, AV_LOG_WARNING, "%s ", msg);    av_log(avc, AV_LOG_WARNING, "If you want to help, upload a sample "            "of this file to ftp://upload.ffmpeg.org/MPlayer/incoming/ "            "and contact the ffmpeg-devel mailing list.\n");}static AVHWAccel *first_hwaccel = NULL;void av_register_hwaccel(AVHWAccel *hwaccel){    AVHWAccel **p = &first_hwaccel;    while (*p)        p = &(*p)->next;    *p = hwaccel;    hwaccel->next = NULL;}AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel){    return hwaccel ? hwaccel->next : first_hwaccel;}AVHWAccel *ff_find_hwaccel(enum CodecID codec_id, enum PixelFormat pix_fmt){    AVHWAccel *hwaccel=NULL;    while((hwaccel= av_hwaccel_next(hwaccel))){        if (   hwaccel->id      == codec_id            && hwaccel->pix_fmt == pix_fmt)            return hwaccel;    }    return NULL;}

⌨️ 快捷键说明

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