zoukankan      html  css  js  c++  java
  • FFMpeg中AVOutputFormat格式

    该结构体的定义在avformat.h文件中:

    typedef struct AVOutputFormat {
        const char *name;
        /**
         * Descriptive name for the format, meant to be more human-readable
         * than name. You should use the NULL_IF_CONFIG_SMALL() macro
         * to define it.
         */
        const char *long_name;
        const char *mime_type;
        const char *extensions; /**< comma-separated filename extensions */
        /* output support */
        enum AVCodecID audio_codec;    /**< default audio codec */
        enum AVCodecID video_codec;    /**< default video codec */
        enum AVCodecID subtitle_codec; /**< default subtitle codec */
        /**
         * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE,
         * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS,
         * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH,
         * AVFMT_TS_NONSTRICT
         */
        int flags;
    
        /**
         * List of supported codec_id-codec_tag pairs, ordered by "better
         * choice first". The arrays are all terminated by AV_CODEC_ID_NONE.
         */
        const struct AVCodecTag * const *codec_tag;
    
    
        const AVClass *priv_class; ///< AVClass for the private context
    
        /*****************************************************************
         * No fields below this line are part of the public API. They
         * may not be used outside of libavformat and can be changed and
         * removed at will.
         * New public fields should be added right above.
         *****************************************************************
         */
        struct AVOutputFormat *next;
        /**
         * size of private data so that it can be allocated in the wrapper
         */
        int priv_data_size;
    
        int (*write_header)(struct AVFormatContext *);
        /**
         * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags,
         * pkt can be NULL in order to flush data buffered in the muxer.
         * When flushing, return 0 if there still is more data to flush,
         * or 1 if everything was flushed and there is no more buffered
         * data.
         */
        int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
        int (*write_trailer)(struct AVFormatContext *);
        /**
         * Currently only used to set pixel format if not YUV420P.
         */
        int (*interleave_packet)(struct AVFormatContext *, AVPacket *out,
                                 AVPacket *in, int flush);
        /**
         * Test if the given codec can be stored in this container.
         *
         * @return 1 if the codec is supported, 0 if it is not.
         *         A negative number if unknown.
         *         MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC
         */
        int (*query_codec)(enum AVCodecID id, int std_compliance);
    
        void (*get_output_timestamp)(struct AVFormatContext *s, int stream,
                                     int64_t *dts, int64_t *wall);
        /**
         * Allows sending messages from application to device.
         */
        int (*control_message)(struct AVFormatContext *s, int type,
                               void *data, size_t data_size);
    
        /**
         * Write an uncoded AVFrame.
         *
         * See av_write_uncoded_frame() for details.
         *
         * The library will free *frame afterwards, but the muxer can prevent it
         * by setting the pointer to NULL.
         */
        int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index,
                                   AVFrame **frame, unsigned flags);
        /**
         * Returns device list with it properties.
         * @see avdevice_list_devices() for more details.
         */
        int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
        /**
         * Initialize device capabilities submodule.
         * @see avdevice_capabilities_create() for more details.
         */
        int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
        /**
         * Free device capabilities submodule.
         * @see avdevice_capabilities_free() for more details.
         */
        int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
        enum AVCodecID data_codec; /**< default data codec */
    } AVOutputFormat;

    官方参考地址:http://ffmpeg.org/doxygen/3.1/structAVOutputFormat.html

    在文件avformat.h中,第1350行中,结构体AVFormatContext中有:struct AVOutputFormat *oformat,注释中写:

    The output container format. Muxing only, must be set by the caller before avformat_write_header().

    AVFormatContext的初始化可以用:

    AVOutputFormat *av_guess_format(const char *short_name,
                                    const char *filename,
                                    const char *mime_type);

    参考:http://blog.csdn.net/yibu_refresh/article/details/52881717

         http://blog.chinaunix.net/uid-21139058-id-446599.html

  • 相关阅读:
    监控里的主码流和子码流是什么意思
    监控硬盘容量计算
    一个能让你了解所有函数调用顺序的Android库
    电工选线
    oracle linux dtrace
    list all of the Oracle 12c hidden undocumented parameters
    Oracle Extended Tracing
    window 驱动开发
    win7 x64 dtrace
    How to Use Dtrace Tracing Ruby Executing
  • 原文地址:https://www.cnblogs.com/hpcpp/p/7839384.html
Copyright © 2011-2022 走看看