FFmpeg
Loading...
Searching...
No Matches
muxer.c File Reference
#include "config_components.h"
#include <stdint.h>
#include "libavutil/crc.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/random_seed.h"
#include "libavcodec/xiph.h"
#include "libavcodec/bytestream.h"
#include "libavcodec/flac.h"
#include "libavformat/avformat.h"
#include "libavformat/avio_internal.h"
#include "libavformat/internal.h"
#include "libavformat/mux.h"
#include "libavformat/version.h"
#include "libavformat/vorbis/comment.h"

Go to the source code of this file.

Data Structures

struct  OGGPage
 
struct  OGGStreamContext
 
struct  OGGPageList
 
struct  OGGContext
 

Macros

#define MAX_PAGE_SIZE   65025
 
#define OFFSET(x)
 
#define PARAM   AV_OPT_FLAG_ENCODING_PARAM
 
#define SPEEX_HEADER_SIZE   80
 
#define OPUS_HEADER_SIZE   19
 
#define VP8_HEADER_SIZE   26
 

Functions

static int ogg_write_trailer (AVFormatContext *s)
 
static void ogg_cleanup_stream (AVStream *st)
 
static void ogg_write_page (AVFormatContext *s, OGGPage *page, int extra_flags)
 
static int ogg_key_granule (OGGStreamContext *oggstream, int64_t granule)
 
static int64_t ogg_granule_to_timestamp (OGGStreamContext *oggstream, int64_t granule)
 
static int ogg_compare_granule (AVFormatContext *s, OGGPage *next, OGGPage *page)
 
static int ogg_reset_cur_page (OGGStreamContext *oggstream)
 
static int ogg_buffer_page (AVFormatContext *s, OGGStreamContext *oggstream)
 
static int ogg_buffer_data (AVFormatContext *s, AVStream *st, const uint8_t *data, unsigned size, int64_t granule, int header)
 
static uint8_t * ogg_write_vorbiscomment (int64_t offset, int bitexact, int *header_len, AVDictionary **m, int framing_bit, AVChapter **chapters, unsigned int nb_chapters)
 
static int ogg_build_flac_headers (AVCodecParameters *par, OGGStreamContext *oggstream, int bitexact, AVDictionary **m)
 
static int ogg_build_speex_headers (AVCodecParameters *par, OGGStreamContext *oggstream, int bitexact, AVDictionary **m)
 
static int ogg_build_opus_headers (AVCodecParameters *par, OGGStreamContext *oggstream, int bitexact, AVDictionary **m, AVChapter **chapters, unsigned int nb_chapters)
 
static int ogg_build_vp8_headers (AVFormatContext *s, AVStream *st, OGGStreamContext *oggstream, int bitexact)
 
static void ogg_write_pages (AVFormatContext *s, int flush)
 
static unsigned ogg_bitexact_serial (const OGGStreamContext *oggstream, unsigned seed)
 Derive a bitexact serial number from the stream's header packets, which makes links muxed apart unlikely to share one, though not certain not to.
 
static int ogg_serial_in_use (AVFormatContext *s, int nb_streams, unsigned serial_num)
 
static int ogg_init (AVFormatContext *s)
 
static int ogg_write_header (AVFormatContext *s)
 
static int ogg_skip_new_link (AVFormatContext *s, const uint8_t *new_extradata, const char *reason)
 Keep the current link when a new one cannot be started.
 
static int ogg_check_new_link (AVFormatContext *s, AVPacket *pkt)
 
static int ogg_write_packet_internal (AVFormatContext *s, AVPacket *pkt)
 
static int ogg_write_packet (AVFormatContext *s, AVPacket *pkt)
 
static void ogg_free (AVFormatContext *s)
 

Variables

static const AVOption options []
 
static const AVClass ogg_muxer_class
 

Macro Definition Documentation

◆ MAX_PAGE_SIZE

#define MAX_PAGE_SIZE   65025

Definition at line 41 of file muxer.c.

◆ OFFSET

#define OFFSET ( x)
Value:
offsetof(OGGContext, x)

Definition at line 86 of file muxer.c.

◆ PARAM

#define PARAM   AV_OPT_FLAG_ENCODING_PARAM

Definition at line 87 of file muxer.c.

◆ SPEEX_HEADER_SIZE

#define SPEEX_HEADER_SIZE   80

Definition at line 365 of file muxer.c.

Referenced by ogg_build_speex_headers().

◆ OPUS_HEADER_SIZE

#define OPUS_HEADER_SIZE   19

Definition at line 394 of file muxer.c.

Referenced by ogg_build_opus_headers().

◆ VP8_HEADER_SIZE

#define VP8_HEADER_SIZE   26

Definition at line 424 of file muxer.c.

Function Documentation

◆ ogg_write_trailer()

static int ogg_write_trailer ( AVFormatContext * s)
static

Definition at line 868 of file muxer.c.

Referenced by ogg_check_new_link().

◆ ogg_cleanup_stream()

static void ogg_cleanup_stream ( AVStream * st)
static

Definition at line 106 of file muxer.c.

Referenced by ogg_free(), and ogg_init().

◆ ogg_write_page()

static void ogg_write_page ( AVFormatContext * s,
OGGPage * page,
int extra_flags )
static

Definition at line 120 of file muxer.c.

Referenced by ogg_write_pages().

◆ ogg_key_granule()

static int ogg_key_granule ( OGGStreamContext * oggstream,
int64_t granule )
static

Definition at line 148 of file muxer.c.

Referenced by ogg_buffer_data().

◆ ogg_granule_to_timestamp()

static int64_t ogg_granule_to_timestamp ( OGGStreamContext * oggstream,
int64_t granule )
static

Definition at line 154 of file muxer.c.

Referenced by ogg_buffer_data(), ogg_buffer_page(), and ogg_compare_granule().

◆ ogg_compare_granule()

static int ogg_compare_granule ( AVFormatContext * s,
OGGPage * next,
OGGPage * page )
static

Definition at line 165 of file muxer.c.

Referenced by ogg_buffer_page().

◆ ogg_reset_cur_page()

static int ogg_reset_cur_page ( OGGStreamContext * oggstream)
static

Definition at line 181 of file muxer.c.

Referenced by ogg_buffer_page().

◆ ogg_buffer_page()

static int ogg_buffer_page ( AVFormatContext * s,
OGGStreamContext * oggstream )
static

Definition at line 190 of file muxer.c.

Referenced by ogg_buffer_data(), ogg_write_header(), ogg_write_packet(), and ogg_write_trailer().

◆ ogg_buffer_data()

static int ogg_buffer_data ( AVFormatContext * s,
AVStream * st,
const uint8_t * data,
unsigned size,
int64_t granule,
int header )
static

Definition at line 217 of file muxer.c.

Referenced by ogg_write_header(), and ogg_write_packet_internal().

◆ ogg_write_vorbiscomment()

static uint8_t * ogg_write_vorbiscomment ( int64_t offset,
int bitexact,
int * header_len,
AVDictionary ** m,
int framing_bit,
AVChapter ** chapters,
unsigned int nb_chapters )
static

◆ ogg_build_flac_headers()

static int ogg_build_flac_headers ( AVCodecParameters * par,
OGGStreamContext * oggstream,
int bitexact,
AVDictionary ** m )
static

Definition at line 329 of file muxer.c.

Referenced by ogg_init().

◆ ogg_build_speex_headers()

static int ogg_build_speex_headers ( AVCodecParameters * par,
OGGStreamContext * oggstream,
int bitexact,
AVDictionary ** m )
static

Definition at line 367 of file muxer.c.

Referenced by ogg_init().

◆ ogg_build_opus_headers()

static int ogg_build_opus_headers ( AVCodecParameters * par,
OGGStreamContext * oggstream,
int bitexact,
AVDictionary ** m,
AVChapter ** chapters,
unsigned int nb_chapters )
static

Definition at line 396 of file muxer.c.

Referenced by ogg_init().

◆ ogg_build_vp8_headers()

static int ogg_build_vp8_headers ( AVFormatContext * s,
AVStream * st,
OGGStreamContext * oggstream,
int bitexact )
static

Definition at line 426 of file muxer.c.

Referenced by ogg_init().

◆ ogg_write_pages()

static void ogg_write_pages ( AVFormatContext * s,
int flush )
static

◆ ogg_bitexact_serial()

static unsigned ogg_bitexact_serial ( const OGGStreamContext * oggstream,
unsigned seed )
static

Derive a bitexact serial number from the stream's header packets, which makes links muxed apart unlikely to share one, though not certain not to.

Definition at line 501 of file muxer.c.

Referenced by ogg_init().

◆ ogg_serial_in_use()

static int ogg_serial_in_use ( AVFormatContext * s,
int nb_streams,
unsigned serial_num )
static

Definition at line 513 of file muxer.c.

Referenced by ogg_init().

◆ ogg_init()

static int ogg_init ( AVFormatContext * s)
static

KFGSHIFT is the width of the less significant section of the granule position The less significant section is the frame count since the last keyframe

Definition at line 525 of file muxer.c.

Referenced by ogg_check_new_link().

◆ ogg_write_header()

static int ogg_write_header ( AVFormatContext * s)
static

Definition at line 662 of file muxer.c.

Referenced by ogg_check_new_link().

◆ ogg_skip_new_link()

static int ogg_skip_new_link ( AVFormatContext * s,
const uint8_t * new_extradata,
const char * reason )
static

Keep the current link when a new one cannot be started.

New metadata is then dropped, while new extradata ends the output, as the packets that follow need its headers.

Definition at line 706 of file muxer.c.

Referenced by ogg_check_new_link().

◆ ogg_check_new_link()

static int ogg_check_new_link ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 721 of file muxer.c.

Referenced by ogg_write_packet_internal().

◆ ogg_write_packet_internal()

static int ogg_write_packet_internal ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 789 of file muxer.c.

Referenced by ogg_write_packet().

◆ ogg_write_packet()

static int ogg_write_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 850 of file muxer.c.

◆ ogg_free()

static void ogg_free ( AVFormatContext * s)
static

Definition at line 886 of file muxer.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "serial_offset", "serial number offset, -1 to derive it from the stream headers",
OFFSET(serial_offset), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, PARAM },
{ "page_duration", "preferred page duration, in microseconds",
OFFSET(pref_duration), AV_OPT_TYPE_INT64, { .i64 = 1000000 }, 0, INT64_MAX, PARAM },
{ NULL },
}
#define NULL
Definition coverity.c:32
#define PARAM
Definition dcadec.c:450
#define OFFSET(x)
@ AV_OPT_TYPE_INT64
Underlying C type is int64_t.
Definition opt.h:262
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258

Definition at line 91 of file muxer.c.

◆ ogg_muxer_class

const AVClass ogg_muxer_class
static
Initial value:
= {
.class_name = "Ogg (audio/video/Speex/Opus) muxer",
.item_name = av_default_item_name,
.option = options,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:247
#define LIBAVUTIL_VERSION_INT
Definition version.h:85

Definition at line 99 of file muxer.c.