mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avformat/swf: Separate mux and demux contexts
There was almost no overlap between them: The only field used by both was an int named samples_per_frame. Therefore this commit separates them. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
bc0e776c9a
commit
913aa4204a
@ -23,15 +23,6 @@
|
|||||||
#ifndef AVFORMAT_SWF_H
|
#ifndef AVFORMAT_SWF_H
|
||||||
#define AVFORMAT_SWF_H
|
#define AVFORMAT_SWF_H
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#if CONFIG_ZLIB
|
|
||||||
#include <zlib.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "libavutil/fifo.h"
|
|
||||||
#include "avformat.h"
|
|
||||||
#include "avio.h"
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
/* should have a generic way to indicate probable size */
|
/* should have a generic way to indicate probable size */
|
||||||
@ -113,35 +104,11 @@ enum {
|
|||||||
#define FLAG_SETFILL0 0x02
|
#define FLAG_SETFILL0 0x02
|
||||||
#define FLAG_SETFILL1 0x04
|
#define FLAG_SETFILL1 0x04
|
||||||
|
|
||||||
#define AUDIO_FIFO_SIZE 65536
|
|
||||||
|
|
||||||
/* character id used */
|
/* character id used */
|
||||||
#define BITMAP_ID 0
|
#define BITMAP_ID 0
|
||||||
#define VIDEO_ID 0
|
#define VIDEO_ID 0
|
||||||
#define SHAPE_ID 1
|
#define SHAPE_ID 1
|
||||||
|
|
||||||
typedef struct SWFContext {
|
|
||||||
int64_t duration_pos;
|
|
||||||
int64_t tag_pos;
|
|
||||||
int64_t vframes_pos;
|
|
||||||
int samples_per_frame;
|
|
||||||
int sound_samples;
|
|
||||||
int swf_frame_number;
|
|
||||||
int video_frame_number;
|
|
||||||
int frame_rate;
|
|
||||||
int tag;
|
|
||||||
AVFifoBuffer *audio_fifo;
|
|
||||||
AVCodecParameters *audio_par, *video_par;
|
|
||||||
AVStream *video_st;
|
|
||||||
#if CONFIG_ZLIB
|
|
||||||
#define ZBUF_SIZE 4096
|
|
||||||
AVIOContext *zpb;
|
|
||||||
uint8_t *zbuf_in;
|
|
||||||
uint8_t *zbuf_out;
|
|
||||||
z_stream zstream;
|
|
||||||
#endif
|
|
||||||
} SWFContext;
|
|
||||||
|
|
||||||
extern const AVCodecTag ff_swf_codec_tags[];
|
extern const AVCodecTag ff_swf_codec_tags[];
|
||||||
|
|
||||||
#endif /* AVFORMAT_SWF_H */
|
#endif /* AVFORMAT_SWF_H */
|
||||||
|
@ -34,6 +34,18 @@
|
|||||||
#include "libavcodec/get_bits.h"
|
#include "libavcodec/get_bits.h"
|
||||||
#include "swf.h"
|
#include "swf.h"
|
||||||
|
|
||||||
|
typedef struct SWFDecContext {
|
||||||
|
int samples_per_frame;
|
||||||
|
int frame_rate;
|
||||||
|
#if CONFIG_ZLIB
|
||||||
|
#define ZBUF_SIZE 4096
|
||||||
|
AVIOContext *zpb;
|
||||||
|
uint8_t *zbuf_in;
|
||||||
|
uint8_t *zbuf_out;
|
||||||
|
z_stream zstream;
|
||||||
|
#endif
|
||||||
|
} SWFDecContext;
|
||||||
|
|
||||||
static const AVCodecTag swf_audio_codec_tags[] = {
|
static const AVCodecTag swf_audio_codec_tags[] = {
|
||||||
{ AV_CODEC_ID_PCM_S16LE, 0x00 },
|
{ AV_CODEC_ID_PCM_S16LE, 0x00 },
|
||||||
{ AV_CODEC_ID_ADPCM_SWF, 0x01 },
|
{ AV_CODEC_ID_ADPCM_SWF, 0x01 },
|
||||||
@ -101,7 +113,7 @@ static int swf_probe(const AVProbeData *p)
|
|||||||
static int zlib_refill(void *opaque, uint8_t *buf, int buf_size)
|
static int zlib_refill(void *opaque, uint8_t *buf, int buf_size)
|
||||||
{
|
{
|
||||||
AVFormatContext *s = opaque;
|
AVFormatContext *s = opaque;
|
||||||
SWFContext *swf = s->priv_data;
|
SWFDecContext *swf = s->priv_data;
|
||||||
z_stream *z = &swf->zstream;
|
z_stream *z = &swf->zstream;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -132,7 +144,7 @@ retry:
|
|||||||
|
|
||||||
static int swf_read_header(AVFormatContext *s)
|
static int swf_read_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFDecContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
int nbits, len, tag;
|
int nbits, len, tag;
|
||||||
|
|
||||||
@ -202,7 +214,7 @@ static AVStream *create_new_audio_stream(AVFormatContext *s, int id, int info)
|
|||||||
|
|
||||||
static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
|
static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFDecContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
AVStream *vst = NULL, *ast = NULL, *st = 0;
|
AVStream *vst = NULL, *ast = NULL, *st = 0;
|
||||||
int tag, len, i, frame, v, res;
|
int tag, len, i, frame, v, res;
|
||||||
@ -525,7 +537,7 @@ bitmap_end_skip:
|
|||||||
#if CONFIG_ZLIB
|
#if CONFIG_ZLIB
|
||||||
static av_cold int swf_read_close(AVFormatContext *avctx)
|
static av_cold int swf_read_close(AVFormatContext *avctx)
|
||||||
{
|
{
|
||||||
SWFContext *s = avctx->priv_data;
|
SWFDecContext *s = avctx->priv_data;
|
||||||
inflateEnd(&s->zstream);
|
inflateEnd(&s->zstream);
|
||||||
av_freep(&s->zbuf_in);
|
av_freep(&s->zbuf_in);
|
||||||
av_freep(&s->zbuf_out);
|
av_freep(&s->zbuf_out);
|
||||||
@ -537,7 +549,7 @@ static av_cold int swf_read_close(AVFormatContext *avctx)
|
|||||||
AVInputFormat ff_swf_demuxer = {
|
AVInputFormat ff_swf_demuxer = {
|
||||||
.name = "swf",
|
.name = "swf",
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
|
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
|
||||||
.priv_data_size = sizeof(SWFContext),
|
.priv_data_size = sizeof(SWFDecContext),
|
||||||
.read_probe = swf_probe,
|
.read_probe = swf_probe,
|
||||||
.read_header = swf_read_header,
|
.read_header = swf_read_header,
|
||||||
.read_packet = swf_read_packet,
|
.read_packet = swf_read_packet,
|
||||||
|
@ -22,12 +22,29 @@
|
|||||||
|
|
||||||
#include "libavcodec/put_bits.h"
|
#include "libavcodec/put_bits.h"
|
||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
|
#include "libavutil/fifo.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
#include "swf.h"
|
#include "swf.h"
|
||||||
|
|
||||||
|
#define AUDIO_FIFO_SIZE 65536
|
||||||
|
|
||||||
|
typedef struct SWFEncContext {
|
||||||
|
int64_t duration_pos;
|
||||||
|
int64_t tag_pos;
|
||||||
|
int64_t vframes_pos;
|
||||||
|
int samples_per_frame;
|
||||||
|
int sound_samples;
|
||||||
|
int swf_frame_number;
|
||||||
|
int video_frame_number;
|
||||||
|
int tag;
|
||||||
|
AVFifoBuffer *audio_fifo;
|
||||||
|
AVCodecParameters *audio_par, *video_par;
|
||||||
|
AVStream *video_st;
|
||||||
|
} SWFEncContext;
|
||||||
|
|
||||||
static void put_swf_tag(AVFormatContext *s, int tag)
|
static void put_swf_tag(AVFormatContext *s, int tag)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
|
|
||||||
swf->tag_pos = avio_tell(pb);
|
swf->tag_pos = avio_tell(pb);
|
||||||
@ -43,7 +60,7 @@ static void put_swf_tag(AVFormatContext *s, int tag)
|
|||||||
|
|
||||||
static void put_swf_end_tag(AVFormatContext *s)
|
static void put_swf_end_tag(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
int64_t pos;
|
int64_t pos;
|
||||||
int tag_len, tag;
|
int tag_len, tag;
|
||||||
@ -173,7 +190,7 @@ static void put_swf_matrix(AVIOContext *pb,
|
|||||||
|
|
||||||
static int swf_write_header(AVFormatContext *s)
|
static int swf_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
PutBitContext p;
|
PutBitContext p;
|
||||||
uint8_t buf1[256];
|
uint8_t buf1[256];
|
||||||
@ -343,7 +360,7 @@ static int swf_write_header(AVFormatContext *s)
|
|||||||
static int swf_write_video(AVFormatContext *s,
|
static int swf_write_video(AVFormatContext *s,
|
||||||
AVCodecParameters *par, const uint8_t *buf, int size)
|
AVCodecParameters *par, const uint8_t *buf, int size)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
|
|
||||||
/* Flash Player limit */
|
/* Flash Player limit */
|
||||||
@ -448,7 +465,7 @@ static int swf_write_video(AVFormatContext *s,
|
|||||||
static int swf_write_audio(AVFormatContext *s,
|
static int swf_write_audio(AVFormatContext *s,
|
||||||
AVCodecParameters *par, uint8_t *buf, int size)
|
AVCodecParameters *par, uint8_t *buf, int size)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
|
|
||||||
/* Flash Player limit */
|
/* Flash Player limit */
|
||||||
if (swf->swf_frame_number == 16000)
|
if (swf->swf_frame_number == 16000)
|
||||||
@ -480,7 +497,7 @@ static int swf_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
|
|
||||||
static int swf_write_trailer(AVFormatContext *s)
|
static int swf_write_trailer(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
int file_size;
|
int file_size;
|
||||||
|
|
||||||
@ -505,7 +522,7 @@ static int swf_write_trailer(AVFormatContext *s)
|
|||||||
|
|
||||||
static void swf_deinit(AVFormatContext *s)
|
static void swf_deinit(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
SWFContext *swf = s->priv_data;
|
SWFEncContext *swf = s->priv_data;
|
||||||
|
|
||||||
av_fifo_freep(&swf->audio_fifo);
|
av_fifo_freep(&swf->audio_fifo);
|
||||||
}
|
}
|
||||||
@ -516,7 +533,7 @@ AVOutputFormat ff_swf_muxer = {
|
|||||||
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
|
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
|
||||||
.mime_type = "application/x-shockwave-flash",
|
.mime_type = "application/x-shockwave-flash",
|
||||||
.extensions = "swf",
|
.extensions = "swf",
|
||||||
.priv_data_size = sizeof(SWFContext),
|
.priv_data_size = sizeof(SWFEncContext),
|
||||||
.audio_codec = AV_CODEC_ID_MP3,
|
.audio_codec = AV_CODEC_ID_MP3,
|
||||||
.video_codec = AV_CODEC_ID_FLV1,
|
.video_codec = AV_CODEC_ID_FLV1,
|
||||||
.write_header = swf_write_header,
|
.write_header = swf_write_header,
|
||||||
@ -531,7 +548,7 @@ AVOutputFormat ff_avm2_muxer = {
|
|||||||
.name = "avm2",
|
.name = "avm2",
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash) (AVM2)"),
|
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash) (AVM2)"),
|
||||||
.mime_type = "application/x-shockwave-flash",
|
.mime_type = "application/x-shockwave-flash",
|
||||||
.priv_data_size = sizeof(SWFContext),
|
.priv_data_size = sizeof(SWFEncContext),
|
||||||
.audio_codec = AV_CODEC_ID_MP3,
|
.audio_codec = AV_CODEC_ID_MP3,
|
||||||
.video_codec = AV_CODEC_ID_FLV1,
|
.video_codec = AV_CODEC_ID_FLV1,
|
||||||
.write_header = swf_write_header,
|
.write_header = swf_write_header,
|
||||||
|
Loading…
Reference in New Issue
Block a user