* commit '9200514ad8717c63f82101dc394f4378854325bf': lavf: replace AVStream.codec with AVStream.codecpar This has been a HUGE effort from: - Derek Buitenhuis <derek.buitenhuis@gmail.com> - Hendrik Leppkes <h.leppkes@gmail.com> - wm4 <nfxjfg@googlemail.com> - Clément Bœsch <clement@stupeflix.com> - James Almer <jamrial@gmail.com> - Michael Niedermayer <michael@niedermayer.cc> - Rostislav Pehlivanov <atomnuker@gmail.com> Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>tags/n3.1
@@ -696,6 +696,15 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost) | |||
} | |||
if (pkt->size == 0 && pkt->side_data_elems == 0) | |||
return; | |||
if (!ost->st->codecpar->extradata && avctx->extradata) { | |||
ost->st->codecpar->extradata = av_malloc(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); | |||
if (!ost->st->codecpar->extradata) { | |||
av_log(NULL, AV_LOG_ERROR, "Could not allocate extradata buffer to copy parser data.\n"); | |||
exit_program(1); | |||
} | |||
ost->st->codecpar->extradata_size = avctx->extradata_size; | |||
memcpy(ost->st->codecpar->extradata, avctx->extradata, avctx->extradata_size); | |||
} | |||
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) { | |||
if (pkt->dts != AV_NOPTS_VALUE && | |||
@@ -2996,6 +2996,8 @@ static int prepare_sdp_description(FFServerStream *stream, uint8_t **pbuffer, | |||
for(i = 0; i < stream->nb_streams; i++) { | |||
avc->streams[i] = &avs[i]; | |||
avc->streams[i]->codec = stream->streams[i]->codec; | |||
avcodec_parameters_from_context(stream->streams[i]->codecpar, stream->streams[i]->codec); | |||
avc->streams[i]->codecpar = stream->streams[i]->codecpar; | |||
} | |||
*pbuffer = av_mallocz(2048); | |||
if (!*pbuffer) | |||
@@ -3536,6 +3538,8 @@ static AVStream *add_av_stream1(FFServerStream *stream, | |||
fst->priv_data = av_mallocz(sizeof(FeedData)); | |||
fst->internal = av_mallocz(sizeof(*fst->internal)); | |||
fst->internal->avctx = avcodec_alloc_context3(NULL); | |||
fst->codecpar = avcodec_parameters_alloc(); | |||
fst->index = stream->nb_streams; | |||
avpriv_set_pts_info(fst, 33, 1, 90000); | |||
fst->sample_aspect_ratio = codec->sample_aspect_ratio; | |||
@@ -175,7 +175,7 @@ av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode, | |||
snd_pcm_t *h; | |||
snd_pcm_hw_params_t *hw_params; | |||
snd_pcm_uframes_t buffer_size, period_size; | |||
uint64_t layout = ctx->streams[0]->codec->channel_layout; | |||
uint64_t layout = ctx->streams[0]->codecpar->channel_layout; | |||
if (ctx->filename[0] == 0) audio_device = "default"; | |||
else audio_device = ctx->filename; | |||
@@ -79,11 +79,11 @@ static av_cold int audio_read_header(AVFormatContext *s1) | |||
} | |||
/* take real parameters */ | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = codec_id; | |||
st->codec->sample_rate = s->sample_rate; | |||
st->codec->channels = s->channels; | |||
st->codec->frame_size = s->frame_size; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = codec_id; | |||
st->codecpar->sample_rate = s->sample_rate; | |||
st->codecpar->channels = s->channels; | |||
st->codecpar->frame_size = s->frame_size; | |||
avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ | |||
/* microseconds instead of seconds, MHz instead of Hz */ | |||
s->timefilter = ff_timefilter_new(1000000.0 / s->sample_rate, | |||
@@ -55,20 +55,20 @@ static av_cold int audio_write_header(AVFormatContext *s1) | |||
enum AVCodecID codec_id; | |||
int res; | |||
if (s1->nb_streams != 1 || s1->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO) { | |||
if (s1->nb_streams != 1 || s1->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) { | |||
av_log(s1, AV_LOG_ERROR, "Only a single audio stream is supported.\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
st = s1->streams[0]; | |||
sample_rate = st->codec->sample_rate; | |||
codec_id = st->codec->codec_id; | |||
sample_rate = st->codecpar->sample_rate; | |||
codec_id = st->codecpar->codec_id; | |||
res = ff_alsa_open(s1, SND_PCM_STREAM_PLAYBACK, &sample_rate, | |||
st->codec->channels, &codec_id); | |||
if (sample_rate != st->codec->sample_rate) { | |||
st->codecpar->channels, &codec_id); | |||
if (sample_rate != st->codecpar->sample_rate) { | |||
av_log(s1, AV_LOG_ERROR, | |||
"sample rate %d not available, nearest is %d\n", | |||
st->codec->sample_rate, sample_rate); | |||
st->codecpar->sample_rate, sample_rate); | |||
goto fail; | |||
} | |||
avpriv_set_pts_info(st, 64, 1, sample_rate); | |||
@@ -124,7 +124,7 @@ static int audio_write_frame(AVFormatContext *s1, int stream_index, | |||
/* ff_alsa_open() should have accepted only supported formats */ | |||
if ((flags & AV_WRITE_UNCODED_FRAME_QUERY)) | |||
return av_sample_fmt_is_planar(s1->streams[stream_index]->codec->sample_fmt) ? | |||
return av_sample_fmt_is_planar(s1->streams[stream_index]->codecpar->format) ? | |||
AVERROR(EINVAL) : 0; | |||
/* set only used fields */ | |||
pkt.data = (*frame)->data[0]; | |||
@@ -286,14 +286,12 @@ static int grab_read_header(AVFormatContext *s1) | |||
s->per_frame = ((uint64_t)1000000 * framerate.den) / framerate.num; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->pix_fmt = AV_PIX_FMT_YUV420P; | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->width = s->width; | |||
st->codec->height = s->height; | |||
st->codec->time_base.den = framerate.num; | |||
st->codec->time_base.num = framerate.den; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->format = AV_PIX_FMT_YUV420P; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->width = s->width; | |||
st->codecpar->height = s->height; | |||
st->avg_frame_rate = framerate; | |||
if (bktr_init(s1->filename, s->width, s->height, s->standard, | |||
&s->video_fd, &s->tuner_fd, -1, 0.0) < 0) { | |||
@@ -918,7 +918,7 @@ dshow_add_device(AVFormatContext *avctx, | |||
{ | |||
struct dshow_ctx *ctx = avctx->priv_data; | |||
AM_MEDIA_TYPE type; | |||
AVCodecContext *codec; | |||
AVCodecParameters *par; | |||
AVStream *st; | |||
int ret = AVERROR(EIO); | |||
@@ -933,7 +933,7 @@ dshow_add_device(AVFormatContext *avctx, | |||
libAVPin_ConnectionMediaType(ctx->capture_pin[devtype], &type); | |||
codec = st->codec; | |||
par = st->codecpar; | |||
if (devtype == VideoDevice) { | |||
BITMAPINFOHEADER *bih = NULL; | |||
AVRational time_base; | |||
@@ -952,33 +952,34 @@ dshow_add_device(AVFormatContext *avctx, | |||
goto error; | |||
} | |||
codec->time_base = time_base; | |||
codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
codec->width = bih->biWidth; | |||
codec->height = bih->biHeight; | |||
codec->codec_tag = bih->biCompression; | |||
codec->pix_fmt = dshow_pixfmt(bih->biCompression, bih->biBitCount); | |||
st->avg_frame_rate = av_inv_q(time_base); | |||
par->codec_type = AVMEDIA_TYPE_VIDEO; | |||
par->width = bih->biWidth; | |||
par->height = bih->biHeight; | |||
par->codec_tag = bih->biCompression; | |||
par->format = dshow_pixfmt(bih->biCompression, bih->biBitCount); | |||
if (bih->biCompression == MKTAG('H', 'D', 'Y', 'C')) { | |||
av_log(avctx, AV_LOG_DEBUG, "attempt to use full range for HDYC...\n"); | |||
codec->color_range = AVCOL_RANGE_MPEG; // just in case it needs this... | |||
par->color_range = AVCOL_RANGE_MPEG; // just in case it needs this... | |||
} | |||
if (codec->pix_fmt == AV_PIX_FMT_NONE) { | |||
if (par->format == AV_PIX_FMT_NONE) { | |||
const AVCodecTag *const tags[] = { avformat_get_riff_video_tags(), NULL }; | |||
codec->codec_id = av_codec_get_id(tags, bih->biCompression); | |||
if (codec->codec_id == AV_CODEC_ID_NONE) { | |||
par->codec_id = av_codec_get_id(tags, bih->biCompression); | |||
if (par->codec_id == AV_CODEC_ID_NONE) { | |||
av_log(avctx, AV_LOG_ERROR, "Unknown compression type. " | |||
"Please report type 0x%X.\n", (int) bih->biCompression); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
codec->bits_per_coded_sample = bih->biBitCount; | |||
par->bits_per_coded_sample = bih->biBitCount; | |||
} else { | |||
codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
par->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
if (bih->biCompression == BI_RGB || bih->biCompression == BI_BITFIELDS) { | |||
codec->bits_per_coded_sample = bih->biBitCount; | |||
codec->extradata = av_malloc(9 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (codec->extradata) { | |||
codec->extradata_size = 9; | |||
memcpy(codec->extradata, "BottomUp", 9); | |||
par->bits_per_coded_sample = bih->biBitCount; | |||
par->extradata = av_malloc(9 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (par->extradata) { | |||
par->extradata_size = 9; | |||
memcpy(par->extradata, "BottomUp", 9); | |||
} | |||
} | |||
} | |||
@@ -993,11 +994,11 @@ dshow_add_device(AVFormatContext *avctx, | |||
goto error; | |||
} | |||
codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
codec->sample_fmt = sample_fmt_bits_per_sample(fx->wBitsPerSample); | |||
codec->codec_id = waveform_codec_id(codec->sample_fmt); | |||
codec->sample_rate = fx->nSamplesPerSec; | |||
codec->channels = fx->nChannels; | |||
par->codec_type = AVMEDIA_TYPE_AUDIO; | |||
par->format = sample_fmt_bits_per_sample(fx->wBitsPerSample); | |||
par->codec_id = waveform_codec_id(par->format); | |||
par->sample_rate = fx->nSamplesPerSec; | |||
par->channels = fx->nChannels; | |||
} | |||
avpriv_set_pts_info(st, 64, 1, 10000000); | |||
@@ -126,13 +126,13 @@ static av_cold int fbdev_read_header(AVFormatContext *avctx) | |||
goto fail; | |||
} | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->width = fbdev->width; | |||
st->codec->height = fbdev->height; | |||
st->codec->pix_fmt = pix_fmt; | |||
st->codec->time_base = av_inv_q(fbdev->framerate_q); | |||
st->codec->bit_rate = | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->width = fbdev->width; | |||
st->codecpar->height = fbdev->height; | |||
st->codecpar->format = pix_fmt; | |||
st->avg_frame_rate = fbdev->framerate_q; | |||
st->codecpar->bit_rate = | |||
fbdev->width * fbdev->height * fbdev->bytes_per_pixel * av_q2d(fbdev->framerate_q) * 8; | |||
av_log(avctx, AV_LOG_INFO, | |||
@@ -140,7 +140,7 @@ static av_cold int fbdev_read_header(AVFormatContext *avctx) | |||
fbdev->width, fbdev->height, fbdev->varinfo.bits_per_pixel, | |||
av_get_pix_fmt_name(pix_fmt), | |||
fbdev->framerate_q.num, fbdev->framerate_q.den, | |||
(int64_t)st->codec->bit_rate); | |||
(int64_t)st->codecpar->bit_rate); | |||
return 0; | |||
fail: | |||
@@ -48,7 +48,7 @@ static av_cold int fbdev_write_header(AVFormatContext *h) | |||
int ret, flags = O_RDWR; | |||
const char* device; | |||
if (h->nb_streams != 1 || h->streams[0]->codec->codec_type != AVMEDIA_TYPE_VIDEO) { | |||
if (h->nb_streams != 1 || h->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) { | |||
av_log(fbdev, AV_LOG_ERROR, "Only a single video stream is supported.\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
@@ -105,11 +105,11 @@ static int fbdev_write_packet(AVFormatContext *h, AVPacket *pkt) | |||
enum AVPixelFormat fb_pix_fmt; | |||
int disp_height; | |||
int bytes_to_copy; | |||
AVCodecContext *codec_ctx = h->streams[0]->codec; | |||
enum AVPixelFormat video_pix_fmt = codec_ctx->pix_fmt; | |||
int video_width = codec_ctx->width; | |||
int video_height = codec_ctx->height; | |||
int bytes_per_pixel = ((codec_ctx->bits_per_coded_sample + 7) >> 3); | |||
AVCodecParameters *par = h->streams[0]->codecpar; | |||
enum AVPixelFormat video_pix_fmt = par->format; | |||
int video_width = par->width; | |||
int video_height = par->height; | |||
int bytes_per_pixel = ((par->bits_per_coded_sample + 7) >> 3); | |||
int src_line_size = video_width * bytes_per_pixel; | |||
int i; | |||
@@ -403,10 +403,11 @@ gdigrab_read_header(AVFormatContext *s1) | |||
} | |||
} | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_BMP; | |||
st->codec->time_base = gdigrab->time_base; | |||
st->codec->bit_rate = (gdigrab->header_size + gdigrab->frame_size) * 1/av_q2d(gdigrab->time_base) * 8; | |||
st->avg_frame_rate = av_inv_q(gdigrab->time_base); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_BMP; | |||
st->codecpar->bit_rate = (gdigrab->header_size + gdigrab->frame_size) * 1/av_q2d(gdigrab->time_base) * 8; | |||
return 0; | |||
@@ -262,14 +262,14 @@ static int audio_read_header(AVFormatContext *context) | |||
return AVERROR(ENOMEM); | |||
} | |||
stream->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
stream->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
#if HAVE_BIGENDIAN | |||
stream->codec->codec_id = AV_CODEC_ID_PCM_F32BE; | |||
stream->codecpar->codec_id = AV_CODEC_ID_PCM_F32BE; | |||
#else | |||
stream->codec->codec_id = AV_CODEC_ID_PCM_F32LE; | |||
stream->codecpar->codec_id = AV_CODEC_ID_PCM_F32LE; | |||
#endif | |||
stream->codec->sample_rate = self->sample_rate; | |||
stream->codec->channels = self->nports; | |||
stream->codecpar->sample_rate = self->sample_rate; | |||
stream->codecpar->channels = self->nports; | |||
avpriv_set_pts_info(stream, 64, 1, 1000000); /* 64 bits pts in us */ | |||
return 0; | |||
@@ -108,8 +108,8 @@ static int create_subcc_streams(AVFormatContext *avctx) | |||
lavfi->sink_stream_subcc_map[sink_idx] = avctx->nb_streams; | |||
if (!(st = avformat_new_stream(avctx, NULL))) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_id = AV_CODEC_ID_EIA_608; | |||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codecpar->codec_id = AV_CODEC_ID_EIA_608; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
} else { | |||
lavfi->sink_stream_subcc_map[sink_idx] = -1; | |||
} | |||
@@ -314,28 +314,28 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) | |||
for (i = 0; i < lavfi->nb_sinks; i++) { | |||
AVFilterLink *link = lavfi->sinks[lavfi->stream_sink_map[i]]->inputs[0]; | |||
AVStream *st = avctx->streams[i]; | |||
st->codec->codec_type = link->type; | |||
st->codecpar->codec_type = link->type; | |||
avpriv_set_pts_info(st, 64, link->time_base.num, link->time_base.den); | |||
if (link->type == AVMEDIA_TYPE_VIDEO) { | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->pix_fmt = link->format; | |||
st->codec->time_base = link->time_base; | |||
st->codec->width = link->w; | |||
st->codec->height = link->h; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->format = link->format; | |||
st->avg_frame_rate = av_inv_q(link->time_base); | |||
st->codecpar->width = link->w; | |||
st->codecpar->height = link->h; | |||
st ->sample_aspect_ratio = | |||
st->codec->sample_aspect_ratio = link->sample_aspect_ratio; | |||
st->codecpar->sample_aspect_ratio = link->sample_aspect_ratio; | |||
avctx->probesize = FFMAX(avctx->probesize, | |||
link->w * link->h * | |||
av_get_padded_bits_per_pixel(av_pix_fmt_desc_get(link->format)) * | |||
30); | |||
} else if (link->type == AVMEDIA_TYPE_AUDIO) { | |||
st->codec->codec_id = av_get_pcm_codec(link->format, -1); | |||
st->codec->channels = avfilter_link_get_channels(link); | |||
st->codec->sample_fmt = link->format; | |||
st->codec->sample_rate = link->sample_rate; | |||
st->codec->time_base = link->time_base; | |||
st->codec->channel_layout = link->channel_layout; | |||
if (st->codec->codec_id == AV_CODEC_ID_NONE) | |||
st->codecpar->codec_id = av_get_pcm_codec(link->format, -1); | |||
st->codecpar->channels = avfilter_link_get_channels(link); | |||
st->codecpar->format = link->format; | |||
st->codecpar->sample_rate = link->sample_rate; | |||
st->avg_frame_rate = av_inv_q(link->time_base); | |||
st->codecpar->channel_layout = link->channel_layout; | |||
if (st->codecpar->codec_id == AV_CODEC_ID_NONE) | |||
av_log(avctx, AV_LOG_ERROR, | |||
"Could not find PCM codec for sample format %s.\n", | |||
av_get_sample_fmt_name(link->format)); | |||
@@ -85,19 +85,19 @@ static av_cold int read_header(AVFormatContext *ctx) | |||
} | |||
cdio_paranoia_modeset(s->paranoia, s->paranoia_mode); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
if (s->drive->bigendianp) | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S16BE; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S16BE; | |||
else | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
st->codec->sample_rate = 44100; | |||
st->codec->channels = 2; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
st->codecpar->sample_rate = 44100; | |||
st->codecpar->channels = 2; | |||
if (s->drive->audio_last_sector != CDIO_INVALID_LSN && | |||
s->drive->audio_first_sector != CDIO_INVALID_LSN) | |||
st->duration = s->drive->audio_last_sector - s->drive->audio_first_sector; | |||
else if (s->drive->tracks) | |||
st->duration = s->drive->disc_toc[s->drive->tracks].dwStartSector; | |||
avpriv_set_pts_info(st, 64, CDIO_CD_FRAMESIZE_RAW, 2*st->codec->channels*st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, CDIO_CD_FRAMESIZE_RAW, 2 * st->codecpar->channels * st->codecpar->sample_rate); | |||
for (i = 0; i < s->drive->tracks; i++) { | |||
char title[16]; | |||
@@ -171,13 +171,12 @@ static inline int dc1394_read_common(AVFormatContext *c, | |||
goto out; | |||
} | |||
avpriv_set_pts_info(vst, 64, 1, 1000); | |||
vst->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vst->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
vst->codec->time_base.den = framerate.num; | |||
vst->codec->time_base.num = framerate.den; | |||
vst->codec->width = fmt->width; | |||
vst->codec->height = fmt->height; | |||
vst->codec->pix_fmt = fmt->pix_fmt; | |||
vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vst->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
vst->codecpar->width = fmt->width; | |||
vst->codecpar->height = fmt->height; | |||
vst->codecpar->format = fmt->pix_fmt; | |||
vst->avg_frame_rate = framerate; | |||
/* packet init */ | |||
av_init_packet(&dc1394->packet); | |||
@@ -188,7 +187,7 @@ static inline int dc1394_read_common(AVFormatContext *c, | |||
dc1394->current_frame = 0; | |||
vst->codec->bit_rate = av_rescale(dc1394->packet.size * 8, fps->frame_rate, 1000); | |||
vst->codecpar->bit_rate = av_rescale(dc1394->packet.size * 8, fps->frame_rate, 1000); | |||
*select_fps = fps; | |||
*select_fmt = fmt; | |||
out: | |||
@@ -128,7 +128,7 @@ static int read_header(AVFormatContext *ctx) | |||
int error = 0; | |||
const char *error_msg; | |||
AVStream *st = NULL; | |||
AVCodecContext *codec = NULL; | |||
AVCodecParameters *par = NULL; | |||
if (ad->list_devices) { | |||
print_al_capture_devices(ctx); | |||
@@ -156,11 +156,11 @@ static int read_header(AVFormatContext *ctx) | |||
avpriv_set_pts_info(st, 64, 1, 1000000); | |||
/* Set codec parameters */ | |||
codec = st->codec; | |||
codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
codec->sample_rate = ad->sample_rate; | |||
codec->channels = get_al_format_info(ad->sample_format)->channels; | |||
codec->codec_id = get_al_format_info(ad->sample_format)->codec_id; | |||
par = st->codecpar; | |||
par->codec_type = AVMEDIA_TYPE_AUDIO; | |||
par->sample_rate = ad->sample_rate; | |||
par->channels = get_al_format_info(ad->sample_format)->channels; | |||
par->codec_id = get_al_format_info(ad->sample_format)->codec_id; | |||
/* This is needed to read the audio data */ | |||
ad->sample_step = (av_get_bits_per_sample(get_al_format_info(ad->sample_format)->codec_id) * | |||
@@ -678,11 +678,11 @@ static void opengl_compute_display_area(AVFormatContext *s) | |||
AVRational sar, dar; /* sample and display aspect ratios */ | |||
OpenGLContext *opengl = s->priv_data; | |||
AVStream *st = s->streams[0]; | |||
AVCodecContext *encctx = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
/* compute overlay width and height from the codec context information */ | |||
sar = st->sample_aspect_ratio.num ? st->sample_aspect_ratio : (AVRational){ 1, 1 }; | |||
dar = av_mul_q(sar, (AVRational){ encctx->width, encctx->height }); | |||
dar = av_mul_q(sar, (AVRational){ par->width, par->height }); | |||
/* we suppose the screen has a 1/1 sample aspect ratio */ | |||
/* fit in the window */ | |||
@@ -1065,15 +1065,15 @@ static av_cold int opengl_write_header(AVFormatContext *h) | |||
int ret; | |||
if (h->nb_streams != 1 || | |||
h->streams[0]->codec->codec_type != AVMEDIA_TYPE_VIDEO || | |||
h->streams[0]->codec->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
h->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO || | |||
h->streams[0]->codecpar->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
av_log(opengl, AV_LOG_ERROR, "Only a single video stream is supported.\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
st = h->streams[0]; | |||
opengl->width = st->codec->width; | |||
opengl->height = st->codec->height; | |||
opengl->pix_fmt = st->codec->pix_fmt; | |||
opengl->width = st->codecpar->width; | |||
opengl->height = st->codecpar->height; | |||
opengl->pix_fmt = st->codecpar->format; | |||
if (!opengl->window_width) | |||
opengl->window_width = opengl->width; | |||
if (!opengl->window_height) | |||
@@ -1200,7 +1200,7 @@ static uint8_t* opengl_get_plane_pointer(OpenGLContext *opengl, AVPacket *pkt, i | |||
static int opengl_draw(AVFormatContext *h, void *input, int repaint, int is_pkt) | |||
{ | |||
OpenGLContext *opengl = h->priv_data; | |||
enum AVPixelFormat pix_fmt = h->streams[0]->codec->pix_fmt; | |||
enum AVPixelFormat pix_fmt = h->streams[0]->codecpar->format; | |||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); | |||
int ret; | |||
@@ -63,10 +63,10 @@ static int audio_read_header(AVFormatContext *s1) | |||
} | |||
/* take real parameters */ | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = s->codec_id; | |||
st->codec->sample_rate = s->sample_rate; | |||
st->codec->channels = s->channels; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = s->codec_id; | |||
st->codecpar->sample_rate = s->sample_rate; | |||
st->codecpar->channels = s->channels; | |||
avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ | |||
return 0; | |||
@@ -49,8 +49,8 @@ static int audio_write_header(AVFormatContext *s1) | |||
int ret; | |||
st = s1->streams[0]; | |||
s->sample_rate = st->codec->sample_rate; | |||
s->channels = st->codec->channels; | |||
s->sample_rate = st->codecpar->sample_rate; | |||
s->channels = st->codecpar->channels; | |||
ret = ff_oss_audio_open(s1, 1, s1->filename); | |||
if (ret < 0) { | |||
return AVERROR(EIO); | |||
@@ -242,10 +242,10 @@ static av_cold int pulse_read_header(AVFormatContext *s) | |||
pa_threaded_mainloop_unlock(pd->mainloop); | |||
/* take real parameters */ | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = codec_id; | |||
st->codec->sample_rate = pd->sample_rate; | |||
st->codec->channels = pd->channels; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = codec_id; | |||
st->codecpar->sample_rate = pd->sample_rate; | |||
st->codecpar->channels = pd->channels; | |||
avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ | |||
pd->timefilter = ff_timefilter_new(1000000.0 / pd->sample_rate, | |||
@@ -452,7 +452,7 @@ static av_cold int pulse_write_header(AVFormatContext *h) | |||
PA_STREAM_AUTO_TIMING_UPDATE | | |||
PA_STREAM_NOT_MONOTONIC; | |||
if (h->nb_streams != 1 || h->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO) { | |||
if (h->nb_streams != 1 || h->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) { | |||
av_log(s, AV_LOG_ERROR, "Only a single audio stream is supported.\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
@@ -468,8 +468,8 @@ static av_cold int pulse_write_header(AVFormatContext *h) | |||
if (s->buffer_duration) { | |||
int64_t bytes = s->buffer_duration; | |||
bytes *= st->codec->channels * st->codec->sample_rate * | |||
av_get_bytes_per_sample(st->codec->sample_fmt); | |||
bytes *= st->codecpar->channels * st->codecpar->sample_rate * | |||
av_get_bytes_per_sample(st->codecpar->format); | |||
bytes /= 1000; | |||
buffer_attributes.tlength = FFMAX(s->buffer_size, av_clip64(bytes, 0, UINT32_MAX - 1)); | |||
av_log(s, AV_LOG_DEBUG, | |||
@@ -483,9 +483,9 @@ static av_cold int pulse_write_header(AVFormatContext *h) | |||
if (s->minreq) | |||
buffer_attributes.minreq = s->minreq; | |||
sample_spec.format = ff_codec_id_to_pulse_format(st->codec->codec_id); | |||
sample_spec.rate = st->codec->sample_rate; | |||
sample_spec.channels = st->codec->channels; | |||
sample_spec.format = ff_codec_id_to_pulse_format(st->codecpar->codec_id); | |||
sample_spec.rate = st->codecpar->sample_rate; | |||
sample_spec.channels = st->codecpar->channels; | |||
if (!pa_sample_spec_valid(&sample_spec)) { | |||
av_log(s, AV_LOG_ERROR, "Invalid sample spec.\n"); | |||
return AVERROR(EINVAL); | |||
@@ -494,10 +494,10 @@ static av_cold int pulse_write_header(AVFormatContext *h) | |||
if (sample_spec.channels == 1) { | |||
channel_map.channels = 1; | |||
channel_map.map[0] = PA_CHANNEL_POSITION_MONO; | |||
} else if (st->codec->channel_layout) { | |||
if (av_get_channel_layout_nb_channels(st->codec->channel_layout) != st->codec->channels) | |||
} else if (st->codecpar->channel_layout) { | |||
if (av_get_channel_layout_nb_channels(st->codecpar->channel_layout) != st->codecpar->channels) | |||
return AVERROR(EINVAL); | |||
pulse_map_channels_to_pulse(st->codec->channel_layout, &channel_map); | |||
pulse_map_channels_to_pulse(st->codecpar->channel_layout, &channel_map); | |||
/* Unknown channel is present in channel_layout, let PulseAudio use its default. */ | |||
if (channel_map.channels != sample_spec.channels) { | |||
av_log(s, AV_LOG_WARNING, "Unknown channel. Using defaul channel map.\n"); | |||
@@ -637,9 +637,8 @@ static int pulse_write_packet(AVFormatContext *h, AVPacket *pkt) | |||
s->timestamp += pkt->duration; | |||
} else { | |||
AVStream *st = h->streams[0]; | |||
AVCodecContext *codec_ctx = st->codec; | |||
AVRational r = { 1, codec_ctx->sample_rate }; | |||
int64_t samples = pkt->size / (av_get_bytes_per_sample(codec_ctx->sample_fmt) * codec_ctx->channels); | |||
AVRational r = { 1, st->codecpar->sample_rate }; | |||
int64_t samples = pkt->size / (av_get_bytes_per_sample(st->codecpar->format) * st->codecpar->channels); | |||
s->timestamp += av_rescale_q(samples, r, st->time_base); | |||
} | |||
@@ -678,7 +677,7 @@ static int pulse_write_frame(AVFormatContext *h, int stream_index, | |||
/* Planar formats are not supported yet. */ | |||
if (flags & AV_WRITE_UNCODED_FRAME_QUERY) | |||
return av_sample_fmt_is_planar(h->streams[stream_index]->codec->sample_fmt) ? | |||
return av_sample_fmt_is_planar(h->streams[stream_index]->codecpar->format) ? | |||
AVERROR(EINVAL) : 0; | |||
pkt.data = (*frame)->data[0]; | |||
@@ -94,12 +94,12 @@ static void compute_overlay_rect(AVFormatContext *s) | |||
AVRational sar, dar; /* sample and display aspect ratios */ | |||
SDLContext *sdl = s->priv_data; | |||
AVStream *st = s->streams[0]; | |||
AVCodecContext *encctx = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
SDL_Rect *overlay_rect = &sdl->overlay_rect; | |||
/* compute overlay width and height from the codec context information */ | |||
sar = st->sample_aspect_ratio.num ? st->sample_aspect_ratio : (AVRational){ 1, 1 }; | |||
dar = av_mul_q(sar, (AVRational){ encctx->width, encctx->height }); | |||
dar = av_mul_q(sar, (AVRational){ par->width, par->height }); | |||
/* we suppose the screen has a 1/1 sample aspect ratio */ | |||
if (sdl->window_width && sdl->window_height) { | |||
@@ -115,10 +115,10 @@ static void compute_overlay_rect(AVFormatContext *s) | |||
} | |||
} else { | |||
if (sar.num > sar.den) { | |||
overlay_rect->w = encctx->width; | |||
overlay_rect->w = par->width; | |||
overlay_rect->h = av_rescale(overlay_rect->w, dar.den, dar.num); | |||
} else { | |||
overlay_rect->h = encctx->height; | |||
overlay_rect->h = par->height; | |||
overlay_rect->w = av_rescale(overlay_rect->h, dar.num, dar.den); | |||
} | |||
sdl->window_width = overlay_rect->w; | |||
@@ -137,7 +137,7 @@ static int event_thread(void *arg) | |||
SDLContext *sdl = s->priv_data; | |||
int flags = SDL_BASE_FLAGS | (sdl->window_fullscreen ? SDL_FULLSCREEN : 0); | |||
AVStream *st = s->streams[0]; | |||
AVCodecContext *encctx = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
/* initialization */ | |||
if (SDL_Init(SDL_INIT_VIDEO) != 0) { | |||
@@ -155,19 +155,19 @@ static int event_thread(void *arg) | |||
goto init_end; | |||
} | |||
sdl->overlay = SDL_CreateYUVOverlay(encctx->width, encctx->height, | |||
sdl->overlay = SDL_CreateYUVOverlay(par->width, par->height, | |||
sdl->overlay_fmt, sdl->surface); | |||
if (!sdl->overlay || sdl->overlay->pitches[0] < encctx->width) { | |||
if (!sdl->overlay || sdl->overlay->pitches[0] < par->width) { | |||
av_log(s, AV_LOG_ERROR, | |||
"SDL does not support an overlay with size of %dx%d pixels\n", | |||
encctx->width, encctx->height); | |||
par->width, par->height); | |||
sdl->init_ret = AVERROR(EINVAL); | |||
goto init_end; | |||
} | |||
sdl->init_ret = 0; | |||
av_log(s, AV_LOG_VERBOSE, "w:%d h:%d fmt:%s -> w:%d h:%d\n", | |||
encctx->width, encctx->height, av_get_pix_fmt_name(encctx->pix_fmt), | |||
par->width, par->height, av_get_pix_fmt_name(par->format), | |||
sdl->overlay_rect.w, sdl->overlay_rect.h); | |||
init_end: | |||
@@ -234,7 +234,7 @@ static int sdl_write_header(AVFormatContext *s) | |||
{ | |||
SDLContext *sdl = s->priv_data; | |||
AVStream *st = s->streams[0]; | |||
AVCodecContext *encctx = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
int i, ret; | |||
if (!sdl->window_title) | |||
@@ -251,15 +251,15 @@ static int sdl_write_header(AVFormatContext *s) | |||
} | |||
if ( s->nb_streams > 1 | |||
|| encctx->codec_type != AVMEDIA_TYPE_VIDEO | |||
|| encctx->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
|| par->codec_type != AVMEDIA_TYPE_VIDEO | |||
|| par->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
av_log(s, AV_LOG_ERROR, "Only supports one rawvideo stream\n"); | |||
ret = AVERROR(EINVAL); | |||
goto fail; | |||
} | |||
for (i = 0; sdl_overlay_pix_fmt_map[i].pix_fmt != AV_PIX_FMT_NONE; i++) { | |||
if (sdl_overlay_pix_fmt_map[i].pix_fmt == encctx->pix_fmt) { | |||
if (sdl_overlay_pix_fmt_map[i].pix_fmt == par->format) { | |||
sdl->overlay_fmt = sdl_overlay_pix_fmt_map[i].overlay_fmt; | |||
break; | |||
} | |||
@@ -268,7 +268,7 @@ static int sdl_write_header(AVFormatContext *s) | |||
if (!sdl->overlay_fmt) { | |||
av_log(s, AV_LOG_ERROR, | |||
"Unsupported pixel format '%s', choose one of yuv420p, yuyv422, or uyvy422\n", | |||
av_get_pix_fmt_name(encctx->pix_fmt)); | |||
av_get_pix_fmt_name(par->format)); | |||
ret = AVERROR(EINVAL); | |||
goto fail; | |||
} | |||
@@ -315,7 +315,7 @@ fail: | |||
static int sdl_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
SDLContext *sdl = s->priv_data; | |||
AVCodecContext *encctx = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
uint8_t *data[4]; | |||
int linesize[4]; | |||
int i; | |||
@@ -324,7 +324,7 @@ static int sdl_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
sdl_write_trailer(s); | |||
return AVERROR(EIO); | |||
} | |||
av_image_fill_arrays(data, linesize, pkt->data, encctx->pix_fmt, encctx->width, encctx->height, 1); | |||
av_image_fill_arrays(data, linesize, pkt->data, par->format, par->width, par->height, 1); | |||
SDL_LockMutex(sdl->mutex); | |||
SDL_FillRect(sdl->surface, &sdl->surface->clip_rect, | |||
@@ -46,10 +46,10 @@ static av_cold int audio_read_header(AVFormatContext *s1) | |||
return ret; | |||
/* take real parameters */ | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = s->codec_id; | |||
st->codec->sample_rate = s->sample_rate; | |||
st->codec->channels = s->channels; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = s->codec_id; | |||
st->codecpar->sample_rate = s->sample_rate; | |||
st->codecpar->channels = s->channels; | |||
avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ | |||
@@ -35,8 +35,8 @@ static av_cold int audio_write_header(AVFormatContext *s1) | |||
int ret; | |||
st = s1->streams[0]; | |||
s->sample_rate = st->codec->sample_rate; | |||
s->channels = st->codec->channels; | |||
s->sample_rate = st->codecpar->sample_rate; | |||
s->channels = st->codecpar->channels; | |||
ret = ff_sndio_open(s1, 1, s1->filename); | |||
@@ -938,8 +938,8 @@ static int v4l2_read_header(AVFormatContext *ctx) | |||
if ((res = v4l2_set_parameters(ctx)) < 0) | |||
goto fail; | |||
st->codec->pix_fmt = ff_fmt_v4l2ff(desired_format, codec_id); | |||
s->frame_size = av_image_get_buffer_size(st->codec->pix_fmt, | |||
st->codecpar->format = ff_fmt_v4l2ff(desired_format, codec_id); | |||
s->frame_size = av_image_get_buffer_size(st->codecpar->format, | |||
s->width, s->height, 1); | |||
if ((res = mmap_init(ctx)) || | |||
@@ -948,22 +948,22 @@ static int v4l2_read_header(AVFormatContext *ctx) | |||
s->top_field_first = first_field(s); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = codec_id; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = codec_id; | |||
if (codec_id == AV_CODEC_ID_RAWVIDEO) | |||
st->codec->codec_tag = | |||
avcodec_pix_fmt_to_codec_tag(st->codec->pix_fmt); | |||
st->codecpar->codec_tag = | |||
avcodec_pix_fmt_to_codec_tag(st->codecpar->format); | |||
else if (codec_id == AV_CODEC_ID_H264) { | |||
st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; | |||
} | |||
if (desired_format == V4L2_PIX_FMT_YVU420) | |||
st->codec->codec_tag = MKTAG('Y', 'V', '1', '2'); | |||
st->codecpar->codec_tag = MKTAG('Y', 'V', '1', '2'); | |||
else if (desired_format == V4L2_PIX_FMT_YVU410) | |||
st->codec->codec_tag = MKTAG('Y', 'V', 'U', '9'); | |||
st->codec->width = s->width; | |||
st->codec->height = s->height; | |||
st->codecpar->codec_tag = MKTAG('Y', 'V', 'U', '9'); | |||
st->codecpar->width = s->width; | |||
st->codecpar->height = s->height; | |||
if (st->avg_frame_rate.den) | |||
st->codec->bit_rate = s->frame_size * av_q2d(st->avg_frame_rate) * 8; | |||
st->codecpar->bit_rate = s->frame_size * av_q2d(st->avg_frame_rate) * 8; | |||
return 0; | |||
@@ -33,7 +33,7 @@ static av_cold int write_header(AVFormatContext *s1) | |||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT | |||
}; | |||
V4L2Context *s = s1->priv_data; | |||
AVCodecContext *enc_ctx; | |||
AVCodecParameters *par; | |||
uint32_t v4l2_pixfmt; | |||
if (s1->flags & AVFMT_FLAG_NONBLOCK) | |||
@@ -47,19 +47,19 @@ static av_cold int write_header(AVFormatContext *s1) | |||
} | |||
if (s1->nb_streams != 1 || | |||
s1->streams[0]->codec->codec_type != AVMEDIA_TYPE_VIDEO || | |||
s1->streams[0]->codec->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
s1->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO || | |||
s1->streams[0]->codecpar->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
av_log(s1, AV_LOG_ERROR, | |||
"V4L2 output device supports only a single raw video stream\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
enc_ctx = s1->streams[0]->codec; | |||
par = s1->streams[0]->codecpar; | |||
v4l2_pixfmt = ff_fmt_ff2v4l(enc_ctx->pix_fmt, AV_CODEC_ID_RAWVIDEO); | |||
v4l2_pixfmt = ff_fmt_ff2v4l(par->format, AV_CODEC_ID_RAWVIDEO); | |||
if (!v4l2_pixfmt) { // XXX: try to force them one by one? | |||
av_log(s1, AV_LOG_ERROR, "Unknown V4L2 pixel format equivalent for %s\n", | |||
av_get_pix_fmt_name(enc_ctx->pix_fmt)); | |||
av_get_pix_fmt_name(par->format)); | |||
return AVERROR(EINVAL); | |||
} | |||
@@ -69,10 +69,10 @@ static av_cold int write_header(AVFormatContext *s1) | |||
return res; | |||
} | |||
fmt.fmt.pix.width = enc_ctx->width; | |||
fmt.fmt.pix.height = enc_ctx->height; | |||
fmt.fmt.pix.width = par->width; | |||
fmt.fmt.pix.height = par->height; | |||
fmt.fmt.pix.pixelformat = v4l2_pixfmt; | |||
fmt.fmt.pix.sizeimage = av_image_get_buffer_size(enc_ctx->pix_fmt, enc_ctx->width, enc_ctx->height, 1); | |||
fmt.fmt.pix.sizeimage = av_image_get_buffer_size(par->format, par->width, par->height, 1); | |||
if (ioctl(s->fd, VIDIOC_S_FMT, &fmt) < 0) { | |||
res = AVERROR(errno); | |||
@@ -245,7 +245,7 @@ static int vfw_read_close(AVFormatContext *s) | |||
static int vfw_read_header(AVFormatContext *s) | |||
{ | |||
struct vfw_ctx *ctx = s->priv_data; | |||
AVCodecContext *codec; | |||
AVCodecParameters *par; | |||
AVStream *st; | |||
int devnum; | |||
int bisize; | |||
@@ -377,29 +377,30 @@ static int vfw_read_header(AVFormatContext *s) | |||
if(!ret) | |||
goto fail; | |||
codec = st->codec; | |||
codec->time_base = av_inv_q(framerate_q); | |||
codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
codec->width = bi->bmiHeader.biWidth; | |||
codec->height = bi->bmiHeader.biHeight; | |||
codec->pix_fmt = vfw_pixfmt(biCompression, biBitCount); | |||
if(codec->pix_fmt == AV_PIX_FMT_NONE) { | |||
codec->codec_id = vfw_codecid(biCompression); | |||
if(codec->codec_id == AV_CODEC_ID_NONE) { | |||
st->avg_frame_rate = framerate_q; | |||
par = st->codecpar; | |||
par->codec_type = AVMEDIA_TYPE_VIDEO; | |||
par->width = bi->bmiHeader.biWidth; | |||
par->height = bi->bmiHeader.biHeight; | |||
par->format = vfw_pixfmt(biCompression, biBitCount); | |||
if (par->format == AV_PIX_FMT_NONE) { | |||
par->codec_id = vfw_codecid(biCompression); | |||
if (par->codec_id == AV_CODEC_ID_NONE) { | |||
av_log(s, AV_LOG_ERROR, "Unknown compression type. " | |||
"Please report verbose (-v 9) debug information.\n"); | |||
vfw_read_close(s); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
codec->bits_per_coded_sample = biBitCount; | |||
par->bits_per_coded_sample = biBitCount; | |||
} else { | |||
codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
par->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
if(biCompression == BI_RGB) { | |||
codec->bits_per_coded_sample = biBitCount; | |||
codec->extradata = av_malloc(9 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (codec->extradata) { | |||
codec->extradata_size = 9; | |||
memcpy(codec->extradata, "BottomUp", 9); | |||
par->bits_per_coded_sample = biBitCount; | |||
par->extradata = av_malloc(9 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (par->extradata) { | |||
par->extradata_size = 9; | |||
memcpy(par->extradata, "BottomUp", 9); | |||
} | |||
} | |||
} | |||
@@ -355,11 +355,11 @@ static int x11grab_read_header(AVFormatContext *s1) | |||
x11grab->image = image; | |||
x11grab->use_shm = use_shm; | |||
ret = pixfmt_from_image(s1, image, &st->codec->pix_fmt); | |||
ret = pixfmt_from_image(s1, image, &st->codecpar->format); | |||
if (ret < 0) | |||
goto out; | |||
if (st->codec->pix_fmt == AV_PIX_FMT_PAL8) { | |||
if (st->codecpar->format == AV_PIX_FMT_PAL8) { | |||
color_map = DefaultColormap(dpy, screen); | |||
for (i = 0; i < 256; ++i) | |||
color[i].pixel = i; | |||
@@ -372,12 +372,13 @@ static int x11grab_read_header(AVFormatContext *s1) | |||
} | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->width = x11grab->width; | |||
st->codec->height = x11grab->height; | |||
st->codec->time_base = x11grab->time_base; | |||
st->codec->bit_rate = x11grab->frame_size * 1 / av_q2d(x11grab->time_base) * 8; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->width = x11grab->width; | |||
st->codecpar->height = x11grab->height; | |||
st->codecpar->bit_rate = x11grab->frame_size * 1 / av_q2d(x11grab->time_base) * 8; | |||
st->avg_frame_rate = av_inv_q(x11grab->time_base); | |||
out: | |||
av_free(dpyname); | |||
@@ -548,13 +548,12 @@ static int create_stream(AVFormatContext *s) | |||
st->avg_frame_rate.num }; | |||
c->time_frame = av_gettime(); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->width = c->width; | |||
st->codec->height = c->height; | |||
st->codec->time_base = c->time_base; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->width = c->width; | |||
st->codecpar->height = c->height; | |||
ret = pixfmt_from_pixmap_format(s, geo->depth, &st->codec->pix_fmt); | |||
ret = pixfmt_from_pixmap_format(s, geo->depth, &st->codecpar->format); | |||
free(geo); | |||
@@ -109,22 +109,22 @@ static int xv_write_header(AVFormatContext *s) | |||
XColor fgcolor; | |||
XWindowAttributes window_attrs; | |||
int num_formats = 0, j, tag, ret; | |||
AVCodecContext *encctx = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if ( s->nb_streams > 1 | |||
|| encctx->codec_type != AVMEDIA_TYPE_VIDEO | |||
|| encctx->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
|| par->codec_type != AVMEDIA_TYPE_VIDEO | |||
|| par->codec_id != AV_CODEC_ID_RAWVIDEO) { | |||
av_log(s, AV_LOG_ERROR, "Only supports one rawvideo stream\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
if (!(tag = xv_get_tag_from_format(encctx->pix_fmt))) { | |||
if (!(tag = xv_get_tag_from_format(par->format))) { | |||
av_log(s, AV_LOG_ERROR, | |||
"Unsupported pixel format '%s', only yuv420p, uyvy422, yuyv422 are currently supported\n", | |||
av_get_pix_fmt_name(encctx->pix_fmt)); | |||
av_get_pix_fmt_name(par->format)); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
xv->image_format = encctx->pix_fmt; | |||
xv->image_format = par->format; | |||
xv->display = XOpenDisplay(xv->display_name); | |||
if (!xv->display) { | |||
@@ -132,12 +132,12 @@ static int xv_write_header(AVFormatContext *s) | |||
return AVERROR(EINVAL); | |||
} | |||
xv->image_width = encctx->width; | |||
xv->image_height = encctx->height; | |||
xv->image_width = par->width; | |||
xv->image_height = par->height; | |||
if (!xv->window_width && !xv->window_height) { | |||
AVRational sar = encctx->sample_aspect_ratio; | |||
xv->window_width = encctx->width; | |||
xv->window_height = encctx->height; | |||
AVRational sar = par->sample_aspect_ratio; | |||
xv->window_width = par->width; | |||
xv->window_height = par->height; | |||
if (sar.num) { | |||
if (sar.num > sar.den) | |||
xv->window_width = av_rescale(xv->window_width, sar.num, sar.den); | |||
@@ -189,14 +189,14 @@ static int xv_write_header(AVFormatContext *s) | |||
if (j >= num_formats) { | |||
av_log(s, AV_LOG_ERROR, | |||
"Device does not support pixel format %s, aborting\n", | |||
av_get_pix_fmt_name(encctx->pix_fmt)); | |||
av_get_pix_fmt_name(par->format)); | |||
ret = AVERROR(EINVAL); | |||
goto fail; | |||
} | |||
xv->gc = XCreateGC(xv->display, xv->window, 0, 0); | |||
xv->image_width = encctx->width; | |||
xv->image_height = encctx->height; | |||
xv->image_width = par->width; | |||
xv->image_height = par->height; | |||
xv->yuv_image = XvShmCreateImage(xv->display, xv->xv_port, tag, 0, | |||
xv->image_width, xv->image_height, &xv->yuv_shminfo); | |||
xv->yuv_shminfo.shmid = shmget(IPC_PRIVATE, xv->yuv_image->data_size, | |||
@@ -228,11 +228,11 @@ static void compute_display_area(AVFormatContext *s) | |||
XVContext *xv = s->priv_data; | |||
AVRational sar, dar; /* sample and display aspect ratios */ | |||
AVStream *st = s->streams[0]; | |||
AVCodecContext *encctx = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
/* compute overlay width and height from the codec context information */ | |||
sar = st->sample_aspect_ratio.num ? st->sample_aspect_ratio : (AVRational){ 1, 1 }; | |||
dar = av_mul_q(sar, (AVRational){ encctx->width, encctx->height }); | |||
dar = av_mul_q(sar, (AVRational){ par->width, par->height }); | |||
/* we suppose the screen has a 1/1 sample aspect ratio */ | |||
/* fit in the window */ | |||
@@ -321,12 +321,12 @@ static int write_picture(AVFormatContext *s, uint8_t *input_data[4], | |||
static int xv_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVCodecContext *ctx = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
uint8_t *data[4]; | |||
int linesize[4]; | |||
av_image_fill_arrays(data, linesize, pkt->data, ctx->pix_fmt, | |||
ctx->width, ctx->height, 1); | |||
av_image_fill_arrays(data, linesize, pkt->data, par->format, | |||
par->width, par->height, 1); | |||
return write_picture(s, data, linesize); | |||
} | |||
@@ -61,17 +61,17 @@ static int threedostr_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->sample_rate = avio_rb32(s->pb); | |||
st->codec->channels = avio_rb32(s->pb); | |||
if (st->codec->channels <= 0) | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->sample_rate = avio_rb32(s->pb); | |||
st->codecpar->channels = avio_rb32(s->pb); | |||
if (st->codecpar->channels <= 0) | |||
return AVERROR_INVALIDDATA; | |||
codec = avio_rl32(s->pb); | |||
avio_skip(s->pb, 4); | |||
if (ctrl_size == 20 || ctrl_size == 3 || ctrl_size == -1) | |||
st->duration = (avio_rb32(s->pb) - 1) / st->codec->channels; | |||
st->duration = (avio_rb32(s->pb) - 1) / st->codecpar->channels; | |||
else | |||
st->duration = avio_rb32(s->pb) * 16 / st->codec->channels; | |||
st->duration = avio_rb32(s->pb) * 16 / st->codecpar->channels; | |||
size -= 56; | |||
found_shdr = 1; | |||
break; | |||
@@ -95,15 +95,15 @@ static int threedostr_read_header(AVFormatContext *s) | |||
switch (codec) { | |||
case MKTAG('S','D','X','2'): | |||
st->codec->codec_id = AV_CODEC_ID_SDX2_DPCM; | |||
st->codec->block_align = 1 * st->codec->channels; | |||
st->codecpar->codec_id = AV_CODEC_ID_SDX2_DPCM; | |||
st->codecpar->block_align = 1 * st->codecpar->channels; | |||
break; | |||
default: | |||
avpriv_request_sample(s, "codec %X", codec); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -142,7 +142,7 @@ static int threedostr_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
ret = av_get_packet(s->pb, pkt, size); | |||
pkt->pos = pos; | |||
pkt->stream_index = 0; | |||
pkt->duration = size / st->codec->channels; | |||
pkt->duration = size / st->codecpar->channels; | |||
size = 0; | |||
found_ssmp = 1; | |||
break; | |||
@@ -108,16 +108,16 @@ static int parse_vtrk(AVFormatContext *s, | |||
fourxm->video_stream_index = st->index; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_4XM; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_4XM; | |||
st->codec->extradata = av_mallocz(4 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codec->extradata) | |||
st->codecpar->extradata = av_mallocz(4 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codecpar->extradata) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata_size = 4; | |||
AV_WL32(st->codec->extradata, AV_RL32(buf + 16)); | |||
st->codec->width = AV_RL32(buf + 36); | |||
st->codec->height = AV_RL32(buf + 40); | |||
st->codecpar->extradata_size = 4; | |||
AV_WL32(st->codecpar->extradata, AV_RL32(buf + 16)); | |||
st->codecpar->width = AV_RL32(buf + 36); | |||
st->codecpar->height = AV_RL32(buf + 40); | |||
return 0; | |||
} | |||
@@ -173,23 +173,23 @@ static int parse_strk(AVFormatContext *s, | |||
fourxm->tracks[track].stream_index = st->index; | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_tag = 0; | |||
st->codec->channels = fourxm->tracks[track].channels; | |||
st->codec->sample_rate = fourxm->tracks[track].sample_rate; | |||
st->codec->bits_per_coded_sample = fourxm->tracks[track].bits; | |||
st->codec->bit_rate = st->codec->channels * | |||
st->codec->sample_rate * | |||
st->codec->bits_per_coded_sample; | |||
st->codec->block_align = st->codec->channels * | |||
st->codec->bits_per_coded_sample; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_tag = 0; | |||
st->codecpar->channels = fourxm->tracks[track].channels; | |||
st->codecpar->sample_rate = fourxm->tracks[track].sample_rate; | |||
st->codecpar->bits_per_coded_sample = fourxm->tracks[track].bits; | |||
st->codecpar->bit_rate = st->codecpar->channels * | |||
st->codecpar->sample_rate * | |||
st->codecpar->bits_per_coded_sample; | |||
st->codecpar->block_align = st->codecpar->channels * | |||
st->codecpar->bits_per_coded_sample; | |||
if (fourxm->tracks[track].adpcm){ | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_4XM; | |||
} else if (st->codec->bits_per_coded_sample == 8) { | |||
st->codec->codec_id = AV_CODEC_ID_PCM_U8; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_4XM; | |||
} else if (st->codecpar->bits_per_coded_sample == 8) { | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U8; | |||
} else | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
return 0; | |||
} | |||
@@ -26,7 +26,7 @@ | |||
static int a64_write_header(AVFormatContext *s) | |||
{ | |||
AVCodecContext *avctx = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
uint8_t header[5] = { | |||
0x00, //load | |||
0x40, //address | |||
@@ -35,20 +35,20 @@ static int a64_write_header(AVFormatContext *s) | |||
0x00 //fps in 50/fps; | |||
}; | |||
if (avctx->extradata_size < 4) { | |||
if (par->extradata_size < 4) { | |||
av_log(s, AV_LOG_ERROR, "Missing extradata\n"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
switch (avctx->codec_id) { | |||
switch (par->codec_id) { | |||
case AV_CODEC_ID_A64_MULTI: | |||
header[2] = 0x00; | |||
header[3] = AV_RB32(avctx->extradata+0); | |||
header[3] = AV_RB32(par->extradata+0); | |||
header[4] = 2; | |||
break; | |||
case AV_CODEC_ID_A64_MULTI5: | |||
header[2] = 0x01; | |||
header[3] = AV_RB32(avctx->extradata+0); | |||
header[3] = AV_RB32(par->extradata+0); | |||
header[4] = 3; | |||
break; | |||
default: | |||
@@ -84,9 +84,9 @@ static int adts_aac_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = s->iformat->raw_codec_id; | |||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = s->iformat->raw_codec_id; | |||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||
ff_id3v1_read(s); | |||
if (s->pb->seekable && | |||
@@ -173,22 +173,22 @@ static int aa_read_header(AVFormatContext *s) | |||
av_freep(&c->tea_ctx); | |||
return AVERROR(ENOMEM); | |||
} | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
if (!strcmp(codec_name, "mp332")) { | |||
st->codec->codec_id = AV_CODEC_ID_MP3; | |||
st->codec->sample_rate = 22050; | |||
st->codecpar->codec_id = AV_CODEC_ID_MP3; | |||
st->codecpar->sample_rate = 22050; | |||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||
st->start_time = 0; | |||
} else if (!strcmp(codec_name, "acelp85")) { | |||
st->codec->codec_id = AV_CODEC_ID_SIPR; | |||
st->codec->block_align = 19; | |||
st->codec->channels = 1; | |||
st->codec->sample_rate = 8500; | |||
st->codecpar->codec_id = AV_CODEC_ID_SIPR; | |||
st->codecpar->block_align = 19; | |||
st->codecpar->channels = 1; | |||
st->codecpar->sample_rate = 8500; | |||
} else if (!strcmp(codec_name, "acelp16")) { | |||
st->codec->codec_id = AV_CODEC_ID_SIPR; | |||
st->codec->block_align = 20; | |||
st->codec->channels = 1; | |||
st->codec->sample_rate = 16000; | |||
st->codecpar->codec_id = AV_CODEC_ID_SIPR; | |||
st->codecpar->block_align = 20; | |||
st->codecpar->channels = 1; | |||
st->codecpar->sample_rate = 16000; | |||
} | |||
/* determine, and jump to audio start offset */ | |||
@@ -41,24 +41,24 @@ static int acm_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_INTERPLAY_ACM; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_INTERPLAY_ACM; | |||
ff_alloc_extradata(st->codec, 14); | |||
if (!st->codec->extradata) | |||
ff_alloc_extradata(st->codecpar, 14); | |||
if (!st->codecpar->extradata) | |||
return AVERROR(ENOMEM); | |||
ret = avio_read(s->pb, st->codec->extradata, 14); | |||
ret = avio_read(s->pb, st->codecpar->extradata, 14); | |||
if (ret < 10) | |||
return ret < 0 ? ret : AVERROR_EOF; | |||
st->codec->channels = AV_RL16(st->codec->extradata + 8); | |||
st->codec->sample_rate = AV_RL16(st->codec->extradata + 10); | |||
if (st->codec->channels <= 0 || st->codec->sample_rate <= 0) | |||
st->codecpar->channels = AV_RL16(st->codecpar->extradata + 8); | |||
st->codecpar->sample_rate = AV_RL16(st->codecpar->extradata + 10); | |||
if (st->codecpar->channels <= 0 || st->codecpar->sample_rate <= 0) | |||
return AVERROR_INVALIDDATA; | |||
st->start_time = 0; | |||
st->duration = AV_RL32(st->codec->extradata + 4) / st->codec->channels; | |||
st->duration = AV_RL32(st->codecpar->extradata + 4) / st->codecpar->channels; | |||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -75,29 +75,29 @@ static int read_header(AVFormatContext *s) | |||
avio_skip(pb, 16); | |||
size=avio_rl32(pb); | |||
ff_get_wav_header(s, pb, st->codec, size, 0); | |||
ff_get_wav_header(s, pb, st->codecpar, size, 0); | |||
/* | |||
8000Hz (Fine-rec) file format has 10 bytes long | |||
packets with 10ms of sound data in them | |||
*/ | |||
if (st->codec->sample_rate != 8000) { | |||
av_log(s, AV_LOG_ERROR, "Sample rate %d is not supported.\n", st->codec->sample_rate); | |||
if (st->codecpar->sample_rate != 8000) { | |||
av_log(s, AV_LOG_ERROR, "Sample rate %d is not supported.\n", st->codecpar->sample_rate); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
st->codec->frame_size=80; | |||
st->codec->channels=1; | |||
st->codecpar->frame_size=80; | |||
st->codecpar->channels=1; | |||
avpriv_set_pts_info(st, 64, 1, 100); | |||
st->codec->codec_id=AV_CODEC_ID_G729; | |||
st->codecpar->codec_id=AV_CODEC_ID_G729; | |||
avio_seek(pb, 257, SEEK_SET); | |||
msec=avio_rl16(pb); | |||
sec=avio_r8(pb); | |||
min=avio_rl32(pb); | |||
st->duration = av_rescale(1000*(min*60+sec)+msec, st->codec->sample_rate, 1000 * st->codec->frame_size); | |||
st->duration = av_rescale(1000*(min*60+sec)+msec, st->codecpar->sample_rate, 1000 * st->codecpar->frame_size); | |||
ctx->bytes_left_in_chunk=CHUNK_SIZE; | |||
@@ -113,10 +113,10 @@ static int read_packet(AVFormatContext *s, | |||
ACTContext *ctx = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
int ret; | |||
int frame_size=s->streams[0]->codec->sample_rate==8000?10:22; | |||
int frame_size=s->streams[0]->codecpar->sample_rate==8000?10:22; | |||
if(s->streams[0]->codec->sample_rate==8000) | |||
if(s->streams[0]->codecpar->sample_rate==8000) | |||
ret=av_new_packet(pkt, 10); | |||
else | |||
ret=av_new_packet(pkt, 11); | |||
@@ -124,7 +124,7 @@ static int read_packet(AVFormatContext *s, | |||
if(ret) | |||
return ret; | |||
if(s->streams[0]->codec->sample_rate==4400 && !ctx->second_packet) | |||
if(s->streams[0]->codecpar->sample_rate==4400 && !ctx->second_packet) | |||
{ | |||
ret = avio_read(pb, ctx->audio_buffer, frame_size); | |||
@@ -147,7 +147,7 @@ static int read_packet(AVFormatContext *s, | |||
ctx->second_packet=1; | |||
} | |||
else if(s->streams[0]->codec->sample_rate==4400 && ctx->second_packet) | |||
else if(s->streams[0]->codecpar->sample_rate==4400 && ctx->second_packet) | |||
{ | |||
pkt->data[0]=ctx->audio_buffer[5]; | |||
pkt->data[1]=ctx->audio_buffer[17]; | |||
@@ -53,16 +53,16 @@ static int adp_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_DTK; | |||
st->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
st->codec->channels = 2; | |||
st->codec->sample_rate = 48000; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_DTK; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
st->codecpar->channels = 2; | |||
st->codecpar->sample_rate = 48000; | |||
st->start_time = 0; | |||
if (s->pb->seekable) | |||
st->duration = av_get_audio_frame_duration(st->codec, avio_size(s->pb)); | |||
st->duration = av_get_audio_frame_duration2(st->codecpar, avio_size(s->pb)); | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -42,39 +42,39 @@ static int ads_read_header(AVFormatContext *s) | |||
return AVERROR(ENOMEM); | |||
avio_skip(s->pb, 8); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
codec = avio_rl32(s->pb); | |||
st->codec->sample_rate = avio_rl32(s->pb); | |||
if (st->codec->sample_rate <= 0) | |||
st->codecpar->sample_rate = avio_rl32(s->pb); | |||
if (st->codecpar->sample_rate <= 0) | |||
return AVERROR_INVALIDDATA; | |||
st->codec->channels = avio_rl32(s->pb); | |||
if (st->codec->channels <= 0) | |||
st->codecpar->channels = avio_rl32(s->pb); | |||
if (st->codecpar->channels <= 0) | |||
return AVERROR_INVALIDDATA; | |||
align = avio_rl32(s->pb); | |||
if (align <= 0 || align > INT_MAX / st->codec->channels) | |||
if (align <= 0 || align > INT_MAX / st->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
if (codec == 1) | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S16LE_PLANAR; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE_PLANAR; | |||
else | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_PSX; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_PSX; | |||
st->codec->block_align = st->codec->channels * align; | |||
st->codecpar->block_align = st->codecpar->channels * align; | |||
avio_skip(s->pb, 12); | |||
size = avio_rl32(s->pb); | |||
if (st->codec->codec_id == AV_CODEC_ID_ADPCM_PSX) | |||
st->duration = (size - 0x40) / 16 / st->codec->channels * 28; | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
if (st->codecpar->codec_id == AV_CODEC_ID_ADPCM_PSX) | |||
st->duration = (size - 0x40) / 16 / st->codecpar->channels * 28; | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
static int ads_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVCodecContext *codec = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
int ret; | |||
ret = av_get_packet(s->pb, pkt, codec->block_align); | |||
ret = av_get_packet(s->pb, pkt, par->block_align); | |||
pkt->stream_index = 0; | |||
return ret; | |||
} | |||
@@ -97,13 +97,13 @@ static int adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, const ui | |||
static int adts_write_header(AVFormatContext *s) | |||
{ | |||
ADTSContext *adts = s->priv_data; | |||
AVCodecContext *avc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if (adts->id3v2tag) | |||
ff_id3v2_write_simple(s, 4, ID3v2_DEFAULT_MAGIC); | |||
if (avc->extradata_size > 0) | |||
return adts_decode_extradata(s, adts, avc->extradata, | |||
avc->extradata_size); | |||
if (par->extradata_size > 0) | |||
return adts_decode_extradata(s, adts, par->extradata, | |||
par->extradata_size); | |||
return 0; | |||
} | |||
@@ -50,15 +50,15 @@ static int adx_probe(AVProbeData *p) | |||
static int adx_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
ADXDemuxerContext *c = s->priv_data; | |||
AVCodecContext *avctx = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
int ret, size; | |||
if (avctx->channels <= 0) { | |||
av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", avctx->channels); | |||
if (par->channels <= 0) { | |||
av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", par->channels); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
size = BLOCK_SIZE * avctx->channels; | |||
size = BLOCK_SIZE * par->channels; | |||
pkt->pos = avio_tell(s->pb); | |||
pkt->stream_index = 0; | |||
@@ -82,37 +82,37 @@ static int adx_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
static int adx_read_header(AVFormatContext *s) | |||
{ | |||
ADXDemuxerContext *c = s->priv_data; | |||
AVCodecContext *avctx; | |||
AVCodecParameters *par; | |||
AVStream *st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
avctx = s->streams[0]->codec; | |||
par = s->streams[0]->codecpar; | |||
if (avio_rb16(s->pb) != 0x8000) | |||
return AVERROR_INVALIDDATA; | |||
c->header_size = avio_rb16(s->pb) + 4; | |||
avio_seek(s->pb, -4, SEEK_CUR); | |||
if (ff_get_extradata(avctx, s->pb, c->header_size) < 0) | |||
if (ff_get_extradata(par, s->pb, c->header_size) < 0) | |||
return AVERROR(ENOMEM); | |||
if (avctx->extradata_size < 12) { | |||
if (par->extradata_size < 12) { | |||
av_log(s, AV_LOG_ERROR, "Invalid extradata size.\n"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
avctx->channels = AV_RB8(avctx->extradata + 7); | |||
avctx->sample_rate = AV_RB32(avctx->extradata + 8); | |||
par->channels = AV_RB8 (par->extradata + 7); | |||
par->sample_rate = AV_RB32(par->extradata + 8); | |||
if (avctx->channels <= 0) { | |||
av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", avctx->channels); | |||
if (par->channels <= 0) { | |||
av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", par->channels); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = s->iformat->raw_codec_id; | |||
par->codec_type = AVMEDIA_TYPE_AUDIO; | |||
par->codec_id = s->iformat->raw_codec_id; | |||
avpriv_set_pts_info(st, 64, BLOCK_SAMPLES, avctx->sample_rate); | |||
avpriv_set_pts_info(st, 64, BLOCK_SAMPLES, par->sample_rate); | |||
return 0; | |||
} | |||
@@ -67,29 +67,29 @@ static int aea_read_header(AVFormatContext *s) | |||
/* Parse the amount of channels and skip to pos 2048(0x800) */ | |||
avio_skip(s->pb, 264); | |||
st->codec->channels = avio_r8(s->pb); | |||
st->codecpar->channels = avio_r8(s->pb); | |||
avio_skip(s->pb, 1783); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_ATRAC1; | |||
st->codec->sample_rate = 44100; | |||
st->codec->bit_rate = 292000; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ATRAC1; | |||
st->codecpar->sample_rate = 44100; | |||
st->codecpar->bit_rate = 292000; | |||
if (st->codec->channels != 1 && st->codec->channels != 2) { | |||
av_log(s,AV_LOG_ERROR,"Channels %d not supported!\n",st->codec->channels); | |||
if (st->codecpar->channels != 1 && st->codecpar->channels != 2) { | |||
av_log(s, AV_LOG_ERROR, "Channels %d not supported!\n", st->codecpar->channels); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
st->codec->channel_layout = (st->codec->channels == 1) ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; | |||
st->codecpar->channel_layout = (st->codecpar->channels == 1) ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; | |||
st->codec->block_align = AT1_SU_SIZE * st->codec->channels; | |||
st->codecpar->block_align = AT1_SU_SIZE * st->codecpar->channels; | |||
return 0; | |||
} | |||
static int aea_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
int ret = av_get_packet(s->pb, pkt, s->streams[0]->codec->block_align); | |||
int ret = av_get_packet(s->pb, pkt, s->streams[0]->codecpar->block_align); | |||
pkt->stream_index = 0; | |||
if (ret <= 0) | |||
@@ -35,20 +35,20 @@ static int afc_read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_AFC; | |||
st->codec->channels = 2; | |||
st->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_AFC; | |||
st->codecpar->channels = 2; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
if (ff_alloc_extradata(st->codec, 1)) | |||
if (ff_alloc_extradata(st->codecpar, 1)) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata[0] = 8 * st->codec->channels; | |||
st->codecpar->extradata[0] = 8 * st->codecpar->channels; | |||
c->data_end = avio_rb32(s->pb) + 32LL; | |||
st->duration = avio_rb32(s->pb); | |||
st->codec->sample_rate = avio_rb16(s->pb); | |||
st->codecpar->sample_rate = avio_rb16(s->pb); | |||
avio_skip(s->pb, 22); | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -95,7 +95,7 @@ static int get_aiff_header(AVFormatContext *s, int size, | |||
unsigned version) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *codec = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
AIFFInputContext *aiff = s->priv_data; | |||
int exp; | |||
uint64_t val; | |||
@@ -104,10 +104,10 @@ static int get_aiff_header(AVFormatContext *s, int size, | |||
if (size & 1) | |||
size++; | |||
codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
codec->channels = avio_rb16(pb); | |||
par->codec_type = AVMEDIA_TYPE_AUDIO; | |||
par->channels = avio_rb16(pb); | |||
num_frames = avio_rb32(pb); | |||
codec->bits_per_coded_sample = avio_rb16(pb); | |||
par->bits_per_coded_sample = avio_rb16(pb); | |||
exp = avio_rb16(pb) - 16383 - 63; | |||
val = avio_rb64(pb); | |||
@@ -119,29 +119,29 @@ static int get_aiff_header(AVFormatContext *s, int size, | |||
sample_rate = val << exp; | |||
else | |||
sample_rate = (val + (1ULL<<(-exp-1))) >> -exp; | |||
codec->sample_rate = sample_rate; | |||
par->sample_rate = sample_rate; | |||
size -= 18; | |||
/* get codec id for AIFF-C */ | |||
if (size < 4) { | |||
version = AIFF; | |||
} else if (version == AIFF_C_VERSION1) { | |||
codec->codec_tag = avio_rl32(pb); | |||
codec->codec_id = ff_codec_get_id(ff_codec_aiff_tags, codec->codec_tag); | |||
if (codec->codec_id == AV_CODEC_ID_NONE) { | |||
par->codec_tag = avio_rl32(pb); | |||
par->codec_id = ff_codec_get_id(ff_codec_aiff_tags, par->codec_tag); | |||
if (par->codec_id == AV_CODEC_ID_NONE) { | |||
char tag[32]; | |||
av_get_codec_tag_string(tag, sizeof(tag), codec->codec_tag); | |||
av_get_codec_tag_string(tag, sizeof(tag), par->codec_tag); | |||
avpriv_request_sample(s, "unknown or unsupported codec tag: %s", tag); | |||
} | |||
size -= 4; | |||
} | |||
if (version != AIFF_C_VERSION1 || codec->codec_id == AV_CODEC_ID_PCM_S16BE) { | |||
codec->codec_id = aiff_codec_get_id(codec->bits_per_coded_sample); | |||
codec->bits_per_coded_sample = av_get_bits_per_sample(codec->codec_id); | |||
if (version != AIFF_C_VERSION1 || par->codec_id == AV_CODEC_ID_PCM_S16BE) { | |||
par->codec_id = aiff_codec_get_id(par->bits_per_coded_sample); | |||
par->bits_per_coded_sample = av_get_bits_per_sample(par->codec_id); | |||
aiff->block_duration = 1; | |||
} else { | |||
switch (codec->codec_id) { | |||
switch (par->codec_id) { | |||
case AV_CODEC_ID_PCM_F32BE: | |||
case AV_CODEC_ID_PCM_F64BE: | |||
case AV_CODEC_ID_PCM_S16LE: | |||
@@ -150,39 +150,39 @@ static int get_aiff_header(AVFormatContext *s, int size, | |||
aiff->block_duration = 1; | |||
break; | |||
case AV_CODEC_ID_ADPCM_IMA_QT: | |||
codec->block_align = 34*codec->channels; | |||
par->block_align = 34 * par->channels; | |||
break; | |||
case AV_CODEC_ID_MACE3: | |||
codec->block_align = 2*codec->channels; | |||
par->block_align = 2 * par->channels; | |||
break; | |||
case AV_CODEC_ID_ADPCM_G726LE: | |||
codec->bits_per_coded_sample = 5; | |||
par->bits_per_coded_sample = 5; | |||
case AV_CODEC_ID_ADPCM_IMA_WS: | |||
case AV_CODEC_ID_ADPCM_G722: | |||
case AV_CODEC_ID_MACE6: | |||
case AV_CODEC_ID_SDX2_DPCM: | |||
codec->block_align = 1*codec->channels; | |||
par->block_align = 1 * par->channels; | |||
break; | |||
case AV_CODEC_ID_GSM: | |||
codec->block_align = 33; | |||
par->block_align = 33; | |||
break; | |||
default: | |||
aiff->block_duration = 1; | |||
break; | |||
} | |||
if (codec->block_align > 0) | |||
aiff->block_duration = av_get_audio_frame_duration(codec, | |||
codec->block_align); | |||
if (par->block_align > 0) | |||
aiff->block_duration = av_get_audio_frame_duration2(par, | |||
par->block_align); | |||
} | |||
/* Block align needs to be computed in all cases, as the definition | |||
* is specific to applications -> here we use the WAVE format definition */ | |||
if (!codec->block_align) | |||
codec->block_align = (av_get_bits_per_sample(codec->codec_id) * codec->channels) >> 3; | |||
if (!par->block_align) | |||
par->block_align = (av_get_bits_per_sample(par->codec_id) * par->channels) >> 3; | |||
if (aiff->block_duration) { | |||
codec->bit_rate = codec->sample_rate * (codec->block_align << 3) / | |||
aiff->block_duration; | |||
par->bit_rate = par->sample_rate * (par->block_align << 3) / | |||
aiff->block_duration; | |||
} | |||
/* Chunk is over */ | |||
@@ -238,7 +238,7 @@ static int aiff_read_header(AVFormatContext *s) | |||
/* parse different chunks */ | |||
size = get_tag(pb, &tag); | |||
if (size == AVERROR_EOF && offset > 0 && st->codec->block_align) { | |||
if (size == AVERROR_EOF && offset > 0 && st->codecpar->block_align) { | |||
av_log(s, AV_LOG_WARNING, "header parser hit EOF\n"); | |||
goto got_sound; | |||
} | |||
@@ -288,7 +288,7 @@ static int aiff_read_header(AVFormatContext *s) | |||
offset = avio_rb32(pb); /* Offset of sound data */ | |||
avio_rb32(pb); /* BlockSize... don't care */ | |||
offset += avio_tell(pb); /* Compute absolute data offset */ | |||
if (st->codec->block_align && !pb->seekable) /* Assume COMM already parsed */ | |||
if (st->codecpar->block_align && !pb->seekable) /* Assume COMM already parsed */ | |||
goto got_sound; | |||
if (!pb->seekable) { | |||
av_log(s, AV_LOG_ERROR, "file is not seekable\n"); | |||
@@ -299,26 +299,26 @@ static int aiff_read_header(AVFormatContext *s) | |||
case MKTAG('w', 'a', 'v', 'e'): | |||
if ((uint64_t)size > (1<<30)) | |||
return -1; | |||
if (ff_get_extradata(st->codec, pb, size) < 0) | |||
if (ff_get_extradata(st->codecpar, pb, size) < 0) | |||
return AVERROR(ENOMEM); | |||
if (st->codec->codec_id == AV_CODEC_ID_QDM2 && size>=12*4 && !st->codec->block_align) { | |||
st->codec->block_align = AV_RB32(st->codec->extradata+11*4); | |||
aiff->block_duration = AV_RB32(st->codec->extradata+9*4); | |||
} else if (st->codec->codec_id == AV_CODEC_ID_QCELP) { | |||
if (st->codecpar->codec_id == AV_CODEC_ID_QDM2 && size>=12*4 && !st->codecpar->block_align) { | |||
st->codecpar->block_align = AV_RB32(st->codecpar->extradata+11*4); | |||
aiff->block_duration = AV_RB32(st->codecpar->extradata+9*4); | |||
} else if (st->codecpar->codec_id == AV_CODEC_ID_QCELP) { | |||
char rate = 0; | |||
if (size >= 25) | |||
rate = st->codec->extradata[24]; | |||
rate = st->codecpar->extradata[24]; | |||
switch (rate) { | |||
case 'H': // RATE_HALF | |||
st->codec->block_align = 17; | |||
st->codecpar->block_align = 17; | |||
break; | |||
case 'F': // RATE_FULL | |||
default: | |||
st->codec->block_align = 35; | |||
st->codecpar->block_align = 35; | |||
} | |||
aiff->block_duration = 160; | |||
st->codec->bit_rate = st->codec->sample_rate * (st->codec->block_align << 3) / | |||
aiff->block_duration; | |||
st->codecpar->bit_rate = st->codecpar->sample_rate * (st->codecpar->block_align << 3) / | |||
aiff->block_duration; | |||
} | |||
break; | |||
case MKTAG('C','H','A','N'): | |||
@@ -326,7 +326,7 @@ static int aiff_read_header(AVFormatContext *s) | |||
return AVERROR_INVALIDDATA; | |||
break; | |||
case 0: | |||
if (offset > 0 && st->codec->block_align) // COMM && SSND | |||
if (offset > 0 && st->codecpar->block_align) // COMM && SSND | |||
goto got_sound; | |||
default: /* Jump */ | |||
if (size & 1) /* Always even aligned */ | |||
@@ -336,13 +336,13 @@ static int aiff_read_header(AVFormatContext *s) | |||
} | |||
got_sound: | |||
if (!st->codec->block_align) { | |||
if (!st->codecpar->block_align) { | |||
av_log(s, AV_LOG_ERROR, "could not find COMM tag or invalid block_align value\n"); | |||
return -1; | |||
} | |||
/* Now positioned, get the sound data start and end */ | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
st->start_time = 0; | |||
st->duration = st->nb_frames * aiff->block_duration; | |||
@@ -368,26 +368,26 @@ static int aiff_read_packet(AVFormatContext *s, | |||
return AVERROR_EOF; | |||
/* Now for that packet */ | |||
switch (st->codec->codec_id) { | |||
switch (st->codecpar->codec_id) { | |||
case AV_CODEC_ID_ADPCM_IMA_QT: | |||
case AV_CODEC_ID_GSM: | |||
case AV_CODEC_ID_QDM2: | |||
case AV_CODEC_ID_QCELP: | |||
size = st->codec->block_align; | |||
size = st->codecpar->block_align; | |||
break; | |||
default: | |||
size = (MAX_SIZE / st->codec->block_align) * st->codec->block_align; | |||
size = (MAX_SIZE / st->codecpar->block_align) * st->codecpar->block_align; | |||
} | |||
size = FFMIN(max_size, size); | |||
res = av_get_packet(s->pb, pkt, size); | |||
if (res < 0) | |||
return res; | |||
if (size >= st->codec->block_align) | |||
if (size >= st->codecpar->block_align) | |||
pkt->flags &= ~AV_PKT_FLAG_CORRUPT; | |||
/* Only one stream in an AIFF file */ | |||
pkt->stream_index = 0; | |||
pkt->duration = (res / st->codec->block_align) * aiff->block_duration; | |||
pkt->duration = (res / st->codecpar->block_align) * aiff->block_duration; | |||
return 0; | |||
} | |||
@@ -102,16 +102,16 @@ static int aiff_write_header(AVFormatContext *s) | |||
{ | |||
AIFFOutputContext *aiff = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *enc; | |||
AVCodecParameters *par; | |||
uint64_t sample_rate; | |||
int i, aifc = 0; | |||
aiff->audio_stream_idx = -1; | |||
for (i = 0; i < s->nb_streams; i++) { | |||
AVStream *st = s->streams[i]; | |||
if (aiff->audio_stream_idx < 0 && st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (aiff->audio_stream_idx < 0 && st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
aiff->audio_stream_idx = i; | |||
} else if (st->codec->codec_type != AVMEDIA_TYPE_VIDEO) { | |||
} else if (st->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) { | |||
av_log(s, AV_LOG_ERROR, "AIFF allows only one audio stream and a picture.\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
@@ -121,12 +121,12 @@ static int aiff_write_header(AVFormatContext *s) | |||
return AVERROR(EINVAL); | |||
} | |||
enc = s->streams[aiff->audio_stream_idx]->codec; | |||
par = s->streams[aiff->audio_stream_idx]->codecpar; | |||
/* First verify if format is ok */ | |||
if (!enc->codec_tag) | |||
if (!par->codec_tag) | |||
return -1; | |||
if (enc->codec_tag != MKTAG('N','O','N','E')) | |||
if (par->codec_tag != MKTAG('N','O','N','E')) | |||
aifc = 1; | |||
/* FORM AIFF header */ | |||
@@ -136,7 +136,7 @@ static int aiff_write_header(AVFormatContext *s) | |||
ffio_wfourcc(pb, aifc ? "AIFC" : "AIFF"); | |||
if (aifc) { // compressed audio | |||
if (!enc->block_align) { | |||
if (!par->block_align) { | |||
av_log(s, AV_LOG_ERROR, "block align not set\n"); | |||
return -1; | |||
} | |||
@@ -146,10 +146,10 @@ static int aiff_write_header(AVFormatContext *s) | |||
avio_wb32(pb, 0xA2805140); | |||
} | |||
if (enc->channels > 2 && enc->channel_layout) { | |||
if (par->channels > 2 && par->channel_layout) { | |||
ffio_wfourcc(pb, "CHAN"); | |||
avio_wb32(pb, 12); | |||
ff_mov_write_chan(pb, enc->channel_layout); | |||
ff_mov_write_chan(pb, par->channel_layout); | |||
} | |||
put_meta(s, "title", MKTAG('N', 'A', 'M', 'E')); | |||
@@ -160,35 +160,35 @@ static int aiff_write_header(AVFormatContext *s) | |||
/* Common chunk */ | |||
ffio_wfourcc(pb, "COMM"); | |||
avio_wb32(pb, aifc ? 24 : 18); /* size */ | |||
avio_wb16(pb, enc->channels); /* Number of channels */ | |||
avio_wb16(pb, par->channels); /* Number of channels */ | |||
aiff->frames = avio_tell(pb); | |||
avio_wb32(pb, 0); /* Number of frames */ | |||
if (!enc->bits_per_coded_sample) | |||
enc->bits_per_coded_sample = av_get_bits_per_sample(enc->codec_id); | |||
if (!enc->bits_per_coded_sample) { | |||
if (!par->bits_per_coded_sample) | |||
par->bits_per_coded_sample = av_get_bits_per_sample(par->codec_id); | |||
if (!par->bits_per_coded_sample) { | |||
av_log(s, AV_LOG_ERROR, "could not compute bits per sample\n"); | |||
return -1; | |||
} | |||
if (!enc->block_align) | |||
enc->block_align = (enc->bits_per_coded_sample * enc->channels) >> 3; | |||
if (!par->block_align) | |||
par->block_align = (par->bits_per_coded_sample * par->channels) >> 3; | |||
avio_wb16(pb, enc->bits_per_coded_sample); /* Sample size */ | |||
avio_wb16(pb, par->bits_per_coded_sample); /* Sample size */ | |||
sample_rate = av_double2int(enc->sample_rate); | |||
sample_rate = av_double2int(par->sample_rate); | |||
avio_wb16(pb, (sample_rate >> 52) + (16383 - 1023)); | |||
avio_wb64(pb, UINT64_C(1) << 63 | sample_rate << 11); | |||
if (aifc) { | |||
avio_wl32(pb, enc->codec_tag); | |||
avio_wl32(pb, par->codec_tag); | |||
avio_wb16(pb, 0); | |||
} | |||
if (enc->codec_tag == MKTAG('Q','D','M','2') && enc->extradata_size) { | |||
if (par->codec_tag == MKTAG('Q','D','M','2') && par->extradata_size) { | |||
ffio_wfourcc(pb, "wave"); | |||
avio_wb32(pb, enc->extradata_size); | |||
avio_write(pb, enc->extradata, enc->extradata_size); | |||
avio_wb32(pb, par->extradata_size); | |||
avio_write(pb, par->extradata, par->extradata_size); | |||
} | |||
/* Sound data chunk */ | |||
@@ -199,7 +199,7 @@ static int aiff_write_header(AVFormatContext *s) | |||
avio_wb32(pb, 0); /* Block-size (block align) */ | |||
avpriv_set_pts_info(s->streams[aiff->audio_stream_idx], 64, 1, | |||
s->streams[aiff->audio_stream_idx]->codec->sample_rate); | |||
s->streams[aiff->audio_stream_idx]->codecpar->sample_rate); | |||
/* Data is starting here */ | |||
avio_flush(pb); | |||
@@ -217,7 +217,7 @@ static int aiff_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
int ret; | |||
AVPacketList *pict_list, *last; | |||
if (s->streams[pkt->stream_index]->codec->codec_type != AVMEDIA_TYPE_VIDEO) | |||
if (s->streams[pkt->stream_index]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) | |||
return 0; | |||
/* warn only once for each stream */ | |||
@@ -256,7 +256,7 @@ static int aiff_write_trailer(AVFormatContext *s) | |||
AVIOContext *pb = s->pb; | |||
AIFFOutputContext *aiff = s->priv_data; | |||
AVPacketList *pict_list = aiff->pict_list; | |||
AVCodecContext *enc = s->streams[aiff->audio_stream_idx]->codec; | |||
AVCodecParameters *par = s->streams[aiff->audio_stream_idx]->codecpar; | |||
/* Chunks sizes must be even */ | |||
int64_t file_size, end_size; | |||
@@ -269,7 +269,7 @@ static int aiff_write_trailer(AVFormatContext *s) | |||
if (s->pb->seekable) { | |||
/* Number of sample frames */ | |||
avio_seek(pb, aiff->frames, SEEK_SET); | |||
avio_wb32(pb, (file_size-aiff->ssnd-12)/enc->block_align); | |||
avio_wb32(pb, (file_size - aiff->ssnd - 12) / par->block_align); | |||
/* Sound Data chunk size */ | |||
avio_seek(pb, aiff->ssnd, SEEK_SET); | |||
@@ -61,11 +61,11 @@ static int aix_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_ADX; | |||
st->codec->sample_rate = avio_rb32(s->pb); | |||
st->codec->channels = avio_r8(s->pb); | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_ADX; | |||
st->codecpar->sample_rate = avio_rb32(s->pb); | |||
st->codecpar->channels = avio_r8(s->pb); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
avio_skip(s->pb, 3); | |||
} | |||
@@ -77,7 +77,7 @@ static int aix_read_header(AVFormatContext *s) | |||
if (size <= 8) | |||
return AVERROR_INVALIDDATA; | |||
avio_skip(s->pb, 8); | |||
ff_get_extradata(s->streams[i]->codec, s->pb, size - 8); | |||
ff_get_extradata(s->streams[i]->codecpar, s->pb, size - 8); | |||
} | |||
return 0; | |||
@@ -42,13 +42,13 @@ static const char AMRWB_header[] = "#!AMR-WB\n"; | |||
static int amr_write_header(AVFormatContext *s) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
s->priv_data = NULL; | |||
if (enc->codec_id == AV_CODEC_ID_AMR_NB) { | |||
if (par->codec_id == AV_CODEC_ID_AMR_NB) { | |||
avio_write(pb, AMR_header, sizeof(AMR_header) - 1); /* magic number */ | |||
} else if (enc->codec_id == AV_CODEC_ID_AMR_WB) { | |||
} else if (par->codec_id == AV_CODEC_ID_AMR_WB) { | |||
avio_write(pb, AMRWB_header, sizeof(AMRWB_header) - 1); /* magic number */ | |||
} else { | |||
return -1; | |||
@@ -94,25 +94,25 @@ static int amr_read_header(AVFormatContext *s) | |||
return -1; | |||
} | |||
st->codec->codec_tag = MKTAG('s', 'a', 'w', 'b'); | |||
st->codec->codec_id = AV_CODEC_ID_AMR_WB; | |||
st->codec->sample_rate = 16000; | |||
st->codecpar->codec_tag = MKTAG('s', 'a', 'w', 'b'); | |||
st->codecpar->codec_id = AV_CODEC_ID_AMR_WB; | |||
st->codecpar->sample_rate = 16000; | |||
} else { | |||
st->codec->codec_tag = MKTAG('s', 'a', 'm', 'r'); | |||
st->codec->codec_id = AV_CODEC_ID_AMR_NB; | |||
st->codec->sample_rate = 8000; | |||
st->codecpar->codec_tag = MKTAG('s', 'a', 'm', 'r'); | |||
st->codecpar->codec_id = AV_CODEC_ID_AMR_NB; | |||
st->codecpar->sample_rate = 8000; | |||
} | |||
st->codec->channels = 1; | |||
st->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
st->codecpar->channels = 1; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
static int amr_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
int read, size = 0, toc, mode; | |||
int64_t pos = avio_tell(s->pb); | |||
AMRContext *amr = s->priv_data; | |||
@@ -125,13 +125,13 @@ static int amr_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
toc = avio_r8(s->pb); | |||
mode = (toc >> 3) & 0x0F; | |||
if (enc->codec_id == AV_CODEC_ID_AMR_NB) { | |||
if (par->codec_id == AV_CODEC_ID_AMR_NB) { | |||
static const uint8_t packed_size[16] = { | |||
12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 | |||
}; | |||
size = packed_size[mode] + 1; | |||
} else if (enc->codec_id == AV_CODEC_ID_AMR_WB) { | |||
} else if (par->codec_id == AV_CODEC_ID_AMR_WB) { | |||
static const uint8_t packed_size[16] = { | |||
18, 24, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1 | |||
}; | |||
@@ -145,13 +145,13 @@ static int amr_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
if (amr->cumulated_size < UINT64_MAX - size) { | |||
amr->cumulated_size += size; | |||
/* Both AMR formats have 50 frames per second */ | |||
s->streams[0]->codec->bit_rate = amr->cumulated_size / ++amr->block_count * 8 * 50; | |||
s->streams[0]->codecpar->bit_rate = amr->cumulated_size / ++amr->block_count * 8 * 50; | |||
} | |||
pkt->stream_index = 0; | |||
pkt->pos = pos; | |||
pkt->data[0] = toc; | |||
pkt->duration = enc->codec_id == AV_CODEC_ID_AMR_NB ? 160 : 320; | |||
pkt->duration = par->codec_id == AV_CODEC_ID_AMR_NB ? 160 : 320; | |||
read = avio_read(s->pb, pkt->data + 1, size - 1); | |||
if (read != size - 1) { | |||
@@ -100,11 +100,11 @@ static int read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_ANM; | |||
st->codec->codec_tag = 0; /* no fourcc */ | |||
st->codec->width = avio_rl16(pb); | |||
st->codec->height = avio_rl16(pb); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ANM; | |||
st->codecpar->codec_tag = 0; /* no fourcc */ | |||
st->codecpar->width = avio_rl16(pb); | |||
st->codecpar->height = avio_rl16(pb); | |||
if (avio_r8(pb) != 0) | |||
goto invalid; | |||
avio_skip(pb, 1); /* frame rate multiplier info */ | |||
@@ -132,12 +132,12 @@ static int read_header(AVFormatContext *s) | |||
avio_skip(pb, 58); | |||
/* color cycling and palette data */ | |||
st->codec->extradata_size = 16*8 + 4*256; | |||
st->codec->extradata = av_mallocz(st->codec->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codec->extradata) { | |||
st->codecpar->extradata_size = 16*8 + 4*256; | |||
st->codecpar->extradata = av_mallocz(st->codecpar->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codecpar->extradata) { | |||
return AVERROR(ENOMEM); | |||
} | |||
ret = avio_read(pb, st->codec->extradata, st->codec->extradata_size); | |||
ret = avio_read(pb, st->codecpar->extradata, st->codecpar->extradata_size); | |||
if (ret < 0) | |||
return ret; | |||
@@ -46,28 +46,28 @@ static int apc_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_IMA_APC; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_APC; | |||
avio_rl32(pb); /* number of samples */ | |||
st->codec->sample_rate = avio_rl32(pb); | |||
st->codecpar->sample_rate = avio_rl32(pb); | |||
/* initial predictor values for adpcm decoder */ | |||
if (ff_get_extradata(st->codec, pb, 2 * 4) < 0) | |||
if (ff_get_extradata(st->codecpar, pb, 2 * 4) < 0) | |||
return AVERROR(ENOMEM); | |||
if (avio_rl32(pb)) { | |||
st->codec->channels = 2; | |||
st->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
st->codecpar->channels = 2; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
} else { | |||
st->codec->channels = 1; | |||
st->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codecpar->channels = 1; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
} | |||
st->codec->bits_per_coded_sample = 4; | |||
st->codec->bit_rate = st->codec->bits_per_coded_sample * st->codec->channels | |||
* st->codec->sample_rate; | |||
st->codec->block_align = 1; | |||
st->codecpar->bits_per_coded_sample = 4; | |||
st->codecpar->bit_rate = st->codecpar->bits_per_coded_sample * st->codecpar->channels | |||
* st->codecpar->sample_rate; | |||
st->codecpar->block_align = 1; | |||
return 0; | |||
} | |||
@@ -348,23 +348,23 @@ static int ape_read_header(AVFormatContext * s) | |||
total_blocks = (ape->totalframes == 0) ? 0 : ((ape->totalframes - 1) * ape->blocksperframe) + ape->finalframeblocks; | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_APE; | |||
st->codec->codec_tag = MKTAG('A', 'P', 'E', ' '); | |||
st->codec->channels = ape->channels; | |||
st->codec->sample_rate = ape->samplerate; | |||
st->codec->bits_per_coded_sample = ape->bps; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_APE; | |||
st->codecpar->codec_tag = MKTAG('A', 'P', 'E', ' '); | |||
st->codecpar->channels = ape->channels; | |||
st->codecpar->sample_rate = ape->samplerate; | |||
st->codecpar->bits_per_coded_sample = ape->bps; | |||
st->nb_frames = ape->totalframes; | |||
st->start_time = 0; | |||
st->duration = total_blocks; | |||
avpriv_set_pts_info(st, 64, 1, ape->samplerate); | |||
if (ff_alloc_extradata(st->codec, APE_EXTRADATA_SIZE)) | |||
if (ff_alloc_extradata(st->codecpar, APE_EXTRADATA_SIZE)) | |||
return AVERROR(ENOMEM); | |||
AV_WL16(st->codec->extradata + 0, ape->fileversion); | |||
AV_WL16(st->codec->extradata + 2, ape->compressiontype); | |||
AV_WL16(st->codec->extradata + 4, ape->formatflags); | |||
AV_WL16(st->codecpar->extradata + 0, ape->fileversion); | |||
AV_WL16(st->codecpar->extradata + 2, ape->compressiontype); | |||
AV_WL16(st->codecpar->extradata + 4, ape->formatflags); | |||
pts = 0; | |||
for (i = 0; i < ape->totalframes; i++) { | |||
@@ -89,16 +89,16 @@ static int ape_tag_read_field(AVFormatContext *s) | |||
} | |||
st->disposition |= AV_DISPOSITION_ATTACHED_PIC; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = id; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = id; | |||
st->attached_pic = pkt; | |||
st->attached_pic.stream_index = st->index; | |||
st->attached_pic.flags |= AV_PKT_FLAG_KEY; | |||
} else { | |||
if (ff_get_extradata(st->codec, s->pb, size) < 0) | |||
if (ff_get_extradata(st->codecpar, s->pb, size) < 0) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_ATTACHMENT; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_ATTACHMENT; | |||
} | |||
} else { | |||
value = av_malloc(size+1); | |||
@@ -122,9 +122,9 @@ end: | |||
return AVPROBE_SCORE_MAX; | |||
} | |||
static int append_extradata(AVCodecContext *s, AVIOContext *pb, int len) | |||
static int append_extradata(AVCodecParameters *par, AVIOContext *pb, int len) | |||
{ | |||
int previous_size = s->extradata_size; | |||
int previous_size = par->extradata_size; | |||
int new_size, ret; | |||
uint8_t *new_extradata; | |||
@@ -132,13 +132,13 @@ static int append_extradata(AVCodecContext *s, AVIOContext *pb, int len) | |||
return AVERROR_INVALIDDATA; | |||
new_size = previous_size + len; | |||
new_extradata = av_realloc(s->extradata, new_size + AV_INPUT_BUFFER_PADDING_SIZE); | |||
new_extradata = av_realloc(par->extradata, new_size + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!new_extradata) | |||
return AVERROR(ENOMEM); | |||
s->extradata = new_extradata; | |||
s->extradata_size = new_size; | |||
par->extradata = new_extradata; | |||
par->extradata_size = new_size; | |||
if ((ret = avio_read(pb, s->extradata + previous_size, len)) < 0) | |||
if ((ret = avio_read(pb, par->extradata + previous_size, len)) < 0) | |||
return ret; | |||
return previous_size; | |||
@@ -170,23 +170,23 @@ static int apng_read_header(AVFormatContext *s) | |||
/* set the timebase to something large enough (1/100,000 of second) | |||
* to hopefully cope with all sane frame durations */ | |||
avpriv_set_pts_info(st, 64, 1, 100000); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_APNG; | |||
st->codec->width = avio_rb32(pb); | |||
st->codec->height = avio_rb32(pb); | |||
if ((ret = av_image_check_size(st->codec->width, st->codec->height, 0, s)) < 0) | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_APNG; | |||
st->codecpar->width = avio_rb32(pb); | |||
st->codecpar->height = avio_rb32(pb); | |||
if ((ret = av_image_check_size(st->codecpar->width, st->codecpar->height, 0, s)) < 0) | |||
return ret; | |||
/* extradata will contain every chunk up to the first fcTL (excluded) */ | |||
st->codec->extradata = av_malloc(len + 12 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codec->extradata) | |||
st->codecpar->extradata = av_malloc(len + 12 + AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codecpar->extradata) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata_size = len + 12; | |||
AV_WB32(st->codec->extradata, len); | |||
AV_WL32(st->codec->extradata+4, tag); | |||
AV_WB32(st->codec->extradata+8, st->codec->width); | |||
AV_WB32(st->codec->extradata+12, st->codec->height); | |||
if ((ret = avio_read(pb, st->codec->extradata+16, 9)) < 0) | |||
st->codecpar->extradata_size = len + 12; | |||
AV_WB32(st->codecpar->extradata, len); | |||
AV_WL32(st->codecpar->extradata+4, tag); | |||
AV_WB32(st->codecpar->extradata+8, st->codecpar->width); | |||
AV_WB32(st->codecpar->extradata+12, st->codecpar->height); | |||
if ((ret = avio_read(pb, st->codecpar->extradata+16, 9)) < 0) | |||
goto fail; | |||
while (!avio_feof(pb)) { | |||
@@ -218,11 +218,11 @@ static int apng_read_header(AVFormatContext *s) | |||
switch (tag) { | |||
case MKTAG('a', 'c', 'T', 'L'): | |||
if ((ret = avio_seek(pb, -8, SEEK_CUR)) < 0 || | |||
(ret = append_extradata(st->codec, pb, len + 12)) < 0) | |||
(ret = append_extradata(st->codecpar, pb, len + 12)) < 0) | |||
goto fail; | |||
acTL_found = 1; | |||
ctx->num_frames = AV_RB32(st->codec->extradata + ret + 8); | |||
ctx->num_play = AV_RB32(st->codec->extradata + ret + 12); | |||
ctx->num_frames = AV_RB32(st->codecpar->extradata + ret + 8); | |||
ctx->num_play = AV_RB32(st->codecpar->extradata + ret + 12); | |||
av_log(s, AV_LOG_DEBUG, "num_frames: %"PRIu32", num_play: %"PRIu32"\n", | |||
ctx->num_frames, ctx->num_play); | |||
break; | |||
@@ -236,15 +236,15 @@ static int apng_read_header(AVFormatContext *s) | |||
return 0; | |||
default: | |||
if ((ret = avio_seek(pb, -8, SEEK_CUR)) < 0 || | |||
(ret = append_extradata(st->codec, pb, len + 12)) < 0) | |||
(ret = append_extradata(st->codecpar, pb, len + 12)) < 0) | |||
goto fail; | |||
} | |||
} | |||
fail: | |||
if (st->codec->extradata_size) { | |||
av_freep(&st->codec->extradata); | |||
st->codec->extradata_size = 0; | |||
if (st->codecpar->extradata_size) { | |||
av_freep(&st->codecpar->extradata); | |||
st->codecpar->extradata_size = 0; | |||
} | |||
return ret; | |||
} | |||
@@ -298,15 +298,15 @@ static int decode_fctl_chunk(AVFormatContext *s, APNGDemuxContext *ctx, AVPacket | |||
dispose_op, | |||
blend_op); | |||
if (width != s->streams[0]->codec->width || | |||
height != s->streams[0]->codec->height || | |||
if (width != s->streams[0]->codecpar->width || | |||
height != s->streams[0]->codecpar->height || | |||
x_offset != 0 || | |||
y_offset != 0) { | |||
if (sequence_number == 0 || | |||
x_offset >= s->streams[0]->codec->width || | |||
width > s->streams[0]->codec->width - x_offset || | |||
y_offset >= s->streams[0]->codec->height || | |||
height > s->streams[0]->codec->height - y_offset) | |||
x_offset >= s->streams[0]->codecpar->width || | |||
width > s->streams[0]->codecpar->width - x_offset || | |||
y_offset >= s->streams[0]->codecpar->height || | |||
height > s->streams[0]->codecpar->height - y_offset) | |||
return AVERROR_INVALIDDATA; | |||
ctx->is_key_frame = 0; | |||
} else { | |||
@@ -400,7 +400,7 @@ static int apng_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
avio_seek(pb, -8, SEEK_CUR); | |||
return AVERROR_EOF; | |||
} | |||
if ((ret = avio_seek(pb, s->streams[0]->codec->extradata_size + 8, SEEK_SET)) < 0) | |||
if ((ret = avio_seek(pb, s->streams[0]->codecpar->extradata_size + 8, SEEK_SET)) < 0) | |||
return ret; | |||
return 0; | |||
default: | |||
@@ -80,8 +80,8 @@ static int apng_write_header(AVFormatContext *format_context) | |||
APNGMuxContext *apng = format_context->priv_data; | |||
if (format_context->nb_streams != 1 || | |||
format_context->streams[0]->codec->codec_type != AVMEDIA_TYPE_VIDEO || | |||
format_context->streams[0]->codec->codec_id != AV_CODEC_ID_APNG) { | |||
format_context->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO || | |||
format_context->streams[0]->codecpar->codec_id != AV_CODEC_ID_APNG) { | |||
av_log(format_context, AV_LOG_ERROR, | |||
"APNG muxer supports only a single video APNG stream.\n"); | |||
return AVERROR(EINVAL); | |||
@@ -106,7 +106,7 @@ static void flush_packet(AVFormatContext *format_context, AVPacket *packet) | |||
APNGMuxContext *apng = format_context->priv_data; | |||
AVIOContext *io_context = format_context->pb; | |||
AVStream *codec_stream = format_context->streams[0]; | |||
AVCodecContext *codec_context = codec_stream->codec; | |||
AVCodecParameters *codec_par = codec_stream->codecpar; | |||
av_assert0(apng->prev_packet); | |||
@@ -117,13 +117,13 @@ static void flush_packet(AVFormatContext *format_context, AVPacket *packet) | |||
av_log(format_context, AV_LOG_INFO, "Only a single frame so saving as a normal PNG.\n"); | |||
// Write normal PNG headers without acTL chunk | |||
existing_acTL_chunk = apng_find_chunk(MKBETAG('a', 'c', 'T', 'L'), codec_context->extradata, codec_context->extradata_size); | |||
existing_acTL_chunk = apng_find_chunk(MKBETAG('a', 'c', 'T', 'L'), codec_par->extradata, codec_par->extradata_size); | |||
if (existing_acTL_chunk) { | |||
uint8_t *chunk_after_acTL = existing_acTL_chunk + AV_RB32(existing_acTL_chunk) + 12; | |||
avio_write(io_context, codec_context->extradata, existing_acTL_chunk - codec_context->extradata); | |||
avio_write(io_context, chunk_after_acTL, codec_context->extradata + codec_context->extradata_size - chunk_after_acTL); | |||
avio_write(io_context, codec_par->extradata, existing_acTL_chunk - codec_par->extradata); | |||
avio_write(io_context, chunk_after_acTL, codec_par->extradata + codec_par->extradata_size - chunk_after_acTL); | |||
} else { | |||
avio_write(io_context, codec_context->extradata, codec_context->extradata_size); | |||
avio_write(io_context, codec_par->extradata, codec_par->extradata_size); | |||
} | |||
// Write frame data without fcTL chunk | |||
@@ -142,9 +142,9 @@ static void flush_packet(AVFormatContext *format_context, AVPacket *packet) | |||
uint8_t *existing_acTL_chunk; | |||
// Write normal PNG headers | |||
avio_write(io_context, codec_context->extradata, codec_context->extradata_size); | |||
avio_write(io_context, codec_par->extradata, codec_par->extradata_size); | |||
existing_acTL_chunk = apng_find_chunk(MKBETAG('a', 'c', 'T', 'L'), codec_context->extradata, codec_context->extradata_size); | |||
existing_acTL_chunk = apng_find_chunk(MKBETAG('a', 'c', 'T', 'L'), codec_par->extradata, codec_par->extradata_size); | |||
if (!existing_acTL_chunk) { | |||
uint8_t buf[8]; | |||
// Write animation control header | |||
@@ -58,8 +58,8 @@ static int aqt_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
avpriv_set_pts_info(st, 64, aqt->frame_rate.den, aqt->frame_rate.num); | |||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codec->codec_id = AV_CODEC_ID_TEXT; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codecpar->codec_id = AV_CODEC_ID_TEXT; | |||
while (!avio_feof(s->pb)) { | |||
char line[4096]; | |||
@@ -281,8 +281,8 @@ static int asf_read_picture(AVFormatContext *s, int len) | |||
goto fail; | |||
} | |||
st->disposition |= AV_DISPOSITION_ATTACHED_PIC; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = id; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = id; | |||
st->attached_pic = pkt; | |||
st->attached_pic.stream_index = st->index; | |||
st->attached_pic.flags |= AV_PKT_FLAG_KEY; | |||
@@ -436,7 +436,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) | |||
type = AVMEDIA_TYPE_VIDEO; | |||
} else if (!ff_guidcmp(&g, &ff_asf_jfif_media)) { | |||
type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_MJPEG; | |||
st->codecpar->codec_id = AV_CODEC_ID_MJPEG; | |||
} else if (!ff_guidcmp(&g, &ff_asf_command_stream)) { | |||
type = AVMEDIA_TYPE_DATA; | |||
} else if (!ff_guidcmp(&g, &ff_asf_ext_stream_embed_stream_header)) { | |||
@@ -470,18 +470,18 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) | |||
} | |||
} | |||
st->codec->codec_type = type; | |||
st->codecpar->codec_type = type; | |||
if (type == AVMEDIA_TYPE_AUDIO) { | |||
int ret = ff_get_wav_header(s, pb, st->codec, type_specific_size, 0); | |||
int ret = ff_get_wav_header(s, pb, st->codecpar, type_specific_size, 0); | |||
if (ret < 0) | |||
return ret; | |||
if (is_dvr_ms_audio) { | |||
// codec_id and codec_tag are unreliable in dvr_ms | |||
// files. Set them later by probing stream. | |||
st->request_probe = 1; | |||
st->codec->codec_tag = 0; | |||
st->codecpar->codec_tag = 0; | |||
} | |||
if (st->codec->codec_id == AV_CODEC_ID_AAC) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC) | |||
st->need_parsing = AVSTREAM_PARSE_NONE; | |||
else | |||
st->need_parsing = AVSTREAM_PARSE_FULL; | |||
@@ -507,52 +507,52 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) | |||
avio_r8(pb); | |||
avio_rl16(pb); /* size */ | |||
sizeX = avio_rl32(pb); /* size */ | |||
st->codec->width = avio_rl32(pb); | |||
st->codec->height = avio_rl32(pb); | |||
st->codecpar->width = avio_rl32(pb); | |||
st->codecpar->height = avio_rl32(pb); | |||
/* not available for asf */ | |||
avio_rl16(pb); /* panes */ | |||
st->codec->bits_per_coded_sample = avio_rl16(pb); /* depth */ | |||
st->codecpar->bits_per_coded_sample = avio_rl16(pb); /* depth */ | |||
tag1 = avio_rl32(pb); | |||
avio_skip(pb, 20); | |||
if (sizeX > 40) { | |||
st->codec->extradata_size = ffio_limit(pb, sizeX - 40); | |||
st->codec->extradata = av_mallocz(st->codec->extradata_size + | |||
st->codecpar->extradata_size = ffio_limit(pb, sizeX - 40); | |||
st->codecpar->extradata = av_mallocz(st->codecpar->extradata_size + | |||
AV_INPUT_BUFFER_PADDING_SIZE); | |||
if (!st->codec->extradata) | |||
if (!st->codecpar->extradata) | |||
return AVERROR(ENOMEM); | |||
avio_read(pb, st->codec->extradata, st->codec->extradata_size); | |||
avio_read(pb, st->codecpar->extradata, st->codecpar->extradata_size); | |||
} | |||
/* Extract palette from extradata if bpp <= 8 */ | |||
/* This code assumes that extradata contains only palette */ | |||
/* This is true for all paletted codecs implemented in libavcodec */ | |||
if (st->codec->extradata_size && (st->codec->bits_per_coded_sample <= 8)) { | |||
if (st->codecpar->extradata_size && (st->codecpar->bits_per_coded_sample <= 8)) { | |||
#if HAVE_BIGENDIAN | |||
int i; | |||
for (i = 0; i < FFMIN(st->codec->extradata_size, AVPALETTE_SIZE) / 4; i++) | |||
asf_st->palette[i] = av_bswap32(((uint32_t *)st->codec->extradata)[i]); | |||
for (i = 0; i < FFMIN(st->codecpar->extradata_size, AVPALETTE_SIZE) / 4; i++) | |||
asf_st->palette[i] = av_bswap32(((uint32_t *)st->codecpar->extradata)[i]); | |||
#else | |||
memcpy(asf_st->palette, st->codec->extradata, | |||
FFMIN(st->codec->extradata_size, AVPALETTE_SIZE)); | |||
memcpy(asf_st->palette, st->codecpar->extradata, | |||
FFMIN(st->codecpar->extradata_size, AVPALETTE_SIZE)); | |||
#endif | |||
asf_st->palette_changed = 1; | |||
} | |||
st->codec->codec_tag = tag1; | |||
st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag1); | |||
st->codecpar->codec_tag = tag1; | |||
st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag1); | |||
if (tag1 == MKTAG('D', 'V', 'R', ' ')) { | |||
st->need_parsing = AVSTREAM_PARSE_FULL; | |||
/* issue658 contains wrong w/h and MS even puts a fake seq header | |||
* with wrong w/h in extradata while a correct one is in the stream. | |||
* maximum lameness */ | |||
st->codec->width = | |||
st->codec->height = 0; | |||
av_freep(&st->codec->extradata); | |||
st->codec->extradata_size = 0; | |||
st->codecpar->width = | |||
st->codecpar->height = 0; | |||
av_freep(&st->codecpar->extradata); | |||
st->codecpar->extradata_size = 0; | |||
} | |||
if (st->codec->codec_id == AV_CODEC_ID_H264) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_H264) | |||
st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; | |||
if (st->codec->codec_id == AV_CODEC_ID_MPEG4) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4) | |||
st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; | |||
} | |||
pos2 = avio_tell(pb); | |||
@@ -890,21 +890,21 @@ static int asf_read_header(AVFormatContext *s) | |||
int stream_num = asf->asfid2avid[i]; | |||
if (stream_num >= 0) { | |||
AVStream *st = s->streams[stream_num]; | |||
if (!st->codec->bit_rate) | |||
st->codec->bit_rate = asf->stream_bitrates[i]; | |||
if (!st->codecpar->bit_rate) | |||
st->codecpar->bit_rate = asf->stream_bitrates[i]; | |||
if (asf->dar[i].num > 0 && asf->dar[i].den > 0) { | |||
av_reduce(&st->sample_aspect_ratio.num, | |||
&st->sample_aspect_ratio.den, | |||
asf->dar[i].num, asf->dar[i].den, INT_MAX); | |||
} else if ((asf->dar[0].num > 0) && (asf->dar[0].den > 0) && | |||
// Use ASF container value if the stream doesn't set AR. | |||
(st->codec->codec_type == AVMEDIA_TYPE_VIDEO)) | |||
(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)) | |||
av_reduce(&st->sample_aspect_ratio.num, | |||
&st->sample_aspect_ratio.den, | |||
asf->dar[0].num, asf->dar[0].den, INT_MAX); | |||
av_log(s, AV_LOG_TRACE, "i=%d, st->codec->codec_type:%d, asf->dar %d:%d sar=%d:%d\n", | |||
i, st->codec->codec_type, asf->dar[i].num, asf->dar[i].den, | |||
av_log(s, AV_LOG_TRACE, "i=%d, st->codecpar->codec_type:%d, asf->dar %d:%d sar=%d:%d\n", | |||
i, st->codecpar->codec_type, asf->dar[i].num, asf->dar[i].den, | |||
st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); | |||
// copy and convert language codes to the frontend | |||
@@ -1316,9 +1316,9 @@ static int asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pkt) | |||
av_log(asf, AV_LOG_TRACE, "new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n", | |||
asf->stream_index, asf->packet_key_frame, | |||
asf_st->pkt.flags & AV_PKT_FLAG_KEY, | |||
s->streams[asf->stream_index]->codec->codec_type == AVMEDIA_TYPE_AUDIO, | |||
s->streams[asf->stream_index]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO, | |||
asf_st->packet_obj_size); | |||
if (s->streams[asf->stream_index]->codec->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (s->streams[asf->stream_index]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) | |||
asf->packet_key_frame = 1; | |||
if (asf->packet_key_frame) | |||
asf_st->pkt.flags |= AV_PKT_FLAG_KEY; | |||
@@ -1371,7 +1371,7 @@ static int asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pkt) | |||
/* test if whole packet is read */ | |||
if (asf_st->frag_offset == asf_st->pkt.size) { | |||
// workaround for macroshit radio DVR-MS files | |||
if (s->streams[asf->stream_index]->codec->codec_id == AV_CODEC_ID_MPEG2VIDEO && | |||
if (s->streams[asf->stream_index]->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO && | |||
asf_st->pkt.size > 100) { | |||
int i; | |||
for (i = 0; i < asf_st->pkt.size && !asf_st->pkt.data[i]; i++) | |||
@@ -1492,7 +1492,7 @@ static void skip_to_key(AVFormatContext *s) | |||
for (i = 0; i < 128; i++) { | |||
int j = asf->asfid2avid[i]; | |||
ASFStream *asf_st = &asf->streams[i]; | |||
if (j < 0 || s->streams[j]->codec->codec_type != AVMEDIA_TYPE_VIDEO) | |||
if (j < 0 || s->streams[j]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) | |||
continue; | |||
asf_st->skip_to_key = 1; | |||
@@ -431,8 +431,8 @@ static int asf_read_picture(AVFormatContext *s, int len) | |||
} | |||
st->disposition |= AV_DISPOSITION_ATTACHED_PIC; | |||
st->codec->codec_type = asf_st->type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = id; | |||
st->codecpar->codec_type = asf_st->type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = id; | |||
st->attached_pic = pkt; | |||
st->attached_pic.stream_index = asf_st->index = st->index; | |||
st->attached_pic.flags |= AV_PKT_FLAG_KEY; | |||
@@ -695,26 +695,26 @@ static int parse_video_info(AVIOContext *pb, AVStream *st) | |||
uint16_t size; | |||
unsigned int tag; | |||
st->codec->width = avio_rl32(pb); | |||
st->codec->height = avio_rl32(pb); | |||
st->codecpar->width = avio_rl32(pb); | |||
st->codecpar->height = avio_rl32(pb); | |||
avio_skip(pb, 1); // skip reserved flags | |||
size = avio_rl16(pb); // size of the Format Data | |||
tag = ff_get_bmp_header(pb, st, NULL); | |||
st->codec->codec_tag = tag; | |||
st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag); | |||
st->codecpar->codec_tag = tag; | |||
st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag); | |||
if (size > BMP_HEADER_SIZE) { | |||
int ret; | |||
st->codec->extradata_size = size - BMP_HEADER_SIZE; | |||
if (!(st->codec->extradata = av_malloc(st->codec->extradata_size + | |||
st->codecpar->extradata_size = size - BMP_HEADER_SIZE; | |||
if (!(st->codecpar->extradata = av_malloc(st->codecpar->extradata_size + | |||
AV_INPUT_BUFFER_PADDING_SIZE))) { | |||
st->codec->extradata_size = 0; | |||
st->codecpar->extradata_size = 0; | |||
return AVERROR(ENOMEM); | |||
} | |||
memset(st->codec->extradata + st->codec->extradata_size , 0, | |||
memset(st->codecpar->extradata + st->codecpar->extradata_size , 0, | |||
AV_INPUT_BUFFER_PADDING_SIZE); | |||
if ((ret = avio_read(pb, st->codec->extradata, | |||
st->codec->extradata_size)) < 0) | |||
if ((ret = avio_read(pb, st->codecpar->extradata, | |||
st->codecpar->extradata_size)) < 0) | |||
return ret; | |||
} | |||
return 0; | |||
@@ -773,7 +773,7 @@ static int asf_read_stream_properties(AVFormatContext *s, const GUIDParseTable * | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
avpriv_set_pts_info(st, 32, 1, 1000); // pts should be dword, in milliseconds | |||
st->codec->codec_type = type; | |||
st->codecpar->codec_type = type; | |||
asf->asf_st[asf->nb_streams] = av_mallocz(sizeof(*asf_st)); | |||
if (!asf->asf_st[asf->nb_streams]) | |||
return AVERROR(ENOMEM); | |||
@@ -790,7 +790,7 @@ static int asf_read_stream_properties(AVFormatContext *s, const GUIDParseTable * | |||
switch (type) { | |||
case AVMEDIA_TYPE_AUDIO: | |||
asf_st->type = AVMEDIA_TYPE_AUDIO; | |||
if ((ret = ff_get_wav_header(s, pb, st->codec, ts_data_len, 0)) < 0) | |||
if ((ret = ff_get_wav_header(s, pb, st->codecpar, ts_data_len, 0)) < 0) | |||
return ret; | |||
break; | |||
case AVMEDIA_TYPE_VIDEO: | |||
@@ -867,7 +867,7 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, const GUIDParseTab | |||
if (st) { | |||
st->start_time = start_time; | |||
st->duration = end_time - start_time; | |||
st->codec->bit_rate = bitrate; | |||
st->codecpar->bit_rate = bitrate; | |||
st->avg_frame_rate.num = 10000000; | |||
st->avg_frame_rate.den = time_per_frame; | |||
} | |||
@@ -392,7 +392,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
int header_size, n, extra_size, extra_size2, wav_extra_size; | |||
int has_title, has_aspect_ratio = 0; | |||
int metadata_count; | |||
AVCodecContext *enc; | |||
AVCodecParameters *par; | |||
int64_t header_offset, cur_pos, hpos; | |||
int bit_rate; | |||
int64_t duration; | |||
@@ -419,14 +419,14 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
bit_rate = 0; | |||
for (n = 0; n < s->nb_streams; n++) { | |||
AVDictionaryEntry *entry; | |||
enc = s->streams[n]->codec; | |||
par = s->streams[n]->codecpar; | |||
avpriv_set_pts_info(s->streams[n], 32, 1, 1000); /* 32 bit pts in ms */ | |||
bit_rate += enc->bit_rate; | |||
if ( enc->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& enc->sample_aspect_ratio.num > 0 | |||
&& enc->sample_aspect_ratio.den > 0) | |||
bit_rate += par->bit_rate; | |||
if ( par->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& par->sample_aspect_ratio.num > 0 | |||
&& par->sample_aspect_ratio.den > 0) | |||
has_aspect_ratio++; | |||
entry = av_dict_get(s->streams[n]->metadata, "language", NULL, 0); | |||
@@ -445,7 +445,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
asf->streams[n].stream_language_index = asf->nb_languages; | |||
asf->nb_languages++; | |||
} | |||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) | |||
audio_language_counts[asf->streams[n].stream_language_index]++; | |||
} | |||
} else { | |||
@@ -509,7 +509,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
if (audio_language_counts[i]) { | |||
avio_wl16(pb, audio_language_counts[i]); | |||
for (n = 0; n < s->nb_streams; n++) | |||
if (asf->streams[n].stream_language_index == i && s->streams[n]->codec->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (asf->streams[n].stream_language_index == i && s->streams[n]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) | |||
avio_wl16(pb, n + 1); | |||
} | |||
} | |||
@@ -523,10 +523,10 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
es_pos = put_header(pb, &ff_asf_extended_stream_properties_object); | |||
avio_wl64(pb, 0); /* start time */ | |||
avio_wl64(pb, 0); /* end time */ | |||
avio_wl32(pb, s->streams[n]->codec->bit_rate); /* data bitrate bps */ | |||
avio_wl32(pb, s->streams[n]->codecpar->bit_rate); /* data bitrate bps */ | |||
avio_wl32(pb, 5000); /* buffer size ms */ | |||
avio_wl32(pb, 0); /* initial buffer fullness */ | |||
avio_wl32(pb, s->streams[n]->codec->bit_rate); /* peak data bitrate */ | |||
avio_wl32(pb, s->streams[n]->codecpar->bit_rate); /* peak data bitrate */ | |||
avio_wl32(pb, 5000); /* maximum buffer size ms */ | |||
avio_wl32(pb, 0); /* max initial buffer fullness */ | |||
avio_wl32(pb, 0); /* max object size */ | |||
@@ -544,11 +544,11 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
hpos2 = put_header(pb, &ff_asf_metadata_header); | |||
avio_wl16(pb, 2 * has_aspect_ratio); | |||
for (n = 0; n < s->nb_streams; n++) { | |||
enc = s->streams[n]->codec; | |||
if ( enc->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& enc->sample_aspect_ratio.num > 0 | |||
&& enc->sample_aspect_ratio.den > 0) { | |||
AVRational sar = enc->sample_aspect_ratio; | |||
par = s->streams[n]->codecpar; | |||
if ( par->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& par->sample_aspect_ratio.num > 0 | |||
&& par->sample_aspect_ratio.den > 0) { | |||
AVRational sar = par->sample_aspect_ratio; | |||
avio_wl16(pb, 0); | |||
// the stream number is set like this below | |||
avio_wl16(pb, n + 1); | |||
@@ -620,11 +620,11 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
int64_t es_pos; | |||
// ASFStream *stream = &asf->streams[n]; | |||
enc = s->streams[n]->codec; | |||
par = s->streams[n]->codecpar; | |||
asf->streams[n].num = n + 1; | |||
asf->streams[n].seq = 1; | |||
switch (enc->codec_type) { | |||
switch (par->codec_type) { | |||
case AVMEDIA_TYPE_AUDIO: | |||
wav_extra_size = 0; | |||
extra_size = 18 + wav_extra_size; | |||
@@ -632,14 +632,14 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
break; | |||
default: | |||
case AVMEDIA_TYPE_VIDEO: | |||
wav_extra_size = enc->extradata_size; | |||
wav_extra_size = par->extradata_size; | |||
extra_size = 0x33 + wav_extra_size; | |||
extra_size2 = 0; | |||
break; | |||
} | |||
hpos = put_header(pb, &ff_asf_stream_header); | |||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
ff_put_guid(pb, &ff_asf_audio_stream); | |||
ff_put_guid(pb, &ff_asf_audio_conceal_spread); | |||
} else { | |||
@@ -653,9 +653,9 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
avio_wl16(pb, n + 1); /* stream number */ | |||
avio_wl32(pb, 0); /* ??? */ | |||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
/* WAVEFORMATEX header */ | |||
int wavsize = ff_put_wav_header(pb, enc, FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX); | |||
int wavsize = ff_put_wav_header(s, pb, par, FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX); | |||
if (wavsize < 0) | |||
return -1; | |||
@@ -667,23 +667,23 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
} | |||
/* ERROR Correction */ | |||
avio_w8(pb, 0x01); | |||
if (enc->codec_id == AV_CODEC_ID_ADPCM_G726 || !enc->block_align) { | |||
if (par->codec_id == AV_CODEC_ID_ADPCM_G726 || !par->block_align) { | |||
avio_wl16(pb, 0x0190); | |||
avio_wl16(pb, 0x0190); | |||
} else { | |||
avio_wl16(pb, enc->block_align); | |||
avio_wl16(pb, enc->block_align); | |||
avio_wl16(pb, par->block_align); | |||
avio_wl16(pb, par->block_align); | |||
} | |||
avio_wl16(pb, 0x01); | |||
avio_w8(pb, 0x00); | |||
} else { | |||
avio_wl32(pb, enc->width); | |||
avio_wl32(pb, enc->height); | |||
avio_wl32(pb, par->width); | |||
avio_wl32(pb, par->height); | |||
avio_w8(pb, 2); /* ??? */ | |||
avio_wl16(pb, 40 + enc->extradata_size); /* size */ | |||
avio_wl16(pb, 40 + par->extradata_size); /* size */ | |||
/* BITMAPINFOHEADER header */ | |||
ff_put_bmp_header(pb, enc, ff_codec_bmp_tags, 1, 0); | |||
ff_put_bmp_header(pb, par, ff_codec_bmp_tags, 1, 0); | |||
} | |||
end_header(pb, hpos); | |||
} | |||
@@ -697,17 +697,17 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
const AVCodecDescriptor *codec_desc; | |||
const char *desc; | |||
enc = s->streams[n]->codec; | |||
codec_desc = avcodec_descriptor_get(enc->codec_id); | |||
par = s->streams[n]->codecpar; | |||
codec_desc = avcodec_descriptor_get(par->codec_id); | |||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) | |||
avio_wl16(pb, 2); | |||
else if (enc->codec_type == AVMEDIA_TYPE_VIDEO) | |||
else if (par->codec_type == AVMEDIA_TYPE_VIDEO) | |||
avio_wl16(pb, 1); | |||
else | |||
avio_wl16(pb, -1); | |||
if (enc->codec_id == AV_CODEC_ID_WMAV2) | |||
if (par->codec_id == AV_CODEC_ID_WMAV2) | |||
desc = "Windows Media Audio V8"; | |||
else | |||
desc = codec_desc ? codec_desc->name : NULL; | |||
@@ -732,14 +732,14 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, | |||
avio_wl16(pb, 0); /* no parameters */ | |||
/* id */ | |||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
avio_wl16(pb, 2); | |||
avio_wl16(pb, enc->codec_tag); | |||
avio_wl16(pb, par->codec_tag); | |||
} else { | |||
avio_wl16(pb, 4); | |||
avio_wl32(pb, enc->codec_tag); | |||
avio_wl32(pb, par->codec_tag); | |||
} | |||
if (!enc->codec_tag) | |||
if (!par->codec_tag) | |||
return -1; | |||
} | |||
end_header(pb, hpos); | |||
@@ -963,7 +963,7 @@ static void put_frame(AVFormatContext *s, ASFStream *stream, AVStream *avst, | |||
PACKET_HEADER_MIN_SIZE - 1; | |||
if (frag_len1 < payload_len && | |||
avst->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
avst->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
flush_packet(s); | |||
continue; | |||
} | |||
@@ -1053,7 +1053,7 @@ static int asf_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
ASFContext *asf = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
ASFStream *stream; | |||
AVCodecContext *codec; | |||
AVCodecParameters *par; | |||
uint32_t packet_number; | |||
int64_t pts; | |||
int start_sec; | |||
@@ -1061,10 +1061,10 @@ static int asf_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
int ret; | |||
uint64_t offset = avio_tell(pb); | |||
codec = s->streams[pkt->stream_index]->codec; | |||
par = s->streams[pkt->stream_index]->codecpar; | |||
stream = &asf->streams[pkt->stream_index]; | |||
if (codec->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) | |||
flags &= ~AV_PKT_FLAG_KEY; | |||
pts = (pkt->pts != AV_NOPTS_VALUE) ? pkt->pts : pkt->dts; | |||
@@ -121,8 +121,8 @@ static int ass_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
avpriv_set_pts_info(st, 64, 1, 100); | |||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codec->codec_id = AV_CODEC_ID_ASS; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codecpar->codec_id = AV_CODEC_ID_ASS; | |||
av_bprint_init(&header, 0, AV_BPRINT_SIZE_UNLIMITED); | |||
av_bprint_init(&line, 0, AV_BPRINT_SIZE_UNLIMITED); | |||
@@ -153,7 +153,7 @@ static int ass_read_header(AVFormatContext *s) | |||
sub->duration = duration; | |||
} | |||
res = avpriv_bprint_to_extradata(st->codec, &header); | |||
res = ff_bprint_to_codecpar_extradata(st->codecpar, &header); | |||
if (res < 0) | |||
goto end; | |||
@@ -46,16 +46,16 @@ typedef struct ASSContext { | |||
static int write_header(AVFormatContext *s) | |||
{ | |||
ASSContext *ass = s->priv_data; | |||
AVCodecContext *avctx = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if (s->nb_streams != 1 || avctx->codec_id != AV_CODEC_ID_ASS) { | |||
if (s->nb_streams != 1 || par->codec_id != AV_CODEC_ID_ASS) { | |||
av_log(s, AV_LOG_ERROR, "Exactly one ASS/SSA stream is needed.\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
avpriv_set_pts_info(s->streams[0], 64, 1, 100); | |||
if (avctx->extradata_size > 0) { | |||
size_t header_size = avctx->extradata_size; | |||
uint8_t *trailer = strstr(avctx->extradata, "\n[Events]"); | |||
if (par->extradata_size > 0) { | |||
size_t header_size = par->extradata_size; | |||
uint8_t *trailer = strstr(par->extradata, "\n[Events]"); | |||
if (trailer) | |||
trailer = strstr(trailer, "Format:"); | |||
@@ -63,17 +63,17 @@ static int write_header(AVFormatContext *s) | |||
trailer = strstr(trailer, "\n"); | |||
if (trailer++) { | |||
header_size = (trailer - avctx->extradata); | |||
ass->trailer_size = avctx->extradata_size - header_size; | |||
header_size = (trailer - par->extradata); | |||
ass->trailer_size = par->extradata_size - header_size; | |||
if (ass->trailer_size) | |||
ass->trailer = trailer; | |||
} | |||
avio_write(s->pb, avctx->extradata, header_size); | |||
if (avctx->extradata[header_size - 1] != '\n') | |||
avio_write(s->pb, par->extradata, header_size); | |||
if (par->extradata[header_size - 1] != '\n') | |||
avio_write(s->pb, "\r\n", 2); | |||
ass->ssa_mode = !strstr(avctx->extradata, "\n[V4+ Styles]"); | |||
if (!strstr(avctx->extradata, "\n[Events]")) | |||
ass->ssa_mode = !strstr(par->extradata, "\n[V4+ Styles]"); | |||
if (!strstr(par->extradata, "\n[Events]")) | |||
avio_printf(s->pb, "[Events]\r\nFormat: %s, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n", | |||
ass->ssa_mode ? "Marked" : "Layer"); | |||
} | |||
@@ -48,8 +48,8 @@ static int ast_read_header(AVFormatContext *s) | |||
return AVERROR(ENOMEM); | |||
avio_skip(s->pb, 8); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = ff_codec_get_id(ff_codec_ast_tags, avio_rb16(s->pb)); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = ff_codec_get_id(ff_codec_ast_tags, avio_rb16(s->pb)); | |||
depth = avio_rb16(s->pb); | |||
if (depth != 16) { | |||
@@ -57,23 +57,23 @@ static int ast_read_header(AVFormatContext *s) | |||
return AVERROR_INVALIDDATA; | |||
} | |||
st->codec->channels = avio_rb16(s->pb); | |||
if (!st->codec->channels) | |||
st->codecpar->channels = avio_rb16(s->pb); | |||
if (!st->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
if (st->codec->channels == 2) | |||
st->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
else if (st->codec->channels == 4) | |||
st->codec->channel_layout = AV_CH_LAYOUT_4POINT0; | |||
if (st->codecpar->channels == 2) | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
else if (st->codecpar->channels == 4) | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_4POINT0; | |||
avio_skip(s->pb, 2); | |||
st->codec->sample_rate = avio_rb32(s->pb); | |||
if (st->codec->sample_rate <= 0) | |||
st->codecpar->sample_rate = avio_rb32(s->pb); | |||
if (st->codecpar->sample_rate <= 0) | |||
return AVERROR_INVALIDDATA; | |||
st->start_time = 0; | |||
st->duration = avio_rb32(s->pb); | |||
avio_skip(s->pb, 40); | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -90,10 +90,10 @@ static int ast_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
pos = avio_tell(s->pb); | |||
type = avio_rl32(s->pb); | |||
size = avio_rb32(s->pb); | |||
if (size > INT_MAX / s->streams[0]->codec->channels) | |||
if (size > INT_MAX / s->streams[0]->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
size *= s->streams[0]->codec->channels; | |||
size *= s->streams[0]->codecpar->channels; | |||
if ((ret = avio_skip(s->pb, 24)) < 0) // padding | |||
return ret; | |||
@@ -37,7 +37,7 @@ typedef struct ASTMuxContext { | |||
#define CHECK_LOOP(type) \ | |||
if (ast->loop ## type > 0) { \ | |||
ast->loop ## type = av_rescale_rnd(ast->loop ## type, enc->sample_rate, 1000, AV_ROUND_DOWN); \ | |||
ast->loop ## type = av_rescale_rnd(ast->loop ## type, par->sample_rate, 1000, AV_ROUND_DOWN); \ | |||
if (ast->loop ## type < 0 || ast->loop ## type > UINT_MAX) { \ | |||
av_log(s, AV_LOG_ERROR, "Invalid loop" #type " value\n"); \ | |||
return AVERROR(EINVAL); \ | |||
@@ -48,22 +48,22 @@ static int ast_write_header(AVFormatContext *s) | |||
{ | |||
ASTMuxContext *ast = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *enc; | |||
AVCodecParameters *par; | |||
unsigned int codec_tag; | |||
if (s->nb_streams == 1) { | |||
enc = s->streams[0]->codec; | |||
par = s->streams[0]->codecpar; | |||
} else { | |||
av_log(s, AV_LOG_ERROR, "only one stream is supported\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
if (enc->codec_id == AV_CODEC_ID_ADPCM_AFC) { | |||
if (par->codec_id == AV_CODEC_ID_ADPCM_AFC) { | |||
av_log(s, AV_LOG_ERROR, "muxing ADPCM AFC is not implemented\n"); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
codec_tag = ff_codec_get_tag(ff_codec_ast_tags, enc->codec_id); | |||
codec_tag = ff_codec_get_tag(ff_codec_ast_tags, par->codec_id); | |||
if (!codec_tag) { | |||
av_log(s, AV_LOG_ERROR, "unsupported codec\n"); | |||
return AVERROR(EINVAL); | |||
@@ -84,9 +84,9 @@ static int ast_write_header(AVFormatContext *s) | |||
avio_wb32(pb, 0); /* File size minus header */ | |||
avio_wb16(pb, codec_tag); | |||
avio_wb16(pb, 16); /* Bit depth */ | |||
avio_wb16(pb, enc->channels); | |||
avio_wb16(pb, par->channels); | |||
avio_wb16(pb, 0); /* Loop flag */ | |||
avio_wb32(pb, enc->sample_rate); | |||
avio_wb32(pb, par->sample_rate); | |||
ast->samples = avio_tell(pb); | |||
avio_wb32(pb, 0); /* Number of samples */ | |||
@@ -110,8 +110,8 @@ static int ast_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
ASTMuxContext *ast = s->priv_data; | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
int size = pkt->size / enc->channels; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
int size = pkt->size / par->channels; | |||
if (s->streams[0]->nb_frames == 0) | |||
ast->fbs = size; | |||
@@ -133,9 +133,9 @@ static int ast_write_trailer(AVFormatContext *s) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
ASTMuxContext *ast = s->priv_data; | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
int64_t file_size = avio_tell(pb); | |||
int64_t samples = (file_size - 64 - (32 * s->streams[0]->nb_frames)) / enc->block_align; /* PCM_S16BE_PLANAR */ | |||
int64_t samples = (file_size - 64 - (32 * s->streams[0]->nb_frames)) / par->block_align; /* PCM_S16BE_PLANAR */ | |||
av_log(s, AV_LOG_DEBUG, "total samples: %"PRId64"\n", samples); | |||
@@ -132,16 +132,16 @@ static int au_read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_tag = id; | |||
st->codec->codec_id = codec; | |||
st->codec->channels = channels; | |||
st->codec->sample_rate = rate; | |||
st->codec->bits_per_coded_sample = bps; | |||
st->codec->bit_rate = channels * rate * bps; | |||
st->codec->block_align = FFMAX(bps * st->codec->channels / 8, 1); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_tag = id; | |||
st->codecpar->codec_id = codec; | |||
st->codecpar->channels = channels; | |||
st->codecpar->sample_rate = rate; | |||
st->codecpar->bits_per_coded_sample = bps; | |||
st->codecpar->bit_rate = channels * rate * bps; | |||
st->codecpar->block_align = FFMAX(bps * st->codecpar->channels / 8, 1); | |||
if (data_size != AU_UNKNOWN_SIZE) | |||
st->duration = (((int64_t)data_size)<<3) / (st->codec->channels * (int64_t)bps); | |||
st->duration = (((int64_t)data_size)<<3) / (st->codecpar->channels * (int64_t)bps); | |||
st->start_time = 0; | |||
avpriv_set_pts_info(st, 64, 1, rate); | |||
@@ -168,15 +168,15 @@ AVInputFormat ff_au_demuxer = { | |||
static int au_write_header(AVFormatContext *s) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if (s->nb_streams != 1) { | |||
av_log(s, AV_LOG_ERROR, "only one stream is supported\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
enc->codec_tag = ff_codec_get_tag(codec_au_tags, enc->codec_id); | |||
if (!enc->codec_tag) { | |||
par->codec_tag = ff_codec_get_tag(codec_au_tags, par->codec_id); | |||
if (!par->codec_tag) { | |||
av_log(s, AV_LOG_ERROR, "unsupported codec\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
@@ -184,9 +184,9 @@ static int au_write_header(AVFormatContext *s) | |||
ffio_wfourcc(pb, ".snd"); /* magic number */ | |||
avio_wb32(pb, AU_HEADER_SIZE); /* header size */ | |||
avio_wb32(pb, AU_UNKNOWN_SIZE); /* data size */ | |||
avio_wb32(pb, enc->codec_tag); /* codec ID */ | |||
avio_wb32(pb, enc->sample_rate); | |||
avio_wb32(pb, enc->channels); | |||
avio_wb32(pb, par->codec_tag); /* codec ID */ | |||
avio_wb32(pb, par->sample_rate); | |||
avio_wb32(pb, par->channels); | |||
avio_wb64(pb, 0); /* annotation field */ | |||
avio_flush(pb); | |||
@@ -33,7 +33,7 @@ void ff_audio_interleave_close(AVFormatContext *s) | |||
AVStream *st = s->streams[i]; | |||
AudioInterleaveContext *aic = st->priv_data; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) | |||
av_fifo_freep(&aic->fifo); | |||
} | |||
} | |||
@@ -55,9 +55,9 @@ int ff_audio_interleave_init(AVFormatContext *s, | |||
AVStream *st = s->streams[i]; | |||
AudioInterleaveContext *aic = st->priv_data; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
aic->sample_size = (st->codec->channels * | |||
av_get_bits_per_sample(st->codec->codec_id)) / 8; | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
aic->sample_size = (st->codecpar->channels * | |||
av_get_bits_per_sample(st->codecpar->codec_id)) / 8; | |||
if (!aic->sample_size) { | |||
av_log(s, AV_LOG_ERROR, "could not compute sample size\n"); | |||
return AVERROR(EINVAL); | |||
@@ -111,7 +111,7 @@ int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt | |||
if (pkt) { | |||
AVStream *st = s->streams[pkt->stream_index]; | |||
AudioInterleaveContext *aic = st->priv_data; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
unsigned new_size = av_fifo_size(aic->fifo) + pkt->size; | |||
if (new_size > aic->fifo_size) { | |||
if (av_fifo_realloc2(aic->fifo, new_size) < 0) | |||
@@ -131,7 +131,7 @@ int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt | |||
for (i = 0; i < s->nb_streams; i++) { | |||
AVStream *st = s->streams[i]; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
AVPacket new_pkt = { 0 }; | |||
while ((ret = interleave_new_audio_packet(s, &new_pkt, i, flush)) > 0) { | |||
if ((ret = ff_interleave_add_packet(s, &new_pkt, compare_ts)) < 0) | |||
@@ -872,18 +872,13 @@ typedef struct AVStream { | |||
* encoding: set by the user, replaced by libavformat if left unset | |||
*/ | |||
int id; | |||
#if FF_API_LAVF_AVCTX | |||
/** | |||
* Codec context associated with this stream. Allocated and freed by | |||
* libavformat. | |||
* | |||
* - decoding: The demuxer exports codec information stored in the headers | |||
* here. | |||
* - encoding: The user sets codec information, the muxer writes it to the | |||
* output. Mandatory fields as specified in AVCodecContext | |||
* documentation must be set even if this AVCodecContext is | |||
* not actually used for encoding. | |||
* @deprecated use the codecpar struct instead | |||
*/ | |||
attribute_deprecated | |||
AVCodecContext *codec; | |||
#endif | |||
void *priv_data; | |||
#if FF_API_LAVF_FRAC | |||
@@ -990,6 +985,17 @@ typedef struct AVStream { | |||
int event_flags; | |||
#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. | |||
/* | |||
* Codec parameters associated with this stream. Allocated and freed by | |||
* libavformat in avformat_new_stream() and avformat_free_context() | |||
* respectively. | |||
* | |||
* - demuxing: filled by libavformat on stream creation or in | |||
* avformat_find_stream_info() | |||
* - muxing: filled by the caller before avformat_write_header() | |||
*/ | |||
AVCodecParameters *codecpar; | |||
/***************************************************************** | |||
* All fields below this line are not part of the public API. They | |||
* may not be used outside of libavformat and can be changed and | |||
@@ -385,11 +385,11 @@ static void avi_read_nikon(AVFormatContext *s, uint64_t end) | |||
} | |||
} | |||
static int avi_extract_stream_metadata(AVStream *st) | |||
static int avi_extract_stream_metadata(AVFormatContext *s, AVStream *st) | |||
{ | |||
GetByteContext gb; | |||
uint8_t *data = st->codec->extradata; | |||
int data_size = st->codec->extradata_size; | |||
uint8_t *data = st->codecpar->extradata; | |||
int data_size = st->codecpar->extradata_size; | |||
int tag, offset; | |||
if (!data || data_size < 8) { | |||
@@ -408,13 +408,13 @@ static int avi_extract_stream_metadata(AVStream *st) | |||
bytestream2_init(&gb, data + offset, data_size - offset); | |||
// decode EXIF tags from IFD, AVI is always little-endian | |||
return avpriv_exif_decode_ifd(st->codec, &gb, 1, 0, &st->metadata); | |||
return avpriv_exif_decode_ifd(s, &gb, 1, 0, &st->metadata); | |||
break; | |||
case MKTAG('C', 'A', 'S', 'I'): | |||
avpriv_request_sample(st->codec, "RIFF stream data tag type CASI (%u)", tag); | |||
avpriv_request_sample(s, "RIFF stream data tag type CASI (%u)", tag); | |||
break; | |||
case MKTAG('Z', 'o', 'r', 'a'): | |||
avpriv_request_sample(st->codec, "RIFF stream data tag type Zora (%u)", tag); | |||
avpriv_request_sample(s, "RIFF stream data tag type Zora (%u)", tag); | |||
break; | |||
default: | |||
break; | |||
@@ -456,12 +456,12 @@ static int calculate_bitrate(AVFormatContext *s) | |||
for (j = 0; j < st->nb_index_entries; j++) | |||
len += st->index_entries[j].size; | |||
if (st->nb_index_entries < 2 || st->codec->bit_rate > 0) | |||
if (st->nb_index_entries < 2 || st->codecpar->bit_rate > 0) | |||
continue; | |||
duration = st->index_entries[j-1].timestamp - st->index_entries[0].timestamp; | |||
bitrate = av_rescale(8*len, st->time_base.den, duration * st->time_base.num); | |||
if (bitrate <= INT_MAX && bitrate > 0) { | |||
st->codec->bit_rate = bitrate; | |||
st->codecpar->bit_rate = bitrate; | |||
} | |||
} | |||
return 1; | |||
@@ -603,8 +603,8 @@ static int avi_read_header(AVFormatContext *s) | |||
goto fail; | |||
ast = s->streams[0]->priv_data; | |||
av_freep(&s->streams[0]->codec->extradata); | |||
av_freep(&s->streams[0]->codec); | |||
av_freep(&s->streams[0]->codecpar->extradata); | |||
av_freep(&s->streams[0]->codecpar); | |||
if (s->streams[0]->info) | |||
av_freep(&s->streams[0]->info->duration_error); | |||
av_freep(&s->streams[0]->info); | |||
@@ -733,17 +733,17 @@ static int avi_read_header(AVFormatContext *s) | |||
if (cur_pos < list_end) | |||
size = FFMIN(size, list_end - cur_pos); | |||
st = s->streams[stream_index]; | |||
if (st->codec->codec_type != AVMEDIA_TYPE_UNKNOWN) { | |||
if (st->codecpar->codec_type != AVMEDIA_TYPE_UNKNOWN) { | |||
avio_skip(pb, size); | |||
break; | |||
} | |||
switch (codec_type) { | |||
case AVMEDIA_TYPE_VIDEO: | |||
if (amv_file_format) { | |||
st->codec->width = avih_width; | |||
st->codec->height = avih_height; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_AMV; | |||
st->codecpar->width = avih_width; | |||
st->codecpar->height = avih_height; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_AMV; | |||
avio_skip(pb, size); | |||
break; | |||
} | |||
@@ -751,40 +751,40 @@ static int avi_read_header(AVFormatContext *s) | |||
if (tag1 == MKTAG('D', 'X', 'S', 'B') || | |||
tag1 == MKTAG('D', 'X', 'S', 'A')) { | |||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codec->codec_tag = tag1; | |||
st->codec->codec_id = AV_CODEC_ID_XSUB; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codecpar->codec_tag = tag1; | |||
st->codecpar->codec_id = AV_CODEC_ID_XSUB; | |||
break; | |||
} | |||
if (size > 10 * 4 && size < (1 << 30) && size < avi->fsize) { | |||
if (esize == size-1 && (esize&1)) { | |||
st->codec->extradata_size = esize - 10 * 4; | |||
st->codecpar->extradata_size = esize - 10 * 4; | |||
} else | |||
st->codec->extradata_size = size - 10 * 4; | |||
if (ff_get_extradata(st->codec, pb, st->codec->extradata_size) < 0) | |||
st->codecpar->extradata_size = size - 10 * 4; | |||
if (ff_get_extradata(st->codecpar, pb, st->codecpar->extradata_size) < 0) | |||
return AVERROR(ENOMEM); | |||
} | |||
// FIXME: check if the encoder really did this correctly | |||
if (st->codec->extradata_size & 1) | |||
if (st->codecpar->extradata_size & 1) | |||
avio_r8(pb); | |||
/* Extract palette from extradata if bpp <= 8. | |||
* This code assumes that extradata contains only palette. | |||
* This is true for all paletted codecs implemented in | |||
* FFmpeg. */ | |||
if (st->codec->extradata_size && | |||
(st->codec->bits_per_coded_sample <= 8)) { | |||
int pal_size = (1 << st->codec->bits_per_coded_sample) << 2; | |||
if (st->codecpar->extradata_size && | |||
(st->codecpar->bits_per_coded_sample <= 8)) { | |||
int pal_size = (1 << st->codecpar->bits_per_coded_sample) << 2; | |||
const uint8_t *pal_src; | |||
pal_size = FFMIN(pal_size, st->codec->extradata_size); | |||
pal_src = st->codec->extradata + | |||
st->codec->extradata_size - pal_size; | |||
pal_size = FFMIN(pal_size, st->codecpar->extradata_size); | |||
pal_src = st->codecpar->extradata + | |||
st->codecpar->extradata_size - pal_size; | |||
/* Exclude the "BottomUp" field from the palette */ | |||
if (pal_src - st->codec->extradata >= 9 && | |||
!memcmp(st->codec->extradata + st->codec->extradata_size - 9, "BottomUp", 9)) | |||
if (pal_src - st->codecpar->extradata >= 9 && | |||
!memcmp(st->codecpar->extradata + st->codecpar->extradata_size - 9, "BottomUp", 9)) | |||
pal_src -= 9; | |||
for (i = 0; i < pal_size / 4; i++) | |||
ast->pal[i] = 0xFFU<<24 | AV_RL32(pal_src+4*i); | |||
@@ -793,17 +793,17 @@ static int avi_read_header(AVFormatContext *s) | |||
print_tag("video", tag1, 0); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_tag = tag1; | |||
st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_tag = tag1; | |||
st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, | |||
tag1); | |||
/* If codec is not found yet, try with the mov tags. */ | |||
if (!st->codec->codec_id) { | |||
if (!st->codecpar->codec_id) { | |||
char tag_buf[32]; | |||
av_get_codec_tag_string(tag_buf, sizeof(tag_buf), tag1); | |||
st->codec->codec_id = | |||
st->codecpar->codec_id = | |||
ff_codec_get_id(ff_codec_movvideo_tags, tag1); | |||
if (st->codec->codec_id) | |||
if (st->codecpar->codec_id) | |||
av_log(s, AV_LOG_WARNING, | |||
"mov tag found in avi (fourcc %s)\n", | |||
tag_buf); | |||
@@ -812,44 +812,44 @@ static int avi_read_header(AVFormatContext *s) | |||
* for generating correct pts. */ | |||
st->need_parsing = AVSTREAM_PARSE_HEADERS; | |||
if (st->codec->codec_id == AV_CODEC_ID_MPEG4 && | |||
if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4 && | |||
ast->handler == MKTAG('X', 'V', 'I', 'D')) | |||
st->codec->codec_tag = MKTAG('X', 'V', 'I', 'D'); | |||
st->codecpar->codec_tag = MKTAG('X', 'V', 'I', 'D'); | |||
if (st->codec->codec_tag == MKTAG('V', 'S', 'S', 'H')) | |||
if (st->codecpar->codec_tag == MKTAG('V', 'S', 'S', 'H')) | |||
st->need_parsing = AVSTREAM_PARSE_FULL; | |||
if (st->codec->codec_id == AV_CODEC_ID_RV40) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_RV40) | |||
st->need_parsing = AVSTREAM_PARSE_NONE; | |||
if (st->codec->codec_tag == 0 && st->codec->height > 0 && | |||
st->codec->extradata_size < 1U << 30) { | |||
st->codec->extradata_size += 9; | |||
if ((ret = av_reallocp(&st->codec->extradata, | |||
st->codec->extradata_size + | |||
if (st->codecpar->codec_tag == 0 && st->codecpar->height > 0 && | |||
st->codecpar->extradata_size < 1U << 30) { | |||
st->codecpar->extradata_size += 9; | |||
if ((ret = av_reallocp(&st->codecpar->extradata, | |||
st->codecpar->extradata_size + | |||
AV_INPUT_BUFFER_PADDING_SIZE)) < 0) { | |||
st->codec->extradata_size = 0; | |||
st->codecpar->extradata_size = 0; | |||
return ret; | |||
} else | |||
memcpy(st->codec->extradata + st->codec->extradata_size - 9, | |||
memcpy(st->codecpar->extradata + st->codecpar->extradata_size - 9, | |||
"BottomUp", 9); | |||
} | |||
st->codec->height = FFABS(st->codec->height); | |||
st->codecpar->height = FFABS(st->codecpar->height); | |||
// avio_skip(pb, size - 5 * 4); | |||
break; | |||
case AVMEDIA_TYPE_AUDIO: | |||
ret = ff_get_wav_header(s, pb, st->codec, size, 0); | |||
ret = ff_get_wav_header(s, pb, st->codecpar, size, 0); | |||
if (ret < 0) | |||
return ret; | |||
ast->dshow_block_align = st->codec->block_align; | |||
if (ast->sample_size && st->codec->block_align && | |||
ast->sample_size != st->codec->block_align) { | |||
ast->dshow_block_align = st->codecpar->block_align; | |||
if (ast->sample_size && st->codecpar->block_align && | |||
ast->sample_size != st->codecpar->block_align) { | |||
av_log(s, | |||
AV_LOG_WARNING, | |||
"sample size (%d) != block align (%d)\n", | |||
ast->sample_size, | |||
st->codec->block_align); | |||
ast->sample_size = st->codec->block_align; | |||
st->codecpar->block_align); | |||
ast->sample_size = st->codecpar->block_align; | |||
} | |||
/* 2-aligned | |||
* (fix for Stargate SG-1 - 3x18 - Shades of Grey.avi) */ | |||
@@ -861,45 +861,45 @@ static int avi_read_header(AVFormatContext *s) | |||
/* ADTS header is in extradata, AAC without header must be | |||
* stored as exact frames. Parser not needed and it will | |||
* fail. */ | |||
if (st->codec->codec_id == AV_CODEC_ID_AAC && | |||
st->codec->extradata_size) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC && | |||
st->codecpar->extradata_size) | |||
st->need_parsing = AVSTREAM_PARSE_NONE; | |||
// The flac parser does not work with AVSTREAM_PARSE_TIMESTAMPS | |||
if (st->codec->codec_id == AV_CODEC_ID_FLAC) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_FLAC) | |||
st->need_parsing = AVSTREAM_PARSE_NONE; | |||
/* AVI files with Xan DPCM audio (wrongly) declare PCM | |||
* audio in the header but have Axan as stream_code_tag. */ | |||
if (ast->handler == AV_RL32("Axan")) { | |||
st->codec->codec_id = AV_CODEC_ID_XAN_DPCM; | |||
st->codec->codec_tag = 0; | |||
st->codecpar->codec_id = AV_CODEC_ID_XAN_DPCM; | |||
st->codecpar->codec_tag = 0; | |||
ast->dshow_block_align = 0; | |||
} | |||
if (amv_file_format) { | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_IMA_AMV; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_AMV; | |||
ast->dshow_block_align = 0; | |||
} | |||
if ((st->codec->codec_id == AV_CODEC_ID_AAC || | |||
st->codec->codec_id == AV_CODEC_ID_FLAC || | |||
st->codec->codec_id == AV_CODEC_ID_MP2 ) && ast->dshow_block_align <= 4 && ast->dshow_block_align) { | |||
if ((st->codecpar->codec_id == AV_CODEC_ID_AAC || | |||
st->codecpar->codec_id == AV_CODEC_ID_FLAC || | |||
st->codecpar->codec_id == AV_CODEC_ID_MP2 ) && ast->dshow_block_align <= 4 && ast->dshow_block_align) { | |||
av_log(s, AV_LOG_DEBUG, "overriding invalid dshow_block_align of %d\n", ast->dshow_block_align); | |||
ast->dshow_block_align = 0; | |||
} | |||
if (st->codec->codec_id == AV_CODEC_ID_AAC && ast->dshow_block_align == 1024 && ast->sample_size == 1024 || | |||
st->codec->codec_id == AV_CODEC_ID_AAC && ast->dshow_block_align == 4096 && ast->sample_size == 4096 || | |||
st->codec->codec_id == AV_CODEC_ID_MP3 && ast->dshow_block_align == 1152 && ast->sample_size == 1152) { | |||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC && ast->dshow_block_align == 1024 && ast->sample_size == 1024 || | |||
st->codecpar->codec_id == AV_CODEC_ID_AAC && ast->dshow_block_align == 4096 && ast->sample_size == 4096 || | |||
st->codecpar->codec_id == AV_CODEC_ID_MP3 && ast->dshow_block_align == 1152 && ast->sample_size == 1152) { | |||
av_log(s, AV_LOG_DEBUG, "overriding sample_size\n"); | |||
ast->sample_size = 0; | |||
} | |||
break; | |||
case AVMEDIA_TYPE_SUBTITLE: | |||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; | |||
st->request_probe= 1; | |||
avio_skip(pb, size); | |||
break; | |||
default: | |||
st->codec->codec_type = AVMEDIA_TYPE_DATA; | |||
st->codec->codec_id = AV_CODEC_ID_NONE; | |||
st->codec->codec_tag = 0; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_DATA; | |||
st->codecpar->codec_id = AV_CODEC_ID_NONE; | |||
st->codecpar->codec_tag = 0; | |||
avio_skip(pb, size); | |||
break; | |||
} | |||
@@ -907,8 +907,8 @@ static int avi_read_header(AVFormatContext *s) | |||
break; | |||
case MKTAG('s', 't', 'r', 'd'): | |||
if (stream_index >= (unsigned)s->nb_streams | |||
|| s->streams[stream_index]->codec->extradata_size | |||
|| s->streams[stream_index]->codec->codec_tag == MKTAG('H','2','6','4')) { | |||
|| s->streams[stream_index]->codecpar->extradata_size | |||
|| s->streams[stream_index]->codecpar->codec_tag == MKTAG('H','2','6','4')) { | |||
avio_skip(pb, size); | |||
} else { | |||
uint64_t cur_pos = avio_tell(pb); | |||
@@ -917,14 +917,14 @@ static int avi_read_header(AVFormatContext *s) | |||
st = s->streams[stream_index]; | |||
if (size<(1<<30)) { | |||
if (ff_get_extradata(st->codec, pb, size) < 0) | |||
if (ff_get_extradata(st->codecpar, pb, size) < 0) | |||
return AVERROR(ENOMEM); | |||
} | |||
if (st->codec->extradata_size & 1) //FIXME check if the encoder really did this correctly | |||
if (st->codecpar->extradata_size & 1) //FIXME check if the encoder really did this correctly | |||
avio_r8(pb); | |||
ret = avi_extract_stream_metadata(st); | |||
ret = avi_extract_stream_metadata(s, st); | |||
if (ret < 0) { | |||
av_log(s, AV_LOG_WARNING, "could not decoding EXIF data in stream header.\n"); | |||
} | |||
@@ -1014,8 +1014,8 @@ fail: | |||
if (dict_entry && !strcmp(dict_entry->value, "PotEncoder")) | |||
for (i = 0; i < s->nb_streams; i++) { | |||
AVStream *st = s->streams[i]; | |||
if ( st->codec->codec_id == AV_CODEC_ID_MPEG1VIDEO | |||
|| st->codec->codec_id == AV_CODEC_ID_MPEG2VIDEO) | |||
if ( st->codecpar->codec_id == AV_CODEC_ID_MPEG1VIDEO | |||
|| st->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO) | |||
st->need_parsing = AVSTREAM_PARSE_FULL; | |||
} | |||
@@ -1094,8 +1094,7 @@ static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) | |||
if (!avformat_open_input(&ast->sub_ctx, "", sub_demuxer, NULL)) { | |||
ff_read_packet(ast->sub_ctx, &ast->sub_pkt); | |||
*st->codec = *ast->sub_ctx->streams[0]->codec; | |||
ast->sub_ctx->streams[0]->codec->extradata = NULL; | |||
avcodec_parameters_copy(st->codecpar, ast->sub_ctx->streams[0]->codecpar); | |||
time_base = ast->sub_ctx->streams[0]->time_base; | |||
avpriv_set_pts_info(st, 64, time_base.num, time_base.den); | |||
} | |||
@@ -1232,8 +1231,8 @@ start_sync: | |||
// workaround for broken small-file-bug402.avi | |||
if ( d[2] == 'w' && d[3] == 'b' | |||
&& n == 0 | |||
&& st ->codec->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& st1->codec->codec_type == AVMEDIA_TYPE_AUDIO | |||
&& st ->codecpar->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& st1->codecpar->codec_type == AVMEDIA_TYPE_AUDIO | |||
&& ast->prefix == 'd'*256+'c' | |||
&& (d[2]*256+d[3] == ast1->prefix || !ast1->prefix_count) | |||
) { | |||
@@ -1443,8 +1442,8 @@ resync: | |||
pkt->flags |= AV_PKT_FLAG_KEY; | |||
if (size < 0) | |||
av_packet_unref(pkt); | |||
} else if (st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE && | |||
!st->codec->codec_tag && read_gab2_sub(s, st, pkt)) { | |||
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE && | |||
!st->codecpar->codec_tag && read_gab2_sub(s, st, pkt)) { | |||
ast->frame_offset++; | |||
avi->stream_index = -1; | |||
ast->remaining = 0; | |||
@@ -1468,7 +1467,7 @@ resync: | |||
size); | |||
pkt->stream_index = avi->stream_index; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && st->index_entries) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && st->index_entries) { | |||
AVIndexEntry *e; | |||
int index; | |||
@@ -1479,7 +1478,7 @@ resync: | |||
if (index == st->nb_index_entries-1) { | |||
int key=1; | |||
uint32_t state=-1; | |||
if (st->codec->codec_id == AV_CODEC_ID_MPEG4) { | |||
if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4) { | |||
const uint8_t *ptr = pkt->data, *end = ptr + FFMIN(size, 256); | |||
while (ptr < end) { | |||
ptr = avpriv_find_start_code(ptr, end, &state); | |||
@@ -1557,7 +1556,7 @@ static int avi_read_idx1(AVFormatContext *s, int size) | |||
avi->stream_index = -1; | |||
avio_seek(pb, idx1_pos, SEEK_SET); | |||
if (s->nb_streams == 1 && s->streams[0]->codec->codec_tag == AV_RL32("MMES")) { | |||
if (s->nb_streams == 1 && s->streams[0]->codecpar->codec_tag == AV_RL32("MMES")) { | |||
first_packet_pos = 0; | |||
data_offset = avi->movi_list; | |||
} | |||
@@ -1661,7 +1660,7 @@ static int check_stream_max_drift(AVFormatContext *s) | |||
max_dts = FFMAX(max_dts, dts); | |||
max_buffer = FFMAX(max_buffer, | |||
av_rescale(dts - min_dts, | |||
st->codec->bit_rate, | |||
st->codecpar->bit_rate, | |||
AV_TIME_BASE)); | |||
} | |||
} | |||
@@ -1847,7 +1846,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, | |||
if (st2->nb_index_entries <= 0) | |||
continue; | |||
// av_assert1(st2->codec->block_align); | |||
// av_assert1(st2->codecpar->block_align); | |||
av_assert0(fabs(av_q2d(st2->time_base) - ast2->scale / (double)ast2->rate) < av_q2d(st2->time_base) * 0.00000001); | |||
index = av_index_search_timestamp(st2, | |||
av_rescale_q(timestamp, | |||
@@ -1856,7 +1855,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, | |||
FFMAX(ast2->sample_size, 1), | |||
flags | | |||
AVSEEK_FLAG_BACKWARD | | |||
(st2->codec->codec_type != AVMEDIA_TYPE_VIDEO ? AVSEEK_FLAG_ANY : 0)); | |||
(st2->codecpar->codec_type != AVMEDIA_TYPE_VIDEO ? AVSEEK_FLAG_ANY : 0)); | |||
if (index < 0) | |||
index = 0; | |||
ast2->seek_pos = st2->index_entries[index].pos; | |||
@@ -1872,7 +1871,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, | |||
index = av_index_search_timestamp( | |||
st2, | |||
av_rescale_q(timestamp, st->time_base, st2->time_base) * FFMAX(ast2->sample_size, 1), | |||
flags | AVSEEK_FLAG_BACKWARD | (st2->codec->codec_type != AVMEDIA_TYPE_VIDEO ? AVSEEK_FLAG_ANY : 0)); | |||
flags | AVSEEK_FLAG_BACKWARD | (st2->codecpar->codec_type != AVMEDIA_TYPE_VIDEO ? AVSEEK_FLAG_ANY : 0)); | |||
if (index < 0) | |||
index = 0; | |||
while (!avi->non_interleaved && index>0 && st2->index_entries[index-1].pos >= pos_min) | |||
@@ -180,21 +180,21 @@ static int avi_write_counters(AVFormatContext *s, int riff_id) | |||
AVIContext *avi = s->priv_data; | |||
int n, au_byterate, au_ssize, au_scale, nb_frames = 0; | |||
int64_t file_size; | |||
AVCodecContext *stream; | |||
AVCodecParameters *par; | |||
file_size = avio_tell(pb); | |||
for (n = 0; n < s->nb_streams; n++) { | |||
AVIStream *avist = s->streams[n]->priv_data; | |||
av_assert0(avist->frames_hdr_strm); | |||
stream = s->streams[n]->codec; | |||
par = s->streams[n]->codecpar; | |||
avio_seek(pb, avist->frames_hdr_strm, SEEK_SET); | |||
ff_parse_specific_params(s->streams[n], &au_byterate, &au_ssize, &au_scale); | |||
if (au_ssize == 0) | |||
avio_wl32(pb, avist->packet_count); | |||
else | |||
avio_wl32(pb, avist->audio_strm_length / au_ssize); | |||
if (stream->codec_type == AVMEDIA_TYPE_VIDEO) | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO) | |||
nb_frames = FFMAX(nb_frames, avist->packet_count); | |||
} | |||
if (riff_id == 1) { | |||
@@ -211,7 +211,7 @@ static void write_odml_master(AVFormatContext *s, int stream_index) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
AVStream *st = s->streams[stream_index]; | |||
AVCodecContext *enc = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
AVIStream *avist = st->priv_data; | |||
unsigned char tag[5]; | |||
int j; | |||
@@ -225,7 +225,7 @@ static void write_odml_master(AVFormatContext *s, int stream_index) | |||
avio_w8(pb, 0); /* bIndexSubType (0 == frame index) */ | |||
avio_w8(pb, 0); /* bIndexType (0 == AVI_INDEX_OF_INDEXES) */ | |||
avio_wl32(pb, 0); /* nEntriesInUse (will fill out later on) */ | |||
ffio_wfourcc(pb, avi_stream2fourcc(tag, stream_index, enc->codec_type)); | |||
ffio_wfourcc(pb, avi_stream2fourcc(tag, stream_index, par->codec_type)); | |||
/* dwChunkId */ | |||
avio_wl64(pb, 0); /* dwReserved[3] */ | |||
avio_wl32(pb, 0); /* Must be 0. */ | |||
@@ -239,7 +239,7 @@ static int avi_write_header(AVFormatContext *s) | |||
AVIContext *avi = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
int bitrate, n, i, nb_frames, au_byterate, au_ssize, au_scale; | |||
AVCodecContext *video_enc; | |||
AVCodecParameters *video_par; | |||
AVStream *video_st = NULL; | |||
int64_t list1, list2, strh, strf; | |||
AVDictionaryEntry *t = NULL; | |||
@@ -266,12 +266,12 @@ static int avi_write_header(AVFormatContext *s) | |||
avio_wl32(pb, 14 * 4); | |||
bitrate = 0; | |||
video_enc = NULL; | |||
video_par = NULL; | |||
for (n = 0; n < s->nb_streams; n++) { | |||
AVCodecContext *codec = s->streams[n]->codec; | |||
bitrate += codec->bit_rate; | |||
if (codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
video_enc = codec; | |||
AVCodecParameters *par = s->streams[n]->codecpar; | |||
bitrate += par->bit_rate; | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
video_par = par; | |||
video_st = s->streams[n]; | |||
} | |||
} | |||
@@ -295,9 +295,9 @@ static int avi_write_header(AVFormatContext *s) | |||
avio_wl32(pb, 0); /* initial frame */ | |||
avio_wl32(pb, s->nb_streams); /* nb streams */ | |||
avio_wl32(pb, 1024 * 1024); /* suggested buffer size */ | |||
if (video_enc) { | |||
avio_wl32(pb, video_enc->width); | |||
avio_wl32(pb, video_enc->height); | |||
if (video_par) { | |||
avio_wl32(pb, video_par->width); | |||
avio_wl32(pb, video_par->height); | |||
} else { | |||
avio_wl32(pb, 0); | |||
avio_wl32(pb, 0); | |||
@@ -310,18 +310,18 @@ static int avi_write_header(AVFormatContext *s) | |||
/* stream list */ | |||
for (i = 0; i < n; i++) { | |||
AVStream *st = s->streams[i]; | |||
AVCodecContext *enc = st->codec; | |||
AVCodecParameters *par = st->codecpar; | |||
AVIStream *avist = st->priv_data; | |||
list2 = ff_start_tag(pb, "LIST"); | |||
ffio_wfourcc(pb, "strl"); | |||
/* stream generic header */ | |||
strh = ff_start_tag(pb, "strh"); | |||
switch (enc->codec_type) { | |||
switch (par->codec_type) { | |||
case AVMEDIA_TYPE_SUBTITLE: | |||
// XSUB subtitles behave like video tracks, other subtitles | |||
// are not (yet) supported. | |||
if (enc->codec_id != AV_CODEC_ID_XSUB) { | |||
if (par->codec_id != AV_CODEC_ID_XSUB) { | |||
av_log(s, AV_LOG_ERROR, | |||
"Subtitle streams other than DivX XSUB are not supported by the AVI muxer.\n"); | |||
return AVERROR_PATCHWELCOME; | |||
@@ -339,9 +339,9 @@ static int avi_write_header(AVFormatContext *s) | |||
ffio_wfourcc(pb, "dats"); | |||
break; | |||
} | |||
if (enc->codec_type == AVMEDIA_TYPE_VIDEO || | |||
enc->codec_id == AV_CODEC_ID_XSUB) | |||
avio_wl32(pb, enc->codec_tag); | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO || | |||
par->codec_id == AV_CODEC_ID_XSUB) | |||
avio_wl32(pb, par->codec_tag); | |||
else | |||
avio_wl32(pb, 1); | |||
avist->strh_flags_offset = avio_tell(pb); | |||
@@ -352,14 +352,14 @@ static int avi_write_header(AVFormatContext *s) | |||
ff_parse_specific_params(st, &au_byterate, &au_ssize, &au_scale); | |||
if ( enc->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& enc->codec_id != AV_CODEC_ID_XSUB | |||
if ( par->codec_type == AVMEDIA_TYPE_VIDEO | |||
&& par->codec_id != AV_CODEC_ID_XSUB | |||
&& au_byterate > 1000LL*au_scale) { | |||
au_byterate = 600; | |||
au_scale = 1; | |||
} | |||
avpriv_set_pts_info(st, 64, au_scale, au_byterate); | |||
if (enc->codec_id == AV_CODEC_ID_XSUB) | |||
if (par->codec_id == AV_CODEC_ID_XSUB) | |||
au_scale = au_byterate = 0; | |||
avio_wl32(pb, au_scale); /* scale */ | |||
@@ -375,57 +375,57 @@ static int avi_write_header(AVFormatContext *s) | |||
avio_wl32(pb, 0); /* length, XXX: filled later */ | |||
/* suggested buffer size, is set to largest chunk size in avi_write_trailer */ | |||
if (enc->codec_type == AVMEDIA_TYPE_VIDEO) | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO) | |||
avio_wl32(pb, 1024 * 1024); | |||
else if (enc->codec_type == AVMEDIA_TYPE_AUDIO) | |||
else if (par->codec_type == AVMEDIA_TYPE_AUDIO) | |||
avio_wl32(pb, 12 * 1024); | |||
else | |||
avio_wl32(pb, 0); | |||
avio_wl32(pb, -1); /* quality */ | |||
avio_wl32(pb, au_ssize); /* sample size */ | |||
avio_wl32(pb, 0); | |||
avio_wl16(pb, enc->width); | |||
avio_wl16(pb, enc->height); | |||
avio_wl16(pb, par->width); | |||
avio_wl16(pb, par->height); | |||
ff_end_tag(pb, strh); | |||
if (enc->codec_type != AVMEDIA_TYPE_DATA) { | |||
if (par->codec_type != AVMEDIA_TYPE_DATA) { | |||
int ret, flags; | |||
enum AVPixelFormat pix_fmt; | |||
strf = ff_start_tag(pb, "strf"); | |||
switch (enc->codec_type) { | |||
switch (par->codec_type) { | |||
case AVMEDIA_TYPE_SUBTITLE: | |||
/* XSUB subtitles behave like video tracks, other subtitles | |||
* are not (yet) supported. */ | |||
if (enc->codec_id != AV_CODEC_ID_XSUB) | |||
if (par->codec_id != AV_CODEC_ID_XSUB) | |||
break; | |||
case AVMEDIA_TYPE_VIDEO: | |||
/* WMP expects RGB 5:5:5 rawvideo in avi to have bpp set to 16. */ | |||
if ( !enc->codec_tag | |||
&& enc->codec_id == AV_CODEC_ID_RAWVIDEO | |||
&& enc->pix_fmt == AV_PIX_FMT_RGB555LE | |||
&& enc->bits_per_coded_sample == 15) | |||
enc->bits_per_coded_sample = 16; | |||
if ( !par->codec_tag | |||
&& par->codec_id == AV_CODEC_ID_RAWVIDEO | |||
&& par->format == AV_PIX_FMT_RGB555LE | |||
&& par->bits_per_coded_sample == 15) | |||
par->bits_per_coded_sample = 16; | |||
avist->pal_offset = avio_tell(pb) + 40; | |||
ff_put_bmp_header(pb, enc, ff_codec_bmp_tags, 0, 0); | |||
ff_put_bmp_header(pb, par, ff_codec_bmp_tags, 0, 0); | |||
pix_fmt = avpriv_find_pix_fmt(avpriv_pix_fmt_bps_avi, | |||
enc->bits_per_coded_sample); | |||
if ( !enc->codec_tag | |||
&& enc->codec_id == AV_CODEC_ID_RAWVIDEO | |||
&& enc->pix_fmt != pix_fmt | |||
&& enc->pix_fmt != AV_PIX_FMT_NONE) | |||
par->bits_per_coded_sample); | |||
if ( !par->codec_tag | |||
&& par->codec_id == AV_CODEC_ID_RAWVIDEO | |||
&& par->format != pix_fmt | |||
&& par->format != AV_PIX_FMT_NONE) | |||
av_log(s, AV_LOG_ERROR, "%s rawvideo cannot be written to avi, output file will be unreadable\n", | |||
av_get_pix_fmt_name(enc->pix_fmt)); | |||
av_get_pix_fmt_name(par->format)); | |||
break; | |||
case AVMEDIA_TYPE_AUDIO: | |||
flags = (avi->write_channel_mask == 0) ? FF_PUT_WAV_HEADER_SKIP_CHANNELMASK : 0; | |||
if ((ret = ff_put_wav_header(pb, enc, flags)) < 0) | |||
if ((ret = ff_put_wav_header(s, pb, par, flags)) < 0) | |||
return ret; | |||
break; | |||
default: | |||
av_log(s, AV_LOG_ERROR, | |||
"Invalid or not supported codec type '%s' found in the input\n", | |||
(char *)av_x_if_null(av_get_media_type_string(enc->codec_type), "?")); | |||
(char *)av_x_if_null(av_get_media_type_string(par->codec_type), "?")); | |||
return AVERROR(EINVAL); | |||
} | |||
ff_end_tag(pb, strf); | |||
@@ -433,7 +433,7 @@ static int avi_write_header(AVFormatContext *s) | |||
ff_riff_write_info_tag(s->pb, "strn", t->value); | |||
t = NULL; | |||
} | |||
if (enc->codec_id == AV_CODEC_ID_XSUB | |||
if (par->codec_id == AV_CODEC_ID_XSUB | |||
&& (t = av_dict_get(s->streams[i]->metadata, "language", NULL, 0))) { | |||
const char* langstr = av_convert_lang_to(t->value, AV_LANG_ISO639_1); | |||
t = NULL; | |||
@@ -451,13 +451,13 @@ static int avi_write_header(AVFormatContext *s) | |||
write_odml_master(s, i); | |||
} | |||
if (enc->codec_type == AVMEDIA_TYPE_VIDEO && | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO && | |||
st->sample_aspect_ratio.num > 0 && | |||
st->sample_aspect_ratio.den > 0) { | |||
int vprp = ff_start_tag(pb, "vprp"); | |||
AVRational dar = av_mul_q(st->sample_aspect_ratio, | |||
(AVRational) { enc->width, | |||
enc->height }); | |||
(AVRational) { par->width, | |||
par->height }); | |||
int num, den; | |||
av_reduce(&num, &den, dar.num, dar.den, 0xFFFF); | |||
@@ -465,18 +465,18 @@ static int avi_write_header(AVFormatContext *s) | |||
avio_wl32(pb, 0); // video standard = unknown | |||
// TODO: should be avg_frame_rate | |||
avio_wl32(pb, (2LL*st->time_base.den + st->time_base.num - 1) / (2LL * st->time_base.num)); | |||
avio_wl32(pb, enc->width); | |||
avio_wl32(pb, enc->height); | |||
avio_wl32(pb, par->width); | |||
avio_wl32(pb, par->height); | |||
avio_wl16(pb, den); | |||
avio_wl16(pb, num); | |||
avio_wl32(pb, enc->width); | |||
avio_wl32(pb, enc->height); | |||
avio_wl32(pb, par->width); | |||
avio_wl32(pb, par->height); | |||
avio_wl32(pb, 1); // progressive FIXME | |||
avio_wl32(pb, enc->height); | |||
avio_wl32(pb, enc->width); | |||
avio_wl32(pb, enc->height); | |||
avio_wl32(pb, enc->width); | |||
avio_wl32(pb, par->height); | |||
avio_wl32(pb, par->width); | |||
avio_wl32(pb, par->height); | |||
avio_wl32(pb, par->width); | |||
avio_wl32(pb, 0); | |||
avio_wl32(pb, 0); | |||
@@ -544,7 +544,7 @@ static void update_odml_entry(AVFormatContext *s, int stream_index, int64_t ix, | |||
avio_wl64(pb, ix); /* qwOffset */ | |||
avio_wl32(pb, size); /* dwSize */ | |||
ff_parse_specific_params(s->streams[stream_index], &au_byterate, &au_ssize, &au_scale); | |||
if (s->streams[stream_index]->codec->codec_type == AVMEDIA_TYPE_AUDIO && au_ssize > 0) { | |||
if (s->streams[stream_index]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && au_ssize > 0) { | |||
uint32_t audio_segm_size = (avist->audio_strm_length - avist->indexes.audio_strm_offset); | |||
if ((audio_segm_size % au_ssize > 0) && !avist->sample_requested) { | |||
avpriv_request_sample(s, "OpenDML index duration for audio packets with partial frames"); | |||
@@ -586,7 +586,7 @@ static int avi_write_ix(AVFormatContext *s) | |||
AVIStream *avist = s->streams[i]->priv_data; | |||
int64_t ix; | |||
avi_stream2fourcc(tag, i, s->streams[i]->codec->codec_type); | |||
avi_stream2fourcc(tag, i, s->streams[i]->codecpar->codec_type); | |||
ix_tag[3] = '0' + i; | |||
/* Writing AVI OpenDML leaf index chunk */ | |||
@@ -654,7 +654,7 @@ static int avi_write_idx1(AVFormatContext *s) | |||
ffio_wfourcc(pb, ie->tag); | |||
else { | |||
avi_stream2fourcc(tag, stream_id, | |||
s->streams[stream_id]->codec->codec_type); | |||
s->streams[stream_id]->codecpar->codec_type); | |||
ffio_wfourcc(pb, tag); | |||
} | |||
avio_wl32(pb, ie->flags); | |||
@@ -673,11 +673,11 @@ static int avi_write_idx1(AVFormatContext *s) | |||
static int write_skip_frames(AVFormatContext *s, int stream_index, int64_t dts) | |||
{ | |||
AVIStream *avist = s->streams[stream_index]->priv_data; | |||
AVCodecContext *enc = s->streams[stream_index]->codec; | |||
AVCodecParameters *par = s->streams[stream_index]->codecpar; | |||
ff_dlog(s, "dts:%s packet_count:%d stream_index:%d\n", av_ts2str(dts), avist->packet_count, stream_index); | |||
while (enc->block_align == 0 && dts != AV_NOPTS_VALUE && | |||
dts > avist->packet_count && enc->codec_id != AV_CODEC_ID_XSUB && avist->packet_count) { | |||
while (par->block_align == 0 && dts != AV_NOPTS_VALUE && | |||
dts > avist->packet_count && par->codec_id != AV_CODEC_ID_XSUB && avist->packet_count) { | |||
AVPacket empty_packet; | |||
if (dts - avist->packet_count > 60000) { | |||
@@ -699,10 +699,10 @@ static int write_skip_frames(AVFormatContext *s, int stream_index, int64_t dts) | |||
static int avi_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
const int stream_index = pkt->stream_index; | |||
AVCodecContext *enc = s->streams[stream_index]->codec; | |||
AVCodecParameters *par = s->streams[stream_index]->codecpar; | |||
int ret; | |||
if (enc->codec_id == AV_CODEC_ID_H264 && enc->codec_tag == MKTAG('H','2','6','4') && pkt->size) { | |||
if (par->codec_id == AV_CODEC_ID_H264 && par->codec_tag == MKTAG('H','2','6','4') && pkt->size) { | |||
ret = ff_check_h264_startcode(s, s->streams[stream_index], pkt); | |||
if (ret < 0) | |||
return ret; | |||
@@ -714,27 +714,27 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
if (!pkt->size) | |||
return avi_write_packet_internal(s, pkt); /* Passthrough */ | |||
if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
AVIStream *avist = s->streams[stream_index]->priv_data; | |||
AVIOContext *pb = s->pb; | |||
AVPacket *opkt = pkt; | |||
if (enc->codec_id == AV_CODEC_ID_RAWVIDEO && enc->codec_tag == 0) { | |||
int64_t bpc = enc->bits_per_coded_sample != 15 ? enc->bits_per_coded_sample : 16; | |||
int expected_stride = ((enc->width * bpc + 31) >> 5)*4; | |||
ret = ff_reshuffle_raw_rgb(s, &pkt, enc, expected_stride); | |||
if (par->codec_id == AV_CODEC_ID_RAWVIDEO && par->codec_tag == 0) { | |||
int64_t bpc = par->bits_per_coded_sample != 15 ? par->bits_per_coded_sample : 16; | |||
int expected_stride = ((par->width * bpc + 31) >> 5)*4; | |||
ret = ff_reshuffle_raw_rgb(s, &pkt, par, expected_stride); | |||
if (ret < 0) | |||
return ret; | |||
} else | |||
ret = 0; | |||
if (enc->pix_fmt == AV_PIX_FMT_PAL8) { | |||
if (par->format == AV_PIX_FMT_PAL8) { | |||
int ret2 = ff_get_packet_palette(s, opkt, ret, avist->palette); | |||
if (ret2 < 0) | |||
return ret2; | |||
if (ret2) { | |||
int pal_size = 1 << enc->bits_per_coded_sample; | |||
int pal_size = 1 << par->bits_per_coded_sample; | |||
int pc_tag, i; | |||
av_assert0(enc->bits_per_coded_sample >= 0 && enc->bits_per_coded_sample <= 8); | |||
av_assert0(par->bits_per_coded_sample >= 0 && par->bits_per_coded_sample <= 8); | |||
if (pb->seekable && avist->pal_offset) { | |||
int64_t cur_offset = avio_tell(pb); | |||
@@ -749,7 +749,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
} | |||
if (memcmp(avist->palette, avist->old_palette, pal_size * 4)) { | |||
unsigned char tag[5]; | |||
avi_stream2fourcc(tag, stream_index, enc->codec_type); | |||
avi_stream2fourcc(tag, stream_index, par->codec_type); | |||
tag[2] = 'p'; tag[3] = 'c'; | |||
if (s->pb->seekable) { | |||
int ret; | |||
@@ -797,7 +797,7 @@ static int avi_write_packet_internal(AVFormatContext *s, AVPacket *pkt) | |||
AVIContext *avi = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
AVIStream *avist = s->streams[stream_index]->priv_data; | |||
AVCodecContext *enc = s->streams[stream_index]->codec; | |||
AVCodecParameters *par = s->streams[stream_index]->codecpar; | |||
if (pkt->dts != AV_NOPTS_VALUE) | |||
avist->last_dts = pkt->dts + pkt->duration; | |||
@@ -817,10 +817,10 @@ static int avi_write_packet_internal(AVFormatContext *s, AVPacket *pkt) | |||
avi->movi_list = avi_start_new_riff(s, pb, "AVIX", "movi"); | |||
} | |||
avi_stream2fourcc(tag, stream_index, enc->codec_type); | |||
avi_stream2fourcc(tag, stream_index, par->codec_type); | |||
if (pkt->flags & AV_PKT_FLAG_KEY) | |||
flags = 0x10; | |||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO) | |||
if (par->codec_type == AVMEDIA_TYPE_AUDIO) | |||
avist->audio_strm_length += size; | |||
if (s->pb->seekable) { | |||
@@ -868,15 +868,15 @@ static int avi_write_trailer(AVFormatContext *s) | |||
avio_skip(pb, 16); | |||
for (n = nb_frames = 0; n < s->nb_streams; n++) { | |||
AVCodecContext *stream = s->streams[n]->codec; | |||
AVCodecParameters *par = s->streams[n]->codecpar; | |||
AVIStream *avist = s->streams[n]->priv_data; | |||
if (stream->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (nb_frames < avist->packet_count) | |||
nb_frames = avist->packet_count; | |||
} else { | |||
if (stream->codec_id == AV_CODEC_ID_MP2 || | |||
stream->codec_id == AV_CODEC_ID_MP3) | |||
if (par->codec_id == AV_CODEC_ID_MP2 || | |||
par->codec_id == AV_CODEC_ID_MP3) | |||
nb_frames += avist->packet_count; | |||
} | |||
} | |||
@@ -232,10 +232,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) | |||
AviSynthContext *avs = s->priv_data; | |||
int planar = 0; // 0: packed, 1: YUV, 2: Y8 | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->width = avs->vi->width; | |||
st->codec->height = avs->vi->height; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->width = avs->vi->width; | |||
st->codecpar->height = avs->vi->height; | |||
st->avg_frame_rate = (AVRational) { avs->vi->fps_numerator, | |||
avs->vi->fps_denominator }; | |||
@@ -247,38 +247,38 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) | |||
switch (avs->vi->pixel_type) { | |||
#ifdef USING_AVISYNTH | |||
case AVS_CS_YV24: | |||
st->codec->pix_fmt = AV_PIX_FMT_YUV444P; | |||
planar = 1; | |||
st->codecpar->format = AV_PIX_FMT_YUV444P; | |||
planar = 1; | |||
break; | |||
case AVS_CS_YV16: | |||
st->codec->pix_fmt = AV_PIX_FMT_YUV422P; | |||
planar = 1; | |||
st->codecpar->format = AV_PIX_FMT_YUV422P; | |||
planar = 1; | |||
break; | |||
case AVS_CS_YV411: | |||
st->codec->pix_fmt = AV_PIX_FMT_YUV411P; | |||
planar = 1; | |||
st->codecpar->format = AV_PIX_FMT_YUV411P; | |||
planar = 1; | |||
break; | |||
case AVS_CS_Y8: | |||
st->codec->pix_fmt = AV_PIX_FMT_GRAY8; | |||
planar = 2; | |||
st->codecpar->format = AV_PIX_FMT_GRAY8; | |||
planar = 2; | |||
break; | |||
#endif | |||
case AVS_CS_BGR24: | |||
st->codec->pix_fmt = AV_PIX_FMT_BGR24; | |||
st->codecpar->format = AV_PIX_FMT_BGR24; | |||
break; | |||
case AVS_CS_BGR32: | |||
st->codec->pix_fmt = AV_PIX_FMT_RGB32; | |||
st->codecpar->format = AV_PIX_FMT_RGB32; | |||
break; | |||
case AVS_CS_YUY2: | |||
st->codec->pix_fmt = AV_PIX_FMT_YUYV422; | |||
st->codecpar->format = AV_PIX_FMT_YUYV422; | |||
break; | |||
case AVS_CS_YV12: | |||
st->codec->pix_fmt = AV_PIX_FMT_YUV420P; | |||
planar = 1; | |||
st->codecpar->format = AV_PIX_FMT_YUV420P; | |||
planar = 1; | |||
break; | |||
case AVS_CS_I420: // Is this even used anywhere? | |||
st->codec->pix_fmt = AV_PIX_FMT_YUV420P; | |||
planar = 1; | |||
st->codecpar->format = AV_PIX_FMT_YUV420P; | |||
planar = 1; | |||
break; | |||
default: | |||
av_log(s, AV_LOG_ERROR, | |||
@@ -307,27 +307,27 @@ static int avisynth_create_stream_audio(AVFormatContext *s, AVStream *st) | |||
{ | |||
AviSynthContext *avs = s->priv_data; | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->sample_rate = avs->vi->audio_samples_per_second; | |||
st->codec->channels = avs->vi->nchannels; | |||
st->duration = avs->vi->num_audio_samples; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->sample_rate = avs->vi->audio_samples_per_second; | |||
st->codecpar->channels = avs->vi->nchannels; | |||
st->duration = avs->vi->num_audio_samples; | |||
avpriv_set_pts_info(st, 64, 1, avs->vi->audio_samples_per_second); | |||
switch (avs->vi->sample_type) { | |||
case AVS_SAMPLE_INT8: | |||
st->codec->codec_id = AV_CODEC_ID_PCM_U8; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U8; | |||
break; | |||
case AVS_SAMPLE_INT16: | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
break; | |||
case AVS_SAMPLE_INT24: | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S24LE; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S24LE; | |||
break; | |||
case AVS_SAMPLE_INT32: | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S32LE; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S32LE; | |||
break; | |||
case AVS_SAMPLE_FLOAT: | |||
st->codec->codec_id = AV_CODEC_ID_PCM_F32LE; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_F32LE; | |||
break; | |||
default: | |||
av_log(s, AV_LOG_ERROR, | |||
@@ -636,7 +636,7 @@ static int avisynth_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
/* If either stream reaches EOF, try to read the other one before | |||
* giving up. */ | |||
avisynth_next_stream(s, &st, pkt, &discard); | |||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
ret = avisynth_read_packet_video(s, pkt, discard); | |||
if (ret == AVERROR_EOF && avs_has_audio(avs->vi)) { | |||
avisynth_next_stream(s, &st, pkt, &discard); | |||
@@ -678,7 +678,7 @@ static int avisynth_read_seek(AVFormatContext *s, int stream_index, | |||
samplerate = (AVRational) { avs->vi->audio_samples_per_second, 1 }; | |||
st = s->streams[stream_index]; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
/* AviSynth frame counts are signed int. */ | |||
if ((timestamp >= avs->vi->num_frames) || | |||
(timestamp > INT_MAX) || | |||
@@ -46,22 +46,22 @@ static int avr_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
avio_skip(s->pb, 4); // magic | |||
avio_skip(s->pb, 8); // sample_name | |||
chan = avio_rb16(s->pb); | |||
if (!chan) { | |||
st->codec->channels = 1; | |||
st->codecpar->channels = 1; | |||
} else if (chan == 0xFFFFu) { | |||
st->codec->channels = 2; | |||
st->codecpar->channels = 2; | |||
} else { | |||
avpriv_request_sample(s, "chan %d", chan); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
st->codec->bits_per_coded_sample = bps = avio_rb16(s->pb); | |||
st->codecpar->bits_per_coded_sample = bps = avio_rb16(s->pb); | |||
sign = avio_rb16(s->pb); | |||
@@ -69,21 +69,21 @@ static int avr_read_header(AVFormatContext *s) | |||
avio_skip(s->pb, 2); // midi | |||
avio_skip(s->pb, 1); // replay speed | |||
st->codec->sample_rate = avio_rb24(s->pb); | |||
st->codecpar->sample_rate = avio_rb24(s->pb); | |||
avio_skip(s->pb, 4 * 3); | |||
avio_skip(s->pb, 2 * 3); | |||
avio_skip(s->pb, 20); | |||
avio_skip(s->pb, 64); | |||
st->codec->codec_id = ff_get_pcm_codec_id(bps, 0, 1, sign); | |||
if (st->codec->codec_id == AV_CODEC_ID_NONE) { | |||
st->codecpar->codec_id = ff_get_pcm_codec_id(bps, 0, 1, sign); | |||
if (st->codecpar->codec_id == AV_CODEC_ID_NONE) { | |||
avpriv_request_sample(s, "Bps %d and sign %d", bps, sign); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
st->codec->block_align = bps * st->codec->channels / 8; | |||
st->codecpar->block_align = bps * st->codecpar->channels / 8; | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -184,11 +184,11 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) | |||
avs->st_video = avformat_new_stream(s, NULL); | |||
if (!avs->st_video) | |||
return AVERROR(ENOMEM); | |||
avs->st_video->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
avs->st_video->codec->codec_id = AV_CODEC_ID_AVS; | |||
avs->st_video->codec->width = avs->width; | |||
avs->st_video->codec->height = avs->height; | |||
avs->st_video->codec->bits_per_coded_sample=avs->bits_per_sample; | |||
avs->st_video->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
avs->st_video->codecpar->codec_id = AV_CODEC_ID_AVS; | |||
avs->st_video->codecpar->width = avs->width; | |||
avs->st_video->codecpar->height = avs->height; | |||
avs->st_video->codecpar->bits_per_coded_sample=avs->bits_per_sample; | |||
avs->st_video->nb_frames = avs->nb_frames; | |||
#if FF_API_R_FRAME_RATE | |||
avs->st_video->r_frame_rate = | |||
@@ -203,7 +203,7 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) | |||
avs->st_audio = avformat_new_stream(s, NULL); | |||
if (!avs->st_audio) | |||
return AVERROR(ENOMEM); | |||
avs->st_audio->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
avs->st_audio->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
} | |||
avs->remaining_audio_size = size - 4; | |||
size = avs_read_audio_packet(s, pkt); | |||
@@ -116,13 +116,13 @@ static int read_frame(BVID_DemuxContext *vid, AVIOContext *pb, AVPacket *pkt, | |||
"video packet"); | |||
} | |||
avpriv_set_pts_info(st, 64, 185, vid->sample_rate); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_BETHSOFTVID; | |||
st->codec->width = vid->width; | |||
st->codec->height = vid->height; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_BETHSOFTVID; | |||
st->codecpar->width = vid->width; | |||
st->codecpar->height = vid->height; | |||
} | |||
st = s->streams[vid->video_index]; | |||
npixels = st->codec->width * st->codec->height; | |||
npixels = st->codecpar->width * st->codecpar->height; | |||
vidbuf_start = av_malloc(vidbuf_capacity = BUFFER_PADDING_SIZE); | |||
if(!vidbuf_start) | |||
@@ -245,13 +245,13 @@ static int vid_read_packet(AVFormatContext *s, | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
vid->audio_index = st->index; | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_PCM_U8; | |||
st->codec->channels = 1; | |||
st->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codec->bits_per_coded_sample = 8; | |||
st->codec->sample_rate = vid->sample_rate; | |||
st->codec->bit_rate = 8 * st->codec->sample_rate; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_U8; | |||
st->codecpar->channels = 1; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codecpar->bits_per_coded_sample = 8; | |||
st->codecpar->sample_rate = vid->sample_rate; | |||
st->codecpar->bit_rate = 8 * st->codecpar->sample_rate; | |||
st->start_time = 0; | |||
avpriv_set_pts_info(st, 64, 1, vid->sample_rate); | |||
} | |||
@@ -75,38 +75,38 @@ static int bfi_read_header(AVFormatContext * s) | |||
avio_rl32(pb); | |||
fps = avio_rl32(pb); | |||
avio_skip(pb, 12); | |||
vstream->codec->width = avio_rl32(pb); | |||
vstream->codec->height = avio_rl32(pb); | |||
vstream->codecpar->width = avio_rl32(pb); | |||
vstream->codecpar->height = avio_rl32(pb); | |||
/*Load the palette to extradata */ | |||
avio_skip(pb, 8); | |||
vstream->codec->extradata = av_malloc(768); | |||
if (!vstream->codec->extradata) | |||
vstream->codecpar->extradata = av_malloc(768); | |||
if (!vstream->codecpar->extradata) | |||
return AVERROR(ENOMEM); | |||
vstream->codec->extradata_size = 768; | |||
avio_read(pb, vstream->codec->extradata, | |||
vstream->codec->extradata_size); | |||
vstream->codecpar->extradata_size = 768; | |||
avio_read(pb, vstream->codecpar->extradata, | |||
vstream->codecpar->extradata_size); | |||
astream->codec->sample_rate = avio_rl32(pb); | |||
astream->codecpar->sample_rate = avio_rl32(pb); | |||
/* Set up the video codec... */ | |||
avpriv_set_pts_info(vstream, 32, 1, fps); | |||
vstream->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vstream->codec->codec_id = AV_CODEC_ID_BFI; | |||
vstream->codec->pix_fmt = AV_PIX_FMT_PAL8; | |||
vstream->nb_frames = | |||
vstream->duration = bfi->nframes; | |||
vstream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vstream->codecpar->codec_id = AV_CODEC_ID_BFI; | |||
vstream->codecpar->format = AV_PIX_FMT_PAL8; | |||
vstream->nb_frames = | |||
vstream->duration = bfi->nframes; | |||
/* Set up the audio codec now... */ | |||
astream->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
astream->codec->codec_id = AV_CODEC_ID_PCM_U8; | |||
astream->codec->channels = 1; | |||
astream->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
astream->codec->bits_per_coded_sample = 8; | |||
astream->codec->bit_rate = | |||
astream->codec->sample_rate * astream->codec->bits_per_coded_sample; | |||
astream->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
astream->codecpar->codec_id = AV_CODEC_ID_PCM_U8; | |||
astream->codecpar->channels = 1; | |||
astream->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
astream->codecpar->bits_per_coded_sample = 8; | |||
astream->codecpar->bit_rate = | |||
astream->codecpar->sample_rate * astream->codecpar->bits_per_coded_sample; | |||
avio_seek(pb, chunk_header - 3, SEEK_SET); | |||
avpriv_set_pts_info(astream, 64, 1, astream->codec->sample_rate); | |||
avpriv_set_pts_info(astream, 64, 1, astream->codecpar->sample_rate); | |||
return 0; | |||
} | |||
@@ -89,7 +89,7 @@ static int read_header(AVFormatContext *s) | |||
if (!vst) | |||
return AVERROR(ENOMEM); | |||
vst->codec->codec_tag = avio_rl32(pb); | |||
vst->codecpar->codec_tag = avio_rl32(pb); | |||
bink->file_size = avio_rl32(pb) + 8; | |||
vst->duration = avio_rl32(pb); | |||
@@ -107,8 +107,8 @@ static int read_header(AVFormatContext *s) | |||
avio_skip(pb, 4); | |||
vst->codec->width = avio_rl32(pb); | |||
vst->codec->height = avio_rl32(pb); | |||
vst->codecpar->width = avio_rl32(pb); | |||
vst->codecpar->height = avio_rl32(pb); | |||
fps_num = avio_rl32(pb); | |||
fps_den = avio_rl32(pb); | |||
@@ -121,15 +121,15 @@ static int read_header(AVFormatContext *s) | |||
avpriv_set_pts_info(vst, 64, fps_den, fps_num); | |||
vst->avg_frame_rate = av_inv_q(vst->time_base); | |||
vst->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vst->codec->codec_id = AV_CODEC_ID_BINKVIDEO; | |||
vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vst->codecpar->codec_id = AV_CODEC_ID_BINKVIDEO; | |||
if ((vst->codec->codec_tag & 0xFFFFFF) == MKTAG('K', 'B', '2', 0)) { | |||
if ((vst->codecpar->codec_tag & 0xFFFFFF) == MKTAG('K', 'B', '2', 0)) { | |||
av_log(s, AV_LOG_WARNING, "Bink 2 video is not implemented\n"); | |||
vst->codec->codec_id = AV_CODEC_ID_NONE; | |||
vst->codecpar->codec_id = AV_CODEC_ID_NONE; | |||
} | |||
if (ff_get_extradata(vst->codec, pb, 4) < 0) | |||
if (ff_get_extradata(vst->codecpar, pb, 4) < 0) | |||
return AVERROR(ENOMEM); | |||
bink->num_audio_tracks = avio_rl32(pb); | |||
@@ -148,23 +148,23 @@ static int read_header(AVFormatContext *s) | |||
ast = avformat_new_stream(s, NULL); | |||
if (!ast) | |||
return AVERROR(ENOMEM); | |||
ast->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
ast->codec->codec_tag = 0; | |||
ast->codec->sample_rate = avio_rl16(pb); | |||
avpriv_set_pts_info(ast, 64, 1, ast->codec->sample_rate); | |||
ast->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
ast->codecpar->codec_tag = 0; | |||
ast->codecpar->sample_rate = avio_rl16(pb); | |||
avpriv_set_pts_info(ast, 64, 1, ast->codecpar->sample_rate); | |||
flags = avio_rl16(pb); | |||
ast->codec->codec_id = flags & BINK_AUD_USEDCT ? | |||
ast->codecpar->codec_id = flags & BINK_AUD_USEDCT ? | |||
AV_CODEC_ID_BINKAUDIO_DCT : AV_CODEC_ID_BINKAUDIO_RDFT; | |||
if (flags & BINK_AUD_STEREO) { | |||
ast->codec->channels = 2; | |||
ast->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
ast->codecpar->channels = 2; | |||
ast->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
} else { | |||
ast->codec->channels = 1; | |||
ast->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
ast->codecpar->channels = 1; | |||
ast->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
} | |||
if (ff_alloc_extradata(ast->codec, 4)) | |||
if (ff_alloc_extradata(ast->codecpar, 4)) | |||
return AVERROR(ENOMEM); | |||
AV_WL32(ast->codec->extradata, vst->codec->codec_tag); | |||
AV_WL32(ast->codecpar->extradata, vst->codecpar->codec_tag); | |||
} | |||
for (i = 0; i < bink->num_audio_tracks; i++) | |||
@@ -250,7 +250,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
(in bytes). We use this value to calcuate the audio PTS */ | |||
if (pkt->size >= 4) | |||
bink->audio_pts[bink->current_track -1] += | |||
AV_RL32(pkt->data) / (2 * s->streams[bink->current_track]->codec->channels); | |||
AV_RL32(pkt->data) / (2 * s->streams[bink->current_track]->codecpar->channels); | |||
return 0; | |||
} else { | |||
avio_skip(pb, audio_size); | |||
@@ -54,12 +54,12 @@ static AVStream * init_stream(AVFormatContext *s) | |||
AVStream *st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return NULL; | |||
st->codec->codec_tag = 0; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_tag = 0; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
if (!bin->width) { | |||
st->codec->width = (80<<3); | |||
st->codec->height = (25<<4); | |||
st->codecpar->width = (80<<3); | |||
st->codecpar->height = (25<<4); | |||
} | |||
avpriv_set_pts_info(st, 60, bin->framerate.den, bin->framerate.num); | |||
@@ -74,9 +74,9 @@ static AVStream * init_stream(AVFormatContext *s) | |||
/** | |||
* Given filesize and width, calculate height (assume font_height of 16) | |||
*/ | |||
static void calculate_height(AVCodecContext *avctx, uint64_t fsize) | |||
static void calculate_height(AVCodecParameters *par, uint64_t fsize) | |||
{ | |||
avctx->height = (fsize / ((avctx->width>>3)*2)) << 4; | |||
par->height = (fsize / ((par->width>>3)*2)) << 4; | |||
} | |||
#endif | |||
@@ -119,11 +119,11 @@ static int next_tag_read(AVFormatContext *avctx, uint64_t *fsize) | |||
return 0; | |||
} | |||
static void predict_width(AVCodecContext *avctx, uint64_t fsize, int got_width) | |||
static void predict_width(AVCodecParameters *par, uint64_t fsize, int got_width) | |||
{ | |||
/** attempt to guess width */ | |||
if (!got_width) | |||
avctx->width = fsize > 4000 ? (160<<3) : (80<<3); | |||
par->width = fsize > 4000 ? (160<<3) : (80<<3); | |||
} | |||
static int bintext_read_header(AVFormatContext *s) | |||
@@ -134,12 +134,12 @@ static int bintext_read_header(AVFormatContext *s) | |||
AVStream *st = init_stream(s); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_id = AV_CODEC_ID_BINTEXT; | |||
st->codecpar->codec_id = AV_CODEC_ID_BINTEXT; | |||
if (ff_alloc_extradata(st->codec, 2)) | |||
if (ff_alloc_extradata(st->codecpar, 2)) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata[0] = 16; | |||
st->codec->extradata[1] = 0; | |||
st->codecpar->extradata[0] = 16; | |||
st->codecpar->extradata[1] = 0; | |||
if (pb->seekable) { | |||
int got_width = 0; | |||
@@ -147,8 +147,8 @@ static int bintext_read_header(AVFormatContext *s) | |||
if (ff_sauce_read(s, &bin->fsize, &got_width, 0) < 0) | |||
next_tag_read(s, &bin->fsize); | |||
if (!bin->width) { | |||
predict_width(st->codec, bin->fsize, got_width); | |||
calculate_height(st->codec, bin->fsize); | |||
predict_width(st->codecpar, bin->fsize, got_width); | |||
calculate_height(st->codecpar, bin->fsize); | |||
} | |||
avio_seek(pb, 0, SEEK_SET); | |||
} | |||
@@ -179,30 +179,30 @@ static int xbin_read_header(AVFormatContext *s) | |||
return AVERROR(ENOMEM); | |||
avio_skip(pb, 5); | |||
st->codec->width = avio_rl16(pb)<<3; | |||
st->codec->height = avio_rl16(pb); | |||
st->codecpar->width = avio_rl16(pb)<<3; | |||
st->codecpar->height = avio_rl16(pb); | |||
fontheight = avio_r8(pb); | |||
st->codec->height *= fontheight; | |||
st->codecpar->height *= fontheight; | |||
flags = avio_r8(pb); | |||
st->codec->extradata_size = 2; | |||
st->codecpar->extradata_size = 2; | |||
if ((flags & BINTEXT_PALETTE)) | |||
st->codec->extradata_size += 48; | |||
st->codecpar->extradata_size += 48; | |||
if ((flags & BINTEXT_FONT)) | |||
st->codec->extradata_size += fontheight * (flags & 0x10 ? 512 : 256); | |||
st->codec->codec_id = flags & 4 ? AV_CODEC_ID_XBIN : AV_CODEC_ID_BINTEXT; | |||
st->codecpar->extradata_size += fontheight * (flags & 0x10 ? 512 : 256); | |||
st->codecpar->codec_id = flags & 4 ? AV_CODEC_ID_XBIN : AV_CODEC_ID_BINTEXT; | |||
if (ff_alloc_extradata(st->codec, st->codec->extradata_size)) | |||
if (ff_alloc_extradata(st->codecpar, st->codecpar->extradata_size)) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata[0] = fontheight; | |||
st->codec->extradata[1] = flags; | |||
if (avio_read(pb, st->codec->extradata + 2, st->codec->extradata_size - 2) < 0) | |||
st->codecpar->extradata[0] = fontheight; | |||
st->codecpar->extradata[1] = flags; | |||
if (avio_read(pb, st->codecpar->extradata + 2, st->codecpar->extradata_size - 2) < 0) | |||
return AVERROR(EIO); | |||
if (pb->seekable) { | |||
bin->fsize = avio_size(pb) - 9 - st->codec->extradata_size; | |||
bin->fsize = avio_size(pb) - 9 - st->codecpar->extradata_size; | |||
ff_sauce_read(s, &bin->fsize, NULL, 0); | |||
avio_seek(pb, 9 + st->codec->extradata_size, SEEK_SET); | |||
avio_seek(pb, 9 + st->codecpar->extradata_size, SEEK_SET); | |||
} | |||
return 0; | |||
@@ -222,28 +222,28 @@ static int adf_read_header(AVFormatContext *s) | |||
st = init_stream(s); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_id = AV_CODEC_ID_BINTEXT; | |||
st->codecpar->codec_id = AV_CODEC_ID_BINTEXT; | |||
if (ff_alloc_extradata(st->codec, 2 + 48 + 4096)) | |||
if (ff_alloc_extradata(st->codecpar, 2 + 48 + 4096)) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata[0] = 16; | |||
st->codec->extradata[1] = BINTEXT_PALETTE|BINTEXT_FONT; | |||
st->codecpar->extradata[0] = 16; | |||
st->codecpar->extradata[1] = BINTEXT_PALETTE|BINTEXT_FONT; | |||
if (avio_read(pb, st->codec->extradata + 2, 24) < 0) | |||
if (avio_read(pb, st->codecpar->extradata + 2, 24) < 0) | |||
return AVERROR(EIO); | |||
avio_skip(pb, 144); | |||
if (avio_read(pb, st->codec->extradata + 2 + 24, 24) < 0) | |||
if (avio_read(pb, st->codecpar->extradata + 2 + 24, 24) < 0) | |||
return AVERROR(EIO); | |||
if (avio_read(pb, st->codec->extradata + 2 + 48, 4096) < 0) | |||
if (avio_read(pb, st->codecpar->extradata + 2 + 48, 4096) < 0) | |||
return AVERROR(EIO); | |||
if (pb->seekable) { | |||
int got_width = 0; | |||
bin->fsize = avio_size(pb) - 1 - 192 - 4096; | |||
st->codec->width = 80<<3; | |||
st->codecpar->width = 80<<3; | |||
ff_sauce_read(s, &bin->fsize, &got_width, 0); | |||
if (!bin->width) | |||
calculate_height(st->codec, bin->fsize); | |||
calculate_height(st->codecpar, bin->fsize); | |||
avio_seek(pb, 1 + 192 + 4096, SEEK_SET); | |||
} | |||
return 0; | |||
@@ -277,24 +277,24 @@ static int idf_read_header(AVFormatContext *s) | |||
st = init_stream(s); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_id = AV_CODEC_ID_IDF; | |||
st->codecpar->codec_id = AV_CODEC_ID_IDF; | |||
if (ff_alloc_extradata(st->codec, 2 + 48 + 4096)) | |||
if (ff_alloc_extradata(st->codecpar, 2 + 48 + 4096)) | |||
return AVERROR(ENOMEM); | |||
st->codec->extradata[0] = 16; | |||
st->codec->extradata[1] = BINTEXT_PALETTE|BINTEXT_FONT; | |||
st->codecpar->extradata[0] = 16; | |||
st->codecpar->extradata[1] = BINTEXT_PALETTE|BINTEXT_FONT; | |||
avio_seek(pb, avio_size(pb) - 4096 - 48, SEEK_SET); | |||
if (avio_read(pb, st->codec->extradata + 2 + 48, 4096) < 0) | |||
if (avio_read(pb, st->codecpar->extradata + 2 + 48, 4096) < 0) | |||
return AVERROR(EIO); | |||
if (avio_read(pb, st->codec->extradata + 2, 48) < 0) | |||
if (avio_read(pb, st->codecpar->extradata + 2, 48) < 0) | |||
return AVERROR(EIO); | |||
bin->fsize = avio_size(pb) - 12 - 4096 - 48; | |||
ff_sauce_read(s, &bin->fsize, &got_width, 0); | |||
if (!bin->width) | |||
calculate_height(st->codec, bin->fsize); | |||
calculate_height(st->codecpar, bin->fsize); | |||
avio_seek(pb, 12, SEEK_SET); | |||
return 0; | |||
} | |||
@@ -55,11 +55,11 @@ static int read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id=AV_CODEC_ID_G729; | |||
st->codec->sample_rate=8000; | |||
st->codec->block_align = 16; | |||
st->codec->channels=1; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id=AV_CODEC_ID_G729; | |||
st->codecpar->sample_rate=8000; | |||
st->codecpar->block_align = 16; | |||
st->codecpar->channels=1; | |||
avpriv_set_pts_info(st, 64, 1, 100); | |||
return 0; | |||
@@ -117,16 +117,16 @@ AVInputFormat ff_bit_demuxer = { | |||
#if CONFIG_MUXERS | |||
static int write_header(AVFormatContext *s) | |||
{ | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if ((enc->codec_id != AV_CODEC_ID_G729) || enc->channels != 1) { | |||
if ((par->codec_id != AV_CODEC_ID_G729) || par->channels != 1) { | |||
av_log(s, AV_LOG_ERROR, | |||
"only codec g729 with 1 channel is supported by this format\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
enc->bits_per_coded_sample = 16; | |||
enc->block_align = (enc->bits_per_coded_sample * enc->channels) >> 3; | |||
par->bits_per_coded_sample = 16; | |||
par->block_align = (par->bits_per_coded_sample * par->channels) >> 3; | |||
return 0; | |||
} | |||
@@ -47,20 +47,20 @@ static int bmv_read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, 0); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_BMV_VIDEO; | |||
st->codec->width = 640; | |||
st->codec->height = 429; | |||
st->codec->pix_fmt = AV_PIX_FMT_PAL8; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_BMV_VIDEO; | |||
st->codecpar->width = 640; | |||
st->codecpar->height = 429; | |||
st->codecpar->format = AV_PIX_FMT_PAL8; | |||
avpriv_set_pts_info(st, 16, 1, 12); | |||
ast = avformat_new_stream(s, 0); | |||
if (!ast) | |||
return AVERROR(ENOMEM); | |||
ast->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
ast->codec->codec_id = AV_CODEC_ID_BMV_AUDIO; | |||
ast->codec->channels = 2; | |||
ast->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
ast->codec->sample_rate = 22050; | |||
ast->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
ast->codecpar->codec_id = AV_CODEC_ID_BMV_AUDIO; | |||
ast->codecpar->channels = 2; | |||
ast->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
ast->codecpar->sample_rate = 22050; | |||
avpriv_set_pts_info(ast, 16, 1, 22050); | |||
c->get_next = 1; | |||
@@ -46,16 +46,16 @@ static int read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_MS; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_MS; | |||
avio_rl32(s->pb); | |||
avio_rl32(s->pb); | |||
st->codec->sample_rate = avio_rl32(s->pb); | |||
st->codec->channels = avio_rl32(s->pb); | |||
st->codecpar->sample_rate = avio_rl32(s->pb); | |||
st->codecpar->channels = avio_rl32(s->pb); | |||
s->internal->data_offset = avio_rl32(s->pb); | |||
avio_r8(s->pb); | |||
st->codec->block_align = st->codec->channels * avio_rl32(s->pb); | |||
st->codecpar->block_align = st->codecpar->channels * avio_rl32(s->pb); | |||
avio_seek(s->pb, s->internal->data_offset, SEEK_SET); | |||
@@ -66,7 +66,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVStream *st = s->streams[0]; | |||
return av_get_packet(s->pb, pkt, st->codec->block_align); | |||
return av_get_packet(s->pb, pkt, st->codecpar->block_align); | |||
} | |||
AVInputFormat ff_boa_demuxer = { | |||
@@ -99,7 +99,7 @@ static int read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
avio_skip(s->pb, 4); | |||
@@ -197,15 +197,15 @@ static int read_header(AVFormatContext *s) | |||
} | |||
loop = avio_r8(s->pb); // loop flag | |||
st->codec->codec_id = codec; | |||
st->codec->channels = avio_r8(s->pb); | |||
if (!st->codec->channels) | |||
st->codecpar->codec_id = codec; | |||
st->codecpar->channels = avio_r8(s->pb); | |||
if (!st->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
avio_skip(s->pb, 1); // padding | |||
st->codec->sample_rate = bfstm ? read32(s) : read16(s); | |||
if (st->codec->sample_rate <= 0) | |||
st->codecpar->sample_rate = bfstm ? read32(s) : read16(s); | |||
if (st->codecpar->sample_rate <= 0) | |||
return AVERROR_INVALIDDATA; | |||
if (!bfstm) | |||
@@ -214,7 +214,7 @@ static int read_header(AVFormatContext *s) | |||
if (loop) { | |||
if (av_dict_set_int(&s->metadata, "loop_start", | |||
av_rescale(read32(s), AV_TIME_BASE, | |||
st->codec->sample_rate), | |||
st->codecpar->sample_rate), | |||
0) < 0) | |||
return AVERROR(ENOMEM); | |||
} else { | |||
@@ -223,7 +223,7 @@ static int read_header(AVFormatContext *s) | |||
st->start_time = 0; | |||
st->duration = read32(s); | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
if (!bfstm) | |||
start = read32(s); | |||
@@ -235,14 +235,14 @@ static int read_header(AVFormatContext *s) | |||
} | |||
b->block_size = read32(s); | |||
if (b->block_size > UINT32_MAX / st->codec->channels) | |||
if (b->block_size > UINT32_MAX / st->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
b->samples_per_block = read32(s); | |||
b->last_block_used_bytes = read32(s); | |||
b->last_block_samples = read32(s); | |||
b->last_block_size = read32(s); | |||
if (b->last_block_size > UINT32_MAX / st->codec->channels) | |||
if (b->last_block_size > UINT32_MAX / st->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
if (b->last_block_used_bytes > b->last_block_size) | |||
return AVERROR_INVALIDDATA; | |||
@@ -255,16 +255,16 @@ static int read_header(AVFormatContext *s) | |||
if (!bfstm) | |||
toffset = read32(s) + 16LL; | |||
else | |||
toffset = toffset + read32(s) + st->codec->channels * 8 - 8; | |||
toffset = toffset + read32(s) + st->codecpar->channels * 8 - 8; | |||
if (toffset > size) | |||
return AVERROR_INVALIDDATA; | |||
avio_skip(s->pb, pos + toffset - avio_tell(s->pb)); | |||
b->table = av_mallocz(32 * st->codec->channels); | |||
b->table = av_mallocz(32 * st->codecpar->channels); | |||
if (!b->table) | |||
return AVERROR(ENOMEM); | |||
for (ch = 0; ch < st->codec->channels; ch++) { | |||
for (ch = 0; ch < st->codecpar->channels; ch++) { | |||
if (avio_read(s->pb, b->table + ch * 32, 32) != 32) { | |||
ret = AVERROR_INVALIDDATA; | |||
goto fail; | |||
@@ -295,7 +295,7 @@ static int read_header(AVFormatContext *s) | |||
codec != AV_CODEC_ID_ADPCM_THP_LE) | |||
goto skip; | |||
asize = b->block_count * st->codec->channels * 4; | |||
asize = b->block_count * st->codecpar->channels * 4; | |||
if (size < asize) { | |||
ret = AVERROR_INVALIDDATA; | |||
goto fail; | |||
@@ -357,7 +357,7 @@ fail: | |||
static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVCodecContext *codec = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
BRSTMDemuxContext *b = s->priv_data; | |||
uint32_t samples, size, skip = 0; | |||
int ret, i; | |||
@@ -385,8 +385,8 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
return AVERROR_EOF; | |||
} | |||
if (codec->codec_id == AV_CODEC_ID_ADPCM_THP || | |||
codec->codec_id == AV_CODEC_ID_ADPCM_THP_LE) { | |||
if (par->codec_id == AV_CODEC_ID_ADPCM_THP || | |||
par->codec_id == AV_CODEC_ID_ADPCM_THP_LE) { | |||
uint8_t *dst; | |||
if (!b->adpc) { | |||
@@ -394,30 +394,30 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
return AVERROR_INVALIDDATA; | |||
} | |||
if (!b->table) { | |||
b->table = av_mallocz(32 * codec->channels); | |||
b->table = av_mallocz(32 * par->channels); | |||
if (!b->table) | |||
return AVERROR(ENOMEM); | |||
} | |||
if (size > (INT_MAX - 32 - 4) || | |||
(32 + 4 + size) > (INT_MAX / codec->channels) || | |||
(32 + 4 + size) * codec->channels > INT_MAX - 8) | |||
(32 + 4 + size) > (INT_MAX / par->channels) || | |||
(32 + 4 + size) * par->channels > INT_MAX - 8) | |||
return AVERROR_INVALIDDATA; | |||
if (av_new_packet(pkt, 8 + (32 + 4 + size) * codec->channels) < 0) | |||
if (av_new_packet(pkt, 8 + (32 + 4 + size) * par->channels) < 0) | |||
return AVERROR(ENOMEM); | |||
dst = pkt->data; | |||
if (codec->codec_id == AV_CODEC_ID_ADPCM_THP_LE) { | |||
bytestream_put_le32(&dst, size * codec->channels); | |||
if (par->codec_id == AV_CODEC_ID_ADPCM_THP_LE) { | |||
bytestream_put_le32(&dst, size * par->channels); | |||
bytestream_put_le32(&dst, samples); | |||
} else { | |||
bytestream_put_be32(&dst, size * codec->channels); | |||
bytestream_put_be32(&dst, size * par->channels); | |||
bytestream_put_be32(&dst, samples); | |||
} | |||
bytestream_put_buffer(&dst, b->table, 32 * codec->channels); | |||
bytestream_put_buffer(&dst, b->adpc + 4 * codec->channels * | |||
(b->current_block - 1), 4 * codec->channels); | |||
bytestream_put_buffer(&dst, b->table, 32 * par->channels); | |||
bytestream_put_buffer(&dst, b->adpc + 4 * par->channels * | |||
(b->current_block - 1), 4 * par->channels); | |||
for (i = 0; i < codec->channels; i++) { | |||
for (i = 0; i < par->channels; i++) { | |||
ret = avio_read(s->pb, dst, size); | |||
dst += size; | |||
avio_skip(s->pb, skip); | |||
@@ -428,7 +428,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
} | |||
pkt->duration = samples; | |||
} else { | |||
size *= codec->channels; | |||
size *= par->channels; | |||
ret = av_get_packet(s->pb, pkt, size); | |||
} | |||
@@ -449,7 +449,7 @@ static int read_seek(AVFormatContext *s, int stream_index, | |||
timestamp /= b->samples_per_block; | |||
ret = avio_seek(s->pb, b->data_start + timestamp * b->block_size * | |||
st->codec->channels, SEEK_SET); | |||
st->codecpar->channels, SEEK_SET); | |||
if (ret < 0) | |||
return ret; | |||
@@ -83,10 +83,10 @@ static int read_header(AVFormatContext *s) | |||
if (!video) | |||
return AVERROR(ENOMEM); | |||
video->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
video->codec->codec_id = AV_CODEC_ID_C93; | |||
video->codec->width = 320; | |||
video->codec->height = 192; | |||
video->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
video->codecpar->codec_id = AV_CODEC_ID_C93; | |||
video->codecpar->width = 320; | |||
video->codecpar->height = 192; | |||
/* 4:3 320x200 with 8 empty lines */ | |||
video->sample_aspect_ratio = (AVRational) { 5, 6 }; | |||
avpriv_set_pts_info(video, 64, 2, 25); | |||
@@ -120,7 +120,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||
c93->audio = avformat_new_stream(s, NULL); | |||
if (!c93->audio) | |||
return AVERROR(ENOMEM); | |||
c93->audio->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
c93->audio->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
} | |||
avio_skip(pb, 26); /* VOC header */ | |||
ret = ff_voc_get_packet(s, pkt, c93->audio, datasize - 26); | |||
@@ -69,29 +69,29 @@ static int read_desc_chunk(AVFormatContext *s) | |||
return AVERROR(ENOMEM); | |||
/* parse format description */ | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->sample_rate = av_int2double(avio_rb64(pb)); | |||
st->codec->codec_tag = avio_rl32(pb); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->sample_rate = av_int2double(avio_rb64(pb)); | |||
st->codecpar->codec_tag = avio_rl32(pb); | |||
flags = avio_rb32(pb); | |||
caf->bytes_per_packet = avio_rb32(pb); | |||
st->codec->block_align = caf->bytes_per_packet; | |||
st->codecpar->block_align = caf->bytes_per_packet; | |||
caf->frames_per_packet = avio_rb32(pb); | |||
st->codec->channels = avio_rb32(pb); | |||
st->codec->bits_per_coded_sample = avio_rb32(pb); | |||
st->codecpar->channels = avio_rb32(pb); | |||
st->codecpar->bits_per_coded_sample = avio_rb32(pb); | |||
/* calculate bit rate for constant size packets */ | |||
if (caf->frames_per_packet > 0 && caf->bytes_per_packet > 0) { | |||
st->codec->bit_rate = (uint64_t)st->codec->sample_rate * (uint64_t)caf->bytes_per_packet * 8 | |||
/ (uint64_t)caf->frames_per_packet; | |||
st->codecpar->bit_rate = (uint64_t)st->codecpar->sample_rate * (uint64_t)caf->bytes_per_packet * 8 | |||
/ (uint64_t)caf->frames_per_packet; | |||
} else { | |||
st->codec->bit_rate = 0; | |||
st->codecpar->bit_rate = 0; | |||
} | |||
/* determine codec */ | |||
if (st->codec->codec_tag == MKTAG('l','p','c','m')) | |||
st->codec->codec_id = ff_mov_get_lpcm_codec_id(st->codec->bits_per_coded_sample, (flags ^ 0x2) | 0x4); | |||
if (st->codecpar->codec_tag == MKTAG('l','p','c','m')) | |||
st->codecpar->codec_id = ff_mov_get_lpcm_codec_id(st->codecpar->bits_per_coded_sample, (flags ^ 0x2) | 0x4); | |||
else | |||
st->codec->codec_id = ff_codec_get_id(ff_codec_caf_tags, st->codec->codec_tag); | |||
st->codecpar->codec_id = ff_codec_get_id(ff_codec_caf_tags, st->codecpar->codec_tag); | |||
return 0; | |||
} | |||
@@ -104,7 +104,7 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) | |||
if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) | |||
return -1; | |||
if (st->codec->codec_id == AV_CODEC_ID_AAC) { | |||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC) { | |||
/* The magic cookie format for AAC is an mp4 esds atom. | |||
The lavc AAC decoder requires the data from the codec specific | |||
description as extradata input. */ | |||
@@ -113,13 +113,13 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) | |||
strt = avio_tell(pb); | |||
ff_mov_read_esds(s, pb); | |||
skip = size - (avio_tell(pb) - strt); | |||
if (skip < 0 || !st->codec->extradata || | |||
st->codec->codec_id != AV_CODEC_ID_AAC) { | |||
if (skip < 0 || !st->codecpar->extradata || | |||
st->codecpar->codec_id != AV_CODEC_ID_AAC) { | |||
av_log(s, AV_LOG_ERROR, "invalid AAC magic cookie\n"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
avio_skip(pb, skip); | |||
} else if (st->codec->codec_id == AV_CODEC_ID_ALAC) { | |||
} else if (st->codecpar->codec_id == AV_CODEC_ID_ALAC) { | |||
#define ALAC_PREAMBLE 12 | |||
#define ALAC_HEADER 36 | |||
#define ALAC_NEW_KUKI 24 | |||
@@ -134,8 +134,8 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) | |||
return AVERROR_INVALIDDATA; | |||
} | |||
av_freep(&st->codec->extradata); | |||
if (ff_alloc_extradata(st->codec, ALAC_HEADER)) | |||
av_freep(&st->codecpar->extradata); | |||
if (ff_alloc_extradata(st->codecpar, ALAC_HEADER)) | |||
return AVERROR(ENOMEM); | |||
/* For the old style cookie, we skip 12 bytes, then read 36 bytes. | |||
@@ -145,30 +145,30 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) | |||
if (!memcmp(&preamble[4], "frmaalac", 8)) { | |||
if (size < ALAC_PREAMBLE + ALAC_HEADER) { | |||
av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n"); | |||
av_freep(&st->codec->extradata); | |||
av_freep(&st->codecpar->extradata); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
if (avio_read(pb, st->codec->extradata, ALAC_HEADER) != ALAC_HEADER) { | |||
if (avio_read(pb, st->codecpar->extradata, ALAC_HEADER) != ALAC_HEADER) { | |||
av_log(s, AV_LOG_ERROR, "failed to read kuki header\n"); | |||
av_freep(&st->codec->extradata); | |||
av_freep(&st->codecpar->extradata); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
avio_skip(pb, size - ALAC_PREAMBLE - ALAC_HEADER); | |||
} else { | |||
AV_WB32(st->codec->extradata, 36); | |||
memcpy(&st->codec->extradata[4], "alac", 4); | |||
AV_WB32(&st->codec->extradata[8], 0); | |||
memcpy(&st->codec->extradata[12], preamble, 12); | |||
if (avio_read(pb, &st->codec->extradata[24], ALAC_NEW_KUKI - 12) != ALAC_NEW_KUKI - 12) { | |||
AV_WB32(st->codecpar->extradata, 36); | |||
memcpy(&st->codecpar->extradata[4], "alac", 4); | |||
AV_WB32(&st->codecpar->extradata[8], 0); | |||
memcpy(&st->codecpar->extradata[12], preamble, 12); | |||
if (avio_read(pb, &st->codecpar->extradata[24], ALAC_NEW_KUKI - 12) != ALAC_NEW_KUKI - 12) { | |||
av_log(s, AV_LOG_ERROR, "failed to read new kuki header\n"); | |||
av_freep(&st->codec->extradata); | |||
av_freep(&st->codecpar->extradata); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
avio_skip(pb, size - ALAC_NEW_KUKI); | |||
} | |||
} else { | |||
av_freep(&st->codec->extradata); | |||
if (ff_get_extradata(st->codec, pb, size) < 0) | |||
av_freep(&st->codecpar->extradata); | |||
if (ff_get_extradata(st->codecpar, pb, size) < 0) | |||
return AVERROR(ENOMEM); | |||
} | |||
@@ -323,15 +323,15 @@ static int read_header(AVFormatContext *s) | |||
if (caf->data_size > 0) | |||
st->nb_frames = (caf->data_size / caf->bytes_per_packet) * caf->frames_per_packet; | |||
} else if (st->nb_index_entries && st->duration > 0) { | |||
st->codec->bit_rate = st->codec->sample_rate * caf->data_size * 8 / | |||
st->duration; | |||
st->codecpar->bit_rate = st->codecpar->sample_rate * caf->data_size * 8 / | |||
st->duration; | |||
} else { | |||
av_log(s, AV_LOG_ERROR, "Missing packet table. It is required when " | |||
"block size or frame size are variable.\n"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
st->start_time = 0; | |||
/* position the stream at the start of data */ | |||
@@ -102,19 +102,19 @@ static uint32_t samples_per_packet(enum AVCodecID codec_id, int channels, int bl | |||
static int caf_write_header(AVFormatContext *s) | |||
{ | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
CAFContext *caf = s->priv_data; | |||
AVDictionaryEntry *t = NULL; | |||
unsigned int codec_tag = ff_codec_get_tag(ff_codec_caf_tags, enc->codec_id); | |||
unsigned int codec_tag = ff_codec_get_tag(ff_codec_caf_tags, par->codec_id); | |||
int64_t chunk_size = 0; | |||
int frame_size = enc->frame_size; | |||
int frame_size = par->frame_size; | |||
if (s->nb_streams != 1) { | |||
av_log(s, AV_LOG_ERROR, "CAF files have exactly one stream\n"); | |||
return AVERROR(EINVAL); | |||
} | |||
switch (enc->codec_id) { | |||
switch (par->codec_id) { | |||
case AV_CODEC_ID_AAC: | |||
av_log(s, AV_LOG_ERROR, "muxing codec currently unsupported\n"); | |||
return AVERROR_PATCHWELCOME; | |||
@@ -125,13 +125,13 @@ static int caf_write_header(AVFormatContext *s) | |||
return AVERROR_INVALIDDATA; | |||
} | |||
if (!enc->block_align && !pb->seekable) { | |||
if (!par->block_align && !pb->seekable) { | |||
av_log(s, AV_LOG_ERROR, "Muxing variable packet size not supported on non seekable output\n"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
if (enc->codec_id != AV_CODEC_ID_MP3 || frame_size != 576) | |||
frame_size = samples_per_packet(enc->codec_id, enc->channels, enc->block_align); | |||
if (par->codec_id != AV_CODEC_ID_MP3 || frame_size != 576) | |||
frame_size = samples_per_packet(par->codec_id, par->channels, par->block_align); | |||
ffio_wfourcc(pb, "caff"); //< mFileType | |||
avio_wb16(pb, 1); //< mFileVersion | |||
@@ -139,26 +139,26 @@ static int caf_write_header(AVFormatContext *s) | |||
ffio_wfourcc(pb, "desc"); //< Audio Description chunk | |||
avio_wb64(pb, 32); //< mChunkSize | |||
avio_wb64(pb, av_double2int(enc->sample_rate)); //< mSampleRate | |||
avio_wb64(pb, av_double2int(par->sample_rate)); //< mSampleRate | |||
avio_wl32(pb, codec_tag); //< mFormatID | |||
avio_wb32(pb, codec_flags(enc->codec_id)); //< mFormatFlags | |||
avio_wb32(pb, enc->block_align); //< mBytesPerPacket | |||
avio_wb32(pb, codec_flags(par->codec_id)); //< mFormatFlags | |||
avio_wb32(pb, par->block_align); //< mBytesPerPacket | |||
avio_wb32(pb, frame_size); //< mFramesPerPacket | |||
avio_wb32(pb, enc->channels); //< mChannelsPerFrame | |||
avio_wb32(pb, av_get_bits_per_sample(enc->codec_id)); //< mBitsPerChannel | |||
avio_wb32(pb, par->channels); //< mChannelsPerFrame | |||
avio_wb32(pb, av_get_bits_per_sample(par->codec_id)); //< mBitsPerChannel | |||
if (enc->channel_layout) { | |||
if (par->channel_layout) { | |||
ffio_wfourcc(pb, "chan"); | |||
avio_wb64(pb, 12); | |||
ff_mov_write_chan(pb, enc->channel_layout); | |||
ff_mov_write_chan(pb, par->channel_layout); | |||
} | |||
if (enc->codec_id == AV_CODEC_ID_ALAC) { | |||
if (par->codec_id == AV_CODEC_ID_ALAC) { | |||
ffio_wfourcc(pb, "kuki"); | |||
avio_wb64(pb, 12 + enc->extradata_size); | |||
avio_wb64(pb, 12 + par->extradata_size); | |||
avio_write(pb, "\0\0\0\14frmaalac", 12); | |||
avio_write(pb, enc->extradata, enc->extradata_size); | |||
} else if (enc->codec_id == AV_CODEC_ID_AMR_NB) { | |||
avio_write(pb, par->extradata, par->extradata_size); | |||
} else if (par->codec_id == AV_CODEC_ID_AMR_NB) { | |||
ffio_wfourcc(pb, "kuki"); | |||
avio_wb64(pb, 29); | |||
avio_write(pb, "\0\0\0\14frmasamr", 12); | |||
@@ -169,10 +169,10 @@ static int caf_write_header(AVFormatContext *s) | |||
avio_wb16(pb, 0x81FF); /* Mode set (all modes for AMR_NB) */ | |||
avio_w8(pb, 0x00); /* Mode change period (no restriction) */ | |||
avio_w8(pb, 0x01); /* Frames per sample */ | |||
} else if (enc->codec_id == AV_CODEC_ID_QDM2) { | |||
} else if (par->codec_id == AV_CODEC_ID_QDM2) { | |||
ffio_wfourcc(pb, "kuki"); | |||
avio_wb64(pb, enc->extradata_size); | |||
avio_write(pb, enc->extradata, enc->extradata_size); | |||
avio_wb64(pb, par->extradata_size); | |||
avio_write(pb, par->extradata, par->extradata_size); | |||
} | |||
ff_standardize_creation_time(s); | |||
@@ -204,7 +204,7 @@ static int caf_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
CAFContext *caf = s->priv_data; | |||
avio_write(s->pb, pkt->data, pkt->size); | |||
if (!s->streams[0]->codec->block_align) { | |||
if (!s->streams[0]->codecpar->block_align) { | |||
void *pkt_sizes = caf->pkt_sizes; | |||
int i, alloc_size = caf->size_entries_used + 5; | |||
if (alloc_size < 0) { | |||
@@ -233,7 +233,7 @@ static int caf_write_trailer(AVFormatContext *s) | |||
{ | |||
CAFContext *caf = s->priv_data; | |||
AVIOContext *pb = s->pb; | |||
AVCodecContext *enc = s->streams[0]->codec; | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if (pb->seekable) { | |||
int64_t file_size = avio_tell(pb); | |||
@@ -241,11 +241,11 @@ static int caf_write_trailer(AVFormatContext *s) | |||
avio_seek(pb, caf->data, SEEK_SET); | |||
avio_wb64(pb, file_size - caf->data - 8); | |||
avio_seek(pb, file_size, SEEK_SET); | |||
if (!enc->block_align) { | |||
if (!par->block_align) { | |||
ffio_wfourcc(pb, "pakt"); | |||
avio_wb64(pb, caf->size_entries_used + 24); | |||
avio_wb64(pb, caf->packets); ///< mNumberPackets | |||
avio_wb64(pb, caf->packets * samples_per_packet(enc->codec_id, enc->channels, enc->block_align)); ///< mNumberValidFrames | |||
avio_wb64(pb, caf->packets * samples_per_packet(par->codec_id, par->channels, par->block_align)); ///< mNumberValidFrames | |||
avio_wb32(pb, 0); ///< mPrimingFrames | |||
avio_wb32(pb, 0); ///< mRemainderFrames | |||
avio_write(pb, caf->pkt_sizes, caf->size_entries_used); | |||
@@ -39,8 +39,8 @@ static int read_header(AVFormatContext *s) | |||
if (!vst) | |||
return AVERROR(ENOMEM); | |||
vst->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vst->codec->codec_id = AV_CODEC_ID_CDGRAPHICS; | |||
vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
vst->codecpar->codec_id = AV_CODEC_ID_CDGRAPHICS; | |||
/// 75 sectors/sec * 4 packets/sector = 300 packets/sec | |||
avpriv_set_pts_info(vst, 32, 1, 300); | |||
@@ -150,17 +150,17 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_tag = 0; | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S8; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_tag = 0; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S8; | |||
if (cdxl->header[1] & 0x10) { | |||
st->codec->channels = 2; | |||
st->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
st->codecpar->channels = 2; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
} else { | |||
st->codec->channels = 1; | |||
st->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codecpar->channels = 1; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
} | |||
st->codec->sample_rate = cdxl->sample_rate; | |||
st->codecpar->sample_rate = cdxl->sample_rate; | |||
st->start_time = 0; | |||
cdxl->audio_stream_index = st->index; | |||
avpriv_set_pts_info(st, 64, 1, cdxl->sample_rate); | |||
@@ -179,11 +179,11 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_tag = 0; | |||
st->codec->codec_id = AV_CODEC_ID_CDXL; | |||
st->codec->width = width; | |||
st->codec->height = height; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_tag = 0; | |||
st->codecpar->codec_id = AV_CODEC_ID_CDXL; | |||
st->codecpar->width = width; | |||
st->codecpar->height = height; | |||
if (audio_size + video_size && cdxl->filesize > 0) { | |||
frames = cdxl->filesize / (audio_size + video_size); | |||
@@ -85,17 +85,17 @@ static int write_header(AVFormatContext *s) | |||
st = s->streams[0]; | |||
if (st->codec->channels > 2) { | |||
if (st->codecpar->channels > 2) { | |||
av_log(s, AV_LOG_ERROR, "Only up to 2 channels are supported\n"); | |||
goto fail; | |||
} | |||
if (st->codec->sample_rate < 1000) { | |||
if (st->codecpar->sample_rate < 1000) { | |||
av_log(s, AV_LOG_ERROR, "Sampling rate must be at least 1000\n"); | |||
goto fail; | |||
} | |||
if (!chromaprint_start(cpr->ctx, st->codec->sample_rate, st->codec->channels)) { | |||
if (!chromaprint_start(cpr->ctx, st->codecpar->sample_rate, st->codecpar->channels)) { | |||
av_log(s, AV_LOG_ERROR, "Failed to start chromaprint\n"); | |||
goto fail; | |||
} | |||
@@ -101,9 +101,9 @@ static int cine_read_header(AVFormatContext *avctx) | |||
st = avformat_new_stream(avctx, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codec->codec_tag = 0; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; | |||
st->codecpar->codec_tag = 0; | |||
/* CINEFILEHEADER structure */ | |||
avio_skip(pb, 4); // Type, Headersize | |||
@@ -127,8 +127,8 @@ static int cine_read_header(AVFormatContext *avctx) | |||
/* BITMAPINFOHEADER structure */ | |||
avio_seek(pb, offImageHeader, SEEK_SET); | |||
avio_skip(pb, 4); //biSize | |||
st->codec->width = avio_rl32(pb); | |||
st->codec->height = avio_rl32(pb); | |||
st->codecpar->width = avio_rl32(pb); | |||
st->codecpar->height = avio_rl32(pb); | |||
if (avio_rl16(pb) != 1) // biPlanes | |||
return AVERROR_INVALIDDATA; | |||
@@ -144,7 +144,7 @@ static int cine_read_header(AVFormatContext *avctx) | |||
vflip = 0; | |||
break; | |||
case 0x100: /* BI_PACKED */ | |||
st->codec->codec_tag = MKTAG('B', 'I', 'T', 0); | |||
st->codecpar->codec_tag = MKTAG('B', 'I', 'T', 0); | |||
vflip = 1; | |||
break; | |||
default: | |||
@@ -167,8 +167,8 @@ static int cine_read_header(AVFormatContext *avctx) | |||
avio_skip(pb, 616); // Binning .. bFlipH | |||
if (!avio_rl32(pb) ^ vflip) { | |||
st->codec->extradata = av_strdup("BottomUp"); | |||
st->codec->extradata_size = 9; | |||
st->codecpar->extradata = av_strdup("BottomUp"); | |||
st->codecpar->extradata_size = 9; | |||
} | |||
avio_skip(pb, 4); // Grid | |||
@@ -193,17 +193,17 @@ static int cine_read_header(AVFormatContext *avctx) | |||
set_metadata_float(&st->metadata, "wbgain[0].b", av_int2float(avio_rl32(pb)), 1); | |||
avio_skip(pb, 36); // WBGain[1].. WBView | |||
st->codec->bits_per_coded_sample = avio_rl32(pb); | |||
st->codecpar->bits_per_coded_sample = avio_rl32(pb); | |||
if (compression == CC_RGB) { | |||
if (biBitCount == 8) { | |||
st->codec->pix_fmt = AV_PIX_FMT_GRAY8; | |||
st->codecpar->format = AV_PIX_FMT_GRAY8; | |||
} else if (biBitCount == 16) { | |||
st->codec->pix_fmt = AV_PIX_FMT_GRAY16LE; | |||
st->codecpar->format = AV_PIX_FMT_GRAY16LE; | |||
} else if (biBitCount == 24) { | |||
st->codec->pix_fmt = AV_PIX_FMT_BGR24; | |||
st->codecpar->format = AV_PIX_FMT_BGR24; | |||
} else if (biBitCount == 48) { | |||
st->codec->pix_fmt = AV_PIX_FMT_BGR48LE; | |||
st->codecpar->format = AV_PIX_FMT_BGR48LE; | |||
} else { | |||
avpriv_request_sample(avctx, "unsupported biBitCount %i", biBitCount); | |||
return AVERROR_INVALIDDATA; | |||
@@ -212,9 +212,9 @@ static int cine_read_header(AVFormatContext *avctx) | |||
switch (CFA & 0xFFFFFF) { | |||
case CFA_BAYER: | |||
if (biBitCount == 8) { | |||
st->codec->pix_fmt = AV_PIX_FMT_BAYER_GBRG8; | |||
st->codecpar->format = AV_PIX_FMT_BAYER_GBRG8; | |||
} else if (biBitCount == 16) { | |||
st->codec->pix_fmt = AV_PIX_FMT_BAYER_GBRG16LE; | |||
st->codecpar->format = AV_PIX_FMT_BAYER_GBRG16LE; | |||
} else { | |||
avpriv_request_sample(avctx, "unsupported biBitCount %i", biBitCount); | |||
return AVERROR_INVALIDDATA; | |||
@@ -222,9 +222,9 @@ static int cine_read_header(AVFormatContext *avctx) | |||
break; | |||
case CFA_BAYERFLIP: | |||
if (biBitCount == 8) { | |||
st->codec->pix_fmt = AV_PIX_FMT_BAYER_RGGB8; | |||
st->codecpar->format = AV_PIX_FMT_BAYER_RGGB8; | |||
} else if (biBitCount == 16) { | |||
st->codec->pix_fmt = AV_PIX_FMT_BAYER_RGGB16LE; | |||
st->codecpar->format = AV_PIX_FMT_BAYER_RGGB16LE; | |||
} else { | |||
avpriv_request_sample(avctx, "unsupported biBitCount %i", biBitCount); | |||
return AVERROR_INVALIDDATA; | |||
@@ -35,6 +35,7 @@ typedef enum ConcatMatchMode { | |||
typedef struct ConcatStream { | |||
AVBitStreamFilterContext *bsf; | |||
AVCodecContext *avctx; | |||
int out_stream_index; | |||
} ConcatStream; | |||
@@ -164,19 +165,28 @@ static int copy_stream_props(AVStream *st, AVStream *source_st) | |||
{ | |||
int ret; | |||
if (st->codec->codec_id || !source_st->codec->codec_id) { | |||
if (st->codec->extradata_size < source_st->codec->extradata_size) { | |||
ret = ff_alloc_extradata(st->codec, | |||
source_st->codec->extradata_size); | |||
if (st->codecpar->codec_id || !source_st->codecpar->codec_id) { | |||
if (st->codecpar->extradata_size < source_st->codecpar->extradata_size) { | |||
if (st->codecpar->extradata) { | |||
av_freep(&st->codecpar->extradata); | |||
st->codecpar->extradata_size = 0; | |||
} | |||
ret = ff_alloc_extradata(st->codecpar, | |||
source_st->codecpar->extradata_size); | |||
if (ret < 0) | |||
return ret; | |||
} | |||
memcpy(st->codec->extradata, source_st->codec->extradata, | |||
source_st->codec->extradata_size); | |||
memcpy(st->codecpar->extradata, source_st->codecpar->extradata, | |||
source_st->codecpar->extradata_size); | |||
return 0; | |||
} | |||
if ((ret = avcodec_copy_context(st->codec, source_st->codec)) < 0) | |||
if ((ret = avcodec_parameters_copy(st->codecpar, source_st->codecpar)) < 0) | |||
return ret; | |||
/* We don't want to carry around MP4-style extradata, since we are usoign a bsf anyway. */ | |||
if (st->codecpar->codec_id == AV_CODEC_ID_H264) { | |||
av_freep(&st->codecpar->extradata); | |||
st->codecpar->extradata_size = 0; | |||
} | |||
st->r_frame_rate = source_st->r_frame_rate; | |||
st->avg_frame_rate = source_st->avg_frame_rate; | |||
st->time_base = source_st->time_base; | |||
@@ -192,9 +202,10 @@ static int detect_stream_specific(AVFormatContext *avf, int idx) | |||
AVStream *st = cat->avf->streams[idx]; | |||
ConcatStream *cs = &cat->cur_file->streams[idx]; | |||
AVBitStreamFilterContext *bsf; | |||
int ret; | |||
if (cat->auto_convert && st->codec->codec_id == AV_CODEC_ID_H264 && | |||
(st->codec->extradata_size < 4 || AV_RB32(st->codec->extradata) != 1)) { | |||
if (cat->auto_convert && st->codecpar->codec_id == AV_CODEC_ID_H264 && | |||
(st->codecpar->extradata_size < 4 || AV_RB32(st->codecpar->extradata) != 1)) { | |||
av_log(cat->avf, AV_LOG_INFO, | |||
"Auto-inserting h264_mp4toannexb bitstream filter\n"); | |||
if (!(bsf = av_bitstream_filter_init("h264_mp4toannexb"))) { | |||
@@ -203,6 +214,17 @@ static int detect_stream_specific(AVFormatContext *avf, int idx) | |||
return AVERROR_BSF_NOT_FOUND; | |||
} | |||
cs->bsf = bsf; | |||
cs->avctx = avcodec_alloc_context3(NULL); | |||
if (!cs->avctx) | |||
return AVERROR(ENOMEM); | |||
ret = avcodec_parameters_to_context(cs->avctx, st->codecpar); | |||
if (ret < 0) { | |||
avcodec_free_context(&cs->avctx); | |||
return ret; | |||
} | |||
} | |||
return 0; | |||
} | |||
@@ -338,15 +360,21 @@ static int open_file(AVFormatContext *avf, unsigned fileno) | |||
static int concat_read_close(AVFormatContext *avf) | |||
{ | |||
ConcatContext *cat = avf->priv_data; | |||
unsigned i; | |||
unsigned i, j; | |||
if (cat->avf) | |||
avformat_close_input(&cat->avf); | |||
for (i = 0; i < cat->nb_files; i++) { | |||
av_freep(&cat->files[i].url); | |||
for (j = 0; j < cat->avf->nb_streams; j++) { | |||
if (cat->files[i].streams[j].avctx) | |||
avcodec_free_context(&cat->files[i].streams[j].avctx); | |||
if (cat->files[i].streams[j].bsf) | |||
av_bitstream_filter_close(cat->files[i].streams[j].bsf); | |||
} | |||
av_freep(&cat->files[i].streams); | |||
av_dict_free(&cat->files[i].metadata); | |||
} | |||
if (cat->avf) | |||
avformat_close_input(&cat->avf); | |||
av_freep(&cat->files); | |||
return 0; | |||
} | |||
@@ -499,7 +527,8 @@ static int filter_packet(AVFormatContext *avf, ConcatStream *cs, AVPacket *pkt) | |||
av_assert0(cs->out_stream_index >= 0); | |||
for (bsf = cs->bsf; bsf; bsf = bsf->next) { | |||
pkt2 = *pkt; | |||
ret = av_bitstream_filter_filter(bsf, st->codec, NULL, | |||
ret = av_bitstream_filter_filter(bsf, cs->avctx, NULL, | |||
&pkt2.data, &pkt2.size, | |||
pkt->data, pkt->size, | |||
!!(pkt->flags & AV_PKT_FLAG_KEY)); | |||
@@ -507,6 +536,21 @@ static int filter_packet(AVFormatContext *avf, ConcatStream *cs, AVPacket *pkt) | |||
av_packet_unref(pkt); | |||
return ret; | |||
} | |||
if (cs->avctx->extradata_size > st->codecpar->extradata_size) { | |||
int eret; | |||
if (st->codecpar->extradata) | |||
av_freep(&st->codecpar->extradata); | |||
eret = ff_alloc_extradata(st->codecpar, cs->avctx->extradata_size); | |||
if (eret < 0) { | |||
av_packet_unref(pkt); | |||
return AVERROR(ENOMEM); | |||
} | |||
st->codecpar->extradata_size = cs->avctx->extradata_size; | |||
memcpy(st->codecpar->extradata, cs->avctx->extradata, cs->avctx->extradata_size); | |||
} | |||
av_assert0(pkt2.buf); | |||
if (ret == 0 && pkt2.data != pkt->data) { | |||
if ((ret = av_copy_packet(&pkt2, pkt)) < 0) { | |||
@@ -109,19 +109,19 @@ static int dash_write(void *opaque, uint8_t *buf, int buf_size) | |||
} | |||
// RFC 6381 | |||
static void set_codec_str(AVFormatContext *s, AVCodecContext *codec, | |||
static void set_codec_str(AVFormatContext *s, AVCodecParameters *par, | |||
char *str, int size) | |||
{ | |||
const AVCodecTag *tags[2] = { NULL, NULL }; | |||
uint32_t tag; | |||
if (codec->codec_type == AVMEDIA_TYPE_VIDEO) | |||
if (par->codec_type == AVMEDIA_TYPE_VIDEO) | |||
tags[0] = ff_codec_movvideo_tags; | |||
else if (codec->codec_type == AVMEDIA_TYPE_AUDIO) | |||
else if (par->codec_type == AVMEDIA_TYPE_AUDIO) | |||
tags[0] = ff_codec_movaudio_tags; | |||
else | |||
return; | |||
tag = av_codec_get_tag(tags, codec->codec_id); | |||
tag = av_codec_get_tag(tags, par->codec_id); | |||
if (!tag) | |||
return; | |||
if (size < 5) | |||
@@ -132,17 +132,17 @@ static void set_codec_str(AVFormatContext *s, AVCodecContext *codec, | |||
if (!strcmp(str, "mp4a") || !strcmp(str, "mp4v")) { | |||
uint32_t oti; | |||
tags[0] = ff_mp4_obj_type; | |||
oti = av_codec_get_tag(tags, codec->codec_id); | |||
oti = av_codec_get_tag(tags, par->codec_id); | |||
if (oti) | |||
av_strlcatf(str, size, ".%02x", oti); | |||
else | |||
return; | |||
if (tag == MKTAG('m', 'p', '4', 'a')) { | |||
if (codec->extradata_size >= 2) { | |||
int aot = codec->extradata[0] >> 3; | |||
if (par->extradata_size >= 2) { | |||
int aot = par->extradata[0] >> 3; | |||
if (aot == 31) | |||
aot = ((AV_RB16(codec->extradata) >> 5) & 0x3f) + 32; | |||
aot = ((AV_RB16(par->extradata) >> 5) & 0x3f) + 32; | |||
av_strlcatf(str, size, ".%d", aot); | |||
} | |||
} else if (tag == MKTAG('m', 'p', '4', 'v')) { | |||
@@ -151,8 +151,8 @@ static void set_codec_str(AVFormatContext *s, AVCodecContext *codec, | |||
} | |||
} else if (!strcmp(str, "avc1")) { | |||
uint8_t *tmpbuf = NULL; | |||
uint8_t *extradata = codec->extradata; | |||
int extradata_size = codec->extradata_size; | |||
uint8_t *extradata = par->extradata; | |||
int extradata_size = par->extradata_size; | |||
if (!extradata_size) | |||
return; | |||
if (extradata[0] != 1) { | |||
@@ -515,10 +515,10 @@ static int write_manifest(AVFormatContext *s, int final) | |||
AVStream *st = s->streams[i]; | |||
OutputStream *os = &c->streams[i]; | |||
if (st->codec->codec_type != AVMEDIA_TYPE_VIDEO) | |||
if (st->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) | |||
continue; | |||
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"video/mp4\" codecs=\"%s\"%s width=\"%d\" height=\"%d\"", i, os->codec_str, os->bandwidth_str, st->codec->width, st->codec->height); | |||
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"video/mp4\" codecs=\"%s\"%s width=\"%d\" height=\"%d\"", i, os->codec_str, os->bandwidth_str, st->codecpar->width, st->codecpar->height); | |||
if (st->avg_frame_rate.num) | |||
avio_printf(out, " frameRate=\"%d/%d\"", st->avg_frame_rate.num, st->avg_frame_rate.den); | |||
avio_printf(out, ">\n"); | |||
@@ -534,11 +534,11 @@ static int write_manifest(AVFormatContext *s, int final) | |||
AVStream *st = s->streams[i]; | |||
OutputStream *os = &c->streams[i]; | |||
if (st->codec->codec_type != AVMEDIA_TYPE_AUDIO) | |||
if (st->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) | |||
continue; | |||
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"audio/mp4\" codecs=\"%s\"%s audioSamplingRate=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codec->sample_rate); | |||
avio_printf(out, "\t\t\t\t<AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"%d\" />\n", st->codec->channels); | |||
avio_printf(out, "\t\t\t<Representation id=\"%d\" mimeType=\"audio/mp4\" codecs=\"%s\"%s audioSamplingRate=\"%d\">\n", i, os->codec_str, os->bandwidth_str, st->codecpar->sample_rate); | |||
avio_printf(out, "\t\t\t\t<AudioChannelConfiguration schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\" value=\"%d\" />\n", st->codecpar->channels); | |||
output_segment_list(&c->streams[i], out, c); | |||
avio_printf(out, "\t\t\t</Representation>\n"); | |||
} | |||
@@ -598,9 +598,7 @@ static int dash_write_header(AVFormatContext *s) | |||
AVDictionary *opts = NULL; | |||
char filename[1024]; | |||
os->bit_rate = s->streams[i]->codec->bit_rate ? | |||
s->streams[i]->codec->bit_rate : | |||
s->streams[i]->codec->rc_max_rate; | |||
os->bit_rate = s->streams[i]->codecpar->bit_rate; | |||
if (os->bit_rate) { | |||
snprintf(os->bandwidth_str, sizeof(os->bandwidth_str), | |||
" bandwidth=\"%d\"", os->bit_rate); | |||
@@ -630,7 +628,7 @@ static int dash_write_header(AVFormatContext *s) | |||
ret = AVERROR(ENOMEM); | |||
goto fail; | |||
} | |||
avcodec_copy_context(st->codec, s->streams[i]->codec); | |||
avcodec_parameters_copy(st->codecpar, s->streams[i]->codecpar); | |||
st->sample_aspect_ratio = s->streams[i]->sample_aspect_ratio; | |||
st->time_base = s->streams[i]->time_base; | |||
ctx->avoid_negative_ts = s->avoid_negative_ts; | |||
@@ -670,7 +668,7 @@ static int dash_write_header(AVFormatContext *s) | |||
// already before being handed to this muxer, so we don't have mismatches | |||
// between the MPD and the actual segments. | |||
s->avoid_negative_ts = ctx->avoid_negative_ts; | |||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
AVRational avg_frame_rate = s->streams[i]->avg_frame_rate; | |||
if (avg_frame_rate.num > 0) { | |||
if (av_cmp_q(avg_frame_rate, c->min_frame_rate) < 0) | |||
@@ -681,11 +679,11 @@ static int dash_write_header(AVFormatContext *s) | |||
c->ambiguous_frame_rate = 1; | |||
} | |||
c->has_video = 1; | |||
} else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
c->has_audio = 1; | |||
} | |||
set_codec_str(s, st->codec, os->codec_str, sizeof(os->codec_str)); | |||
set_codec_str(s, st->codecpar, os->codec_str, sizeof(os->codec_str)); | |||
os->first_pts = AV_NOPTS_VALUE; | |||
os->max_pts = AV_NOPTS_VALUE; | |||
os->last_dts = AV_NOPTS_VALUE; | |||
@@ -774,24 +772,24 @@ static void find_index_range(AVFormatContext *s, const char *full_path, | |||
} | |||
static int update_stream_extradata(AVFormatContext *s, OutputStream *os, | |||
AVCodecContext *codec) | |||
AVCodecParameters *par) | |||
{ | |||
uint8_t *extradata; | |||
if (os->ctx->streams[0]->codec->extradata_size || !codec->extradata_size) | |||
if (os->ctx->streams[0]->codecpar->extradata_size || !par->extradata_size) | |||
return 0; | |||
extradata = av_malloc(codec->extradata_size); | |||
extradata = av_malloc(par->extradata_size); | |||
if (!extradata) | |||
return AVERROR(ENOMEM); | |||
memcpy(extradata, codec->extradata, codec->extradata_size); | |||
memcpy(extradata, par->extradata, par->extradata_size); | |||
os->ctx->streams[0]->codec->extradata = extradata; | |||
os->ctx->streams[0]->codec->extradata_size = codec->extradata_size; | |||
os->ctx->streams[0]->codecpar->extradata = extradata; | |||
os->ctx->streams[0]->codecpar->extradata_size = par->extradata_size; | |||
set_codec_str(s, codec, os->codec_str, sizeof(os->codec_str)); | |||
set_codec_str(s, par, os->codec_str, sizeof(os->codec_str)); | |||
return 0; | |||
} | |||
@@ -817,7 +815,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream) | |||
// Flush all audio streams as well, in sync with video keyframes, | |||
// but not the other video streams. | |||
if (stream >= 0 && i != stream) { | |||
if (s->streams[i]->codec->codec_type != AVMEDIA_TYPE_AUDIO) | |||
if (s->streams[i]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) | |||
continue; | |||
// Make sure we don't flush audio streams multiple times, when | |||
// all video streams are flushed one at a time. | |||
@@ -896,7 +894,7 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
int64_t seg_end_duration = (os->segment_index) * (int64_t) c->min_seg_duration; | |||
int ret; | |||
ret = update_stream_extradata(s, os, st->codec); | |||
ret = update_stream_extradata(s, os, st->codecpar); | |||
if (ret < 0) | |||
return ret; | |||
@@ -921,7 +919,7 @@ static int dash_write_packet(AVFormatContext *s, AVPacket *pkt) | |||
if (os->first_pts == AV_NOPTS_VALUE) | |||
os->first_pts = pkt->pts; | |||
if ((!c->has_video || st->codec->codec_type == AVMEDIA_TYPE_VIDEO) && | |||
if ((!c->has_video || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) && | |||
pkt->flags & AV_PKT_FLAG_KEY && os->packets_written && | |||
av_compare_ts(pkt->pts - os->first_pts, st->time_base, | |||
seg_end_duration, AV_TIME_BASE_Q) >= 0) { | |||
@@ -26,15 +26,15 @@ static int daud_header(AVFormatContext *s) { | |||
AVStream *st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S24DAUD; | |||
st->codec->codec_tag = MKTAG('d', 'a', 'u', 'd'); | |||
st->codec->channels = 6; | |||
st->codec->channel_layout = AV_CH_LAYOUT_5POINT1; | |||
st->codec->sample_rate = 96000; | |||
st->codec->bit_rate = 3 * 6 * 96000 * 8; | |||
st->codec->block_align = 3 * 6; | |||
st->codec->bits_per_coded_sample = 24; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S24DAUD; | |||
st->codecpar->codec_tag = MKTAG('d', 'a', 'u', 'd'); | |||
st->codecpar->channels = 6; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_5POINT1; | |||
st->codecpar->sample_rate = 96000; | |||
st->codecpar->bit_rate = 3 * 6 * 96000 * 8; | |||
st->codecpar->block_align = 3 * 6; | |||
st->codecpar->bits_per_coded_sample = 24; | |||
return 0; | |||
} | |||
@@ -23,8 +23,8 @@ | |||
static int daud_write_header(struct AVFormatContext *s) | |||
{ | |||
AVCodecContext *codec = s->streams[0]->codec; | |||
if (codec->channels!=6 || codec->sample_rate!=96000) | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
if (par->channels!=6 || par->sample_rate!=96000) | |||
return -1; | |||
return 0; | |||
} | |||
@@ -39,35 +39,35 @@ static int dcstr_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->channels = avio_rl32(s->pb); | |||
st->codec->sample_rate = avio_rl32(s->pb); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->channels = avio_rl32(s->pb); | |||
st->codecpar->sample_rate = avio_rl32(s->pb); | |||
codec = avio_rl32(s->pb); | |||
align = avio_rl32(s->pb); | |||
avio_skip(s->pb, 4); | |||
st->duration = avio_rl32(s->pb); | |||
st->codec->channels *= avio_rl32(s->pb); | |||
if (!align || align > INT_MAX / st->codec->channels) | |||
st->codecpar->channels *= avio_rl32(s->pb); | |||
if (!align || align > INT_MAX / st->codecpar->channels) | |||
return AVERROR_INVALIDDATA; | |||
st->codec->block_align = align * st->codec->channels; | |||
st->codecpar->block_align = align * st->codecpar->channels; | |||
switch (codec) { | |||
case 4: st->codec->codec_id = AV_CODEC_ID_ADPCM_AICA; break; | |||
case 16: st->codec->codec_id = AV_CODEC_ID_PCM_S16LE_PLANAR; break; | |||
case 4: st->codecpar->codec_id = AV_CODEC_ID_ADPCM_AICA; break; | |||
case 16: st->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE_PLANAR; break; | |||
default: avpriv_request_sample(s, "codec %X", codec); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
avio_skip(s->pb, 0x800 - avio_tell(s->pb)); | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
return 0; | |||
} | |||
static int dcstr_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
{ | |||
AVCodecContext *codec = s->streams[0]->codec; | |||
return av_get_packet(s->pb, pkt, codec->block_align); | |||
AVCodecParameters *par = s->streams[0]->codecpar; | |||
return av_get_packet(s->pb, pkt, par->block_align); | |||
} | |||
AVInputFormat ff_dcstr_demuxer = { | |||
@@ -56,10 +56,10 @@ static int dfa_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_DFA; | |||
st->codec->width = avio_rl16(pb); | |||
st->codec->height = avio_rl16(pb); | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_DFA; | |||
st->codecpar->width = avio_rl16(pb); | |||
st->codecpar->height = avio_rl16(pb); | |||
mspf = avio_rl32(pb); | |||
if (!mspf) { | |||
av_log(s, AV_LOG_WARNING, "Zero FPS reported, defaulting to 10\n"); | |||
@@ -69,9 +69,9 @@ static int dfa_read_header(AVFormatContext *s) | |||
avio_skip(pb, 128 - 16); // padding | |||
st->duration = frames; | |||
if (ff_alloc_extradata(st->codec, 2)) | |||
if (ff_alloc_extradata(st->codecpar, 2)) | |||
return AVERROR(ENOMEM); | |||
AV_WL16(st->codec->extradata, version); | |||
AV_WL16(st->codecpar->extradata, version); | |||
if (version == 0x100) | |||
st->sample_aspect_ratio = (AVRational){2, 1}; | |||
@@ -99,29 +99,29 @@ static int dsf_read_header(AVFormatContext *s) | |||
channel_type = avio_rl32(pb); | |||
if (channel_type < FF_ARRAY_ELEMS(dsf_channel_layout)) | |||
st->codec->channel_layout = dsf_channel_layout[channel_type]; | |||
if (!st->codec->channel_layout) | |||
st->codecpar->channel_layout = dsf_channel_layout[channel_type]; | |||
if (!st->codecpar->channel_layout) | |||
avpriv_request_sample(s, "channel type %i", channel_type); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->channels = avio_rl32(pb); | |||
st->codec->sample_rate = avio_rl32(pb) / 8; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->channels = avio_rl32(pb); | |||
st->codecpar->sample_rate = avio_rl32(pb) / 8; | |||
switch(avio_rl32(pb)) { | |||
case 1: st->codec->codec_id = AV_CODEC_ID_DSD_LSBF_PLANAR; break; | |||
case 8: st->codec->codec_id = AV_CODEC_ID_DSD_MSBF_PLANAR; break; | |||
case 1: st->codecpar->codec_id = AV_CODEC_ID_DSD_LSBF_PLANAR; break; | |||
case 8: st->codecpar->codec_id = AV_CODEC_ID_DSD_MSBF_PLANAR; break; | |||
default: | |||
avpriv_request_sample(s, "unknown most significant bit"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
avio_skip(pb, 8); | |||
st->codec->block_align = avio_rl32(pb); | |||
if (st->codec->block_align > INT_MAX / st->codec->channels) { | |||
st->codecpar->block_align = avio_rl32(pb); | |||
if (st->codecpar->block_align > INT_MAX / st->codecpar->channels) { | |||
avpriv_request_sample(s, "block_align overflow"); | |||
return AVERROR_INVALIDDATA; | |||
} | |||
st->codec->block_align *= st->codec->channels; | |||
st->codecpar->block_align *= st->codecpar->channels; | |||
avio_skip(pb, 4); | |||
/* data chunk */ | |||
@@ -145,7 +145,7 @@ static int dsf_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
return AVERROR_EOF; | |||
pkt->stream_index = 0; | |||
return av_get_packet(pb, pkt, FFMIN(dsf->data_end - pos, st->codec->block_align)); | |||
return av_get_packet(pb, pkt, FFMIN(dsf->data_end - pos, st->codecpar->block_align)); | |||
} | |||
AVInputFormat ff_dsf_demuxer = { | |||
@@ -116,11 +116,11 @@ static int cin_read_header(AVFormatContext *s) | |||
avpriv_set_pts_info(st, 32, 1, 12); | |||
cin->video_stream_index = st->index; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_DSICINVIDEO; | |||
st->codec->codec_tag = 0; /* no fourcc */ | |||
st->codec->width = hdr->video_frame_width; | |||
st->codec->height = hdr->video_frame_height; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_DSICINVIDEO; | |||
st->codecpar->codec_tag = 0; /* no fourcc */ | |||
st->codecpar->width = hdr->video_frame_width; | |||
st->codecpar->height = hdr->video_frame_height; | |||
/* initialize the audio decoder stream */ | |||
st = avformat_new_stream(s, NULL); | |||
@@ -129,14 +129,14 @@ static int cin_read_header(AVFormatContext *s) | |||
avpriv_set_pts_info(st, 32, 1, 22050); | |||
cin->audio_stream_index = st->index; | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_DSICINAUDIO; | |||
st->codec->codec_tag = 0; /* no tag */ | |||
st->codec->channels = 1; | |||
st->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codec->sample_rate = 22050; | |||
st->codec->bits_per_coded_sample = 8; | |||
st->codec->bit_rate = st->codec->sample_rate * st->codec->bits_per_coded_sample * st->codec->channels; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_DSICINAUDIO; | |||
st->codecpar->codec_tag = 0; /* no tag */ | |||
st->codecpar->channels = 1; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codecpar->sample_rate = 22050; | |||
st->codecpar->bits_per_coded_sample = 8; | |||
st->codecpar->bit_rate = st->codecpar->sample_rate * st->codecpar->bits_per_coded_sample * st->codecpar->channels; | |||
return 0; | |||
} | |||
@@ -144,22 +144,22 @@ static int dss_read_header(AVFormatContext *s) | |||
ctx->audio_codec = avio_r8(pb); | |||
if (ctx->audio_codec == DSS_ACODEC_DSS_SP) { | |||
st->codec->codec_id = AV_CODEC_ID_DSS_SP; | |||
st->codec->sample_rate = 11025; | |||
st->codecpar->codec_id = AV_CODEC_ID_DSS_SP; | |||
st->codecpar->sample_rate = 11025; | |||
} else if (ctx->audio_codec == DSS_ACODEC_G723_1) { | |||
st->codec->codec_id = AV_CODEC_ID_G723_1; | |||
st->codec->sample_rate = 8000; | |||
st->codecpar->codec_id = AV_CODEC_ID_G723_1; | |||
st->codecpar->sample_rate = 8000; | |||
} else { | |||
avpriv_request_sample(s, "Support for codec %x in DSS", | |||
ctx->audio_codec); | |||
return AVERROR_PATCHWELCOME; | |||
} | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codec->channels = 1; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->channel_layout = AV_CH_LAYOUT_MONO; | |||
st->codecpar->channels = 1; | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
st->start_time = 0; | |||
/* Jump over header */ | |||
@@ -235,7 +235,7 @@ static int dss_sp_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
pkt->duration = 264; | |||
pkt->pos = pos; | |||
pkt->stream_index = 0; | |||
s->bit_rate = 8LL * ctx->packet_size * st->codec->sample_rate * 512 / (506 * pkt->duration); | |||
s->bit_rate = 8LL * ctx->packet_size * st->codecpar->sample_rate * 512 / (506 * pkt->duration); | |||
if (ctx->counter < 0) { | |||
int size2 = ctx->counter + read_size; | |||
@@ -299,7 +299,7 @@ static int dss_723_1_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
pkt->data[0] = byte; | |||
offset = 1; | |||
pkt->duration = 240; | |||
s->bit_rate = 8LL * size * st->codec->sample_rate * 512 / (506 * pkt->duration); | |||
s->bit_rate = 8LL * size * st->codecpar->sample_rate * 512 / (506 * pkt->duration); | |||
pkt->stream_index = 0; | |||
@@ -60,9 +60,9 @@ static int dtshd_read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = AV_CODEC_ID_DTS; | |||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = AV_CODEC_ID_DTS; | |||
st->need_parsing = AVSTREAM_PARSE_FULL_RAW; | |||
while (!avio_feof(pb)) { | |||
chunk_type = avio_rb64(pb); | |||
@@ -440,14 +440,24 @@ static void dump_stream_format(AVFormatContext *ic, int i, | |||
AVStream *st = ic->streams[i]; | |||
AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL, 0); | |||
char *separator = ic->dump_separator; | |||
char **codec_separator = av_opt_ptr(st->codec->av_class, st->codec, "dump_separator"); | |||
int use_format_separator = !*codec_separator; | |||
if (use_format_separator) | |||
*codec_separator = av_strdup(separator); | |||
avcodec_string(buf, sizeof(buf), st->codec, is_output); | |||
if (use_format_separator) | |||
av_freep(codec_separator); | |||
AVCodecContext *avctx; | |||
int ret; | |||
avctx = avcodec_alloc_context3(NULL); | |||
if (!avctx) | |||
return; | |||
ret = avcodec_parameters_to_context(avctx, st->codecpar); | |||
if (ret < 0) { | |||
avcodec_free_context(&avctx); | |||
return; | |||
} | |||
if (separator) | |||
av_opt_set(avctx, "dump_separator", separator, 0); | |||
avcodec_string(buf, sizeof(buf), avctx, is_output); | |||
avcodec_free_context(&avctx); | |||
av_log(NULL, AV_LOG_INFO, " Stream #%d:%d", index, i); | |||
/* the pid is an important information, so we display it */ | |||
@@ -460,35 +470,32 @@ static void dump_stream_format(AVFormatContext *ic, int i, | |||
st->time_base.num, st->time_base.den); | |||
av_log(NULL, AV_LOG_INFO, ": %s", buf); | |||
if (st->sample_aspect_ratio.num && // default | |||
av_cmp_q(st->sample_aspect_ratio, st->codec->sample_aspect_ratio)) { | |||
if (st->sample_aspect_ratio.num && | |||
av_cmp_q(st->sample_aspect_ratio, st->codecpar->sample_aspect_ratio)) { | |||
AVRational display_aspect_ratio; | |||
av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, | |||
st->codec->width * (int64_t)st->sample_aspect_ratio.num, | |||
st->codec->height * (int64_t)st->sample_aspect_ratio.den, | |||
st->codecpar->width * (int64_t)st->sample_aspect_ratio.num, | |||
st->codecpar->height * (int64_t)st->sample_aspect_ratio.den, | |||
1024 * 1024); | |||
av_log(NULL, AV_LOG_INFO, ", SAR %d:%d DAR %d:%d", | |||
st->sample_aspect_ratio.num, st->sample_aspect_ratio.den, | |||
display_aspect_ratio.num, display_aspect_ratio.den); | |||
} | |||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
int fps = st->avg_frame_rate.den && st->avg_frame_rate.num; | |||
int tbr = st->r_frame_rate.den && st->r_frame_rate.num; | |||
int tbn = st->time_base.den && st->time_base.num; | |||
int tbc = st->codec->time_base.den && st->codec->time_base.num; | |||
if (fps || tbr || tbn || tbc) | |||
if (fps || tbr || tbn) | |||
av_log(NULL, AV_LOG_INFO, "%s", separator); | |||
if (fps) | |||
print_fps(av_q2d(st->avg_frame_rate), tbr || tbn || tbc ? "fps, " : "fps"); | |||
print_fps(av_q2d(st->avg_frame_rate), tbr || tbn ? "fps, " : "fps"); | |||
if (tbr) | |||
print_fps(av_q2d(st->r_frame_rate), tbn || tbc ? "tbr, " : "tbr"); | |||
print_fps(av_q2d(st->r_frame_rate), tbn ? "tbr, " : "tbr"); | |||
if (tbn) | |||
print_fps(1 / av_q2d(st->time_base), tbc ? "tbn, " : "tbn"); | |||
if (tbc) | |||
print_fps(1 / av_q2d(st->codec->time_base), "tbc"); | |||
print_fps(1 / av_q2d(st->time_base), "tbn"); | |||
} | |||
if (st->disposition & AV_DISPOSITION_DEFAULT) | |||
@@ -259,8 +259,8 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame) | |||
if (!c->ast[i]) | |||
break; | |||
avpriv_set_pts_info(c->ast[i], 64, 1, 30000); | |||
c->ast[i]->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
c->ast[i]->codec->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
c->ast[i]->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; | |||
av_init_packet(&c->audio_pkt[i]); | |||
c->audio_pkt[i].size = 0; | |||
@@ -268,10 +268,10 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame) | |||
c->audio_pkt[i].stream_index = c->ast[i]->index; | |||
c->audio_pkt[i].flags |= AV_PKT_FLAG_KEY; | |||
} | |||
c->ast[i]->codec->sample_rate = dv_audio_frequency[freq]; | |||
c->ast[i]->codec->channels = 2; | |||
c->ast[i]->codec->channel_layout = AV_CH_LAYOUT_STEREO; | |||
c->ast[i]->codec->bit_rate = 2 * dv_audio_frequency[freq] * 16; | |||
c->ast[i]->codecpar->sample_rate = dv_audio_frequency[freq]; | |||
c->ast[i]->codecpar->channels = 2; | |||
c->ast[i]->codecpar->channel_layout = AV_CH_LAYOUT_STEREO; | |||
c->ast[i]->codecpar->bit_rate = 2 * dv_audio_frequency[freq] * 16; | |||
c->ast[i]->start_time = 0; | |||
} | |||
c->ach = i; | |||
@@ -282,10 +282,10 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame) | |||
static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame) | |||
{ | |||
const uint8_t *vsc_pack; | |||
AVCodecContext *avctx; | |||
AVCodecParameters *par; | |||
int apt, is16_9; | |||
avctx = c->vst->codec; | |||
par = c->vst->codecpar; | |||
avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num, | |||
c->sys->time_base.den); | |||
@@ -297,7 +297,7 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame) | |||
is16_9 = (vsc_pack && ((vsc_pack[2] & 0x07) == 0x02 || | |||
(!apt && (vsc_pack[2] & 0x07) == 0x07))); | |||
c->vst->sample_aspect_ratio = c->sys->sar[is16_9]; | |||
avctx->bit_rate = av_rescale_q(c->sys->frame_size, | |||
par->bit_rate = av_rescale_q(c->sys->frame_size, | |||
(AVRational) { 8, 1 }, | |||
c->sys->time_base); | |||
return c->sys->frame_size; | |||
@@ -336,9 +336,9 @@ DVDemuxContext *avpriv_dv_init_demux(AVFormatContext *s) | |||
} | |||
c->fctx = s; | |||
c->vst->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
c->vst->codec->codec_id = AV_CODEC_ID_DVVIDEO; | |||
c->vst->codec->bit_rate = 25000000; | |||
c->vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
c->vst->codecpar->codec_id = AV_CODEC_ID_DVVIDEO; | |||
c->vst->codecpar->bit_rate = 25000000; | |||
c->vst->start_time = 0; | |||
return c; | |||
@@ -380,7 +380,7 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt, | |||
c->audio_pkt[i].pos = pos; | |||
c->audio_pkt[i].size = size; | |||
c->audio_pkt[i].pts = c->abytes * 30000 * 8 / | |||
c->ast[i]->codec->bit_rate; | |||
c->ast[i]->codecpar->bit_rate; | |||
ppcm[i] = c->audio_buf[i]; | |||
} | |||
if (c->ach) | |||
@@ -439,7 +439,7 @@ void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset) | |||
if (c->ach) { | |||
if (c->sys) { | |||
c->abytes = av_rescale_q(c->frames, c->sys->time_base, | |||
(AVRational) { 8, c->ast[0]->codec->bit_rate }); | |||
(AVRational) { 8, c->ast[0]->codecpar->bit_rate }); | |||
} else | |||
av_log(c->fctx, AV_LOG_ERROR, "cannot adjust audio bytes\n"); | |||
} | |||
@@ -105,13 +105,13 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu | |||
case dv_audio_source: /* AAUX source pack */ | |||
va_start(ap, buf); | |||
channel = va_arg(ap, int); | |||
if (c->ast[channel]->codec->sample_rate == 44100) { | |||
if (c->ast[channel]->codecpar->sample_rate == 44100) { | |||
audio_type = 1; | |||
} else if (c->ast[channel]->codec->sample_rate == 32000) | |||
} else if (c->ast[channel]->codecpar->sample_rate == 32000) | |||
audio_type = 2; | |||
buf[1] = (1 << 7) | /* locked mode -- SMPTE only supports locked mode */ | |||
(1 << 6) | /* reserved -- always 1 */ | |||
(dv_audio_frame_size(c->sys, c->frames, c->ast[channel]->codec->sample_rate) - | |||
(dv_audio_frame_size(c->sys, c->frames, c->ast[channel]->codecpar->sample_rate) - | |||
c->sys->audio_min_samples[audio_type]); | |||
/* # of samples */ | |||
buf[2] = (0 << 7) | /* multi-stereo */ | |||
@@ -186,7 +186,7 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu | |||
static void dv_inject_audio(DVMuxContext *c, int channel, uint8_t* frame_ptr) | |||
{ | |||
int i, j, d, of, size; | |||
size = 4 * dv_audio_frame_size(c->sys, c->frames, c->ast[channel]->codec->sample_rate); | |||
size = 4 * dv_audio_frame_size(c->sys, c->frames, c->ast[channel]->codecpar->sample_rate); | |||
frame_ptr += channel * c->sys->difseg_size * 150 * 80; | |||
for (i = 0; i < c->sys->difseg_size; i++) { | |||
frame_ptr += 6 * 80; /* skip DIF segment header */ | |||
@@ -238,20 +238,21 @@ static void dv_inject_metadata(DVMuxContext *c, uint8_t* frame) | |||
* The following 3 functions constitute our interface to the world | |||
*/ | |||
static int dv_assemble_frame(DVMuxContext *c, AVStream* st, | |||
static int dv_assemble_frame(AVFormatContext *s, | |||
DVMuxContext *c, AVStream* st, | |||
uint8_t* data, int data_size, uint8_t** frame) | |||
{ | |||
int i, reqasize; | |||
*frame = &c->frame_buf[0]; | |||
switch (st->codec->codec_type) { | |||
switch (st->codecpar->codec_type) { | |||
case AVMEDIA_TYPE_VIDEO: | |||
/* FIXME: we have to have more sensible approach than this one */ | |||
if (c->has_video) | |||
av_log(st->codec, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient audio data or severe sync problem.\n", c->frames); | |||
av_log(s, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient audio data or severe sync problem.\n", c->frames); | |||
if (data_size != c->sys->frame_size) { | |||
av_log(st->codec, AV_LOG_ERROR, "Unexpected frame size, %d != %d\n", | |||
av_log(s, AV_LOG_ERROR, "Unexpected frame size, %d != %d\n", | |||
data_size, c->sys->frame_size); | |||
return AVERROR(ENOSYS); | |||
} | |||
@@ -264,10 +265,10 @@ static int dv_assemble_frame(DVMuxContext *c, AVStream* st, | |||
/* FIXME: we have to have more sensible approach than this one */ | |||
if (av_fifo_size(c->audio_data[i]) + data_size >= 100*MAX_AUDIO_FRAME_SIZE) | |||
av_log(st->codec, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient video data or severe sync problem.\n", c->frames); | |||
av_log(s, AV_LOG_ERROR, "Can't process DV frame #%d. Insufficient video data or severe sync problem.\n", c->frames); | |||
av_fifo_generic_write(c->audio_data[i], data, data_size, NULL); | |||
reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, st->codec->sample_rate); | |||
reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, st->codecpar->sample_rate); | |||
/* Let us see if we've got enough audio for one DV frame. */ | |||
c->has_audio |= ((reqasize <= av_fifo_size(c->audio_data[i])) << i); | |||
@@ -283,7 +284,7 @@ static int dv_assemble_frame(DVMuxContext *c, AVStream* st, | |||
c->has_audio = 0; | |||
for (i=0; i < c->n_ast; i++) { | |||
dv_inject_audio(c, i, *frame); | |||
reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, c->ast[i]->codec->sample_rate); | |||
reqasize = 4 * dv_audio_frame_size(c->sys, c->frames, c->ast[i]->codecpar->sample_rate); | |||
av_fifo_drain(c->audio_data[i], reqasize); | |||
c->has_audio |= ((reqasize <= av_fifo_size(c->audio_data[i])) << i); | |||
} | |||
@@ -313,7 +314,7 @@ static DVMuxContext* dv_init_mux(AVFormatContext* s) | |||
/* We have to sort out where audio and where video stream is */ | |||
for (i=0; i<s->nb_streams; i++) { | |||
switch (s->streams[i]->codec->codec_type) { | |||
switch (s->streams[i]->codecpar->codec_type) { | |||
case AVMEDIA_TYPE_VIDEO: | |||
if (vst) return NULL; | |||
vst = s->streams[i]; | |||
@@ -328,28 +329,28 @@ static DVMuxContext* dv_init_mux(AVFormatContext* s) | |||
} | |||
/* Some checks -- DV format is very picky about its incoming streams */ | |||
if (!vst || vst->codec->codec_id != AV_CODEC_ID_DVVIDEO) | |||
if (!vst || vst->codecpar->codec_id != AV_CODEC_ID_DVVIDEO) | |||
goto bail_out; | |||
for (i=0; i<c->n_ast; i++) { | |||
if (c->ast[i]) { | |||
if(c->ast[i]->codec->codec_id != AV_CODEC_ID_PCM_S16LE || | |||
c->ast[i]->codec->channels != 2) | |||
if(c->ast[i]->codecpar->codec_id != AV_CODEC_ID_PCM_S16LE || | |||
c->ast[i]->codecpar->channels != 2) | |||
goto bail_out; | |||
if (c->ast[i]->codec->sample_rate != 48000 && | |||
c->ast[i]->codec->sample_rate != 44100 && | |||
c->ast[i]->codec->sample_rate != 32000 ) | |||
if (c->ast[i]->codecpar->sample_rate != 48000 && | |||
c->ast[i]->codecpar->sample_rate != 44100 && | |||
c->ast[i]->codecpar->sample_rate != 32000 ) | |||
goto bail_out; | |||
} | |||
} | |||
c->sys = av_dv_codec_profile2(vst->codec->width, vst->codec->height, | |||
vst->codec->pix_fmt, vst->codec->time_base); | |||
c->sys = av_dv_codec_profile2(vst->codecpar->width, vst->codecpar->height, | |||
vst->codecpar->format, vst->time_base); | |||
if (!c->sys) | |||
goto bail_out; | |||
if ((c->sys->time_base.den != 25 && c->sys->time_base.den != 50) || c->sys->time_base.num != 1) { | |||
if (c->ast[0] && c->ast[0]->codec->sample_rate != 48000) | |||
if (c->ast[0] && c->ast[0]->codecpar->sample_rate != 48000) | |||
goto bail_out; | |||
if (c->ast[1] && c->ast[1]->codec->sample_rate != 48000) | |||
if (c->ast[1] && c->ast[1]->codecpar->sample_rate != 48000) | |||
goto bail_out; | |||
} | |||
@@ -420,7 +421,7 @@ static int dv_write_packet(struct AVFormatContext *s, AVPacket *pkt) | |||
uint8_t* frame; | |||
int fsize; | |||
fsize = dv_assemble_frame(s->priv_data, s->streams[pkt->stream_index], | |||
fsize = dv_assemble_frame(s, s->priv_data, s->streams[pkt->stream_index], | |||
pkt->data, pkt->size, &frame); | |||
if (fsize > 0) { | |||
avio_write(s->pb, frame, fsize); | |||
@@ -106,11 +106,11 @@ static int dxa_read_header(AVFormatContext *s) | |||
ast = avformat_new_stream(s, NULL); | |||
if (!ast) | |||
return AVERROR(ENOMEM); | |||
ret = ff_get_wav_header(s, pb, ast->codec, fsize, 0); | |||
ret = ff_get_wav_header(s, pb, ast->codecpar, fsize, 0); | |||
if (ret < 0) | |||
return ret; | |||
if (ast->codec->sample_rate > 0) | |||
avpriv_set_pts_info(ast, 64, 1, ast->codec->sample_rate); | |||
if (ast->codecpar->sample_rate > 0) | |||
avpriv_set_pts_info(ast, 64, 1, ast->codecpar->sample_rate); | |||
// find 'data' chunk | |||
while(avio_tell(pb) < c->vidpos && !avio_feof(pb)){ | |||
tag = avio_rl32(pb); | |||
@@ -119,18 +119,18 @@ static int dxa_read_header(AVFormatContext *s) | |||
avio_skip(pb, fsize); | |||
} | |||
c->bpc = (fsize + c->frames - 1) / c->frames; | |||
if(ast->codec->block_align) | |||
c->bpc = ((c->bpc + ast->codec->block_align - 1) / ast->codec->block_align) * ast->codec->block_align; | |||
if(ast->codecpar->block_align) | |||
c->bpc = ((c->bpc + ast->codecpar->block_align - 1) / ast->codecpar->block_align) * ast->codecpar->block_align; | |||
c->bytes_left = fsize; | |||
c->wavpos = avio_tell(pb); | |||
avio_seek(pb, c->vidpos, SEEK_SET); | |||
} | |||
/* now we are ready: build format streams */ | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = AV_CODEC_ID_DXA; | |||
st->codec->width = w; | |||
st->codec->height = h; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = AV_CODEC_ID_DXA; | |||
st->codecpar->width = w; | |||
st->codecpar->height = h; | |||
av_reduce(&den, &num, den, num, (1UL<<31)-1); | |||
avpriv_set_pts_info(st, 33, num, den); | |||
/* flags & 0x80 means that image is interlaced, | |||
@@ -138,7 +138,7 @@ static int dxa_read_header(AVFormatContext *s) | |||
* either way set true height | |||
*/ | |||
if(flags & 0xC0){ | |||
st->codec->height >>= 1; | |||
st->codecpar->height >>= 1; | |||
} | |||
c->readvid = !c->has_sound; | |||
c->vidpos = avio_tell(pb); | |||
@@ -70,12 +70,12 @@ static int cdata_read_header(AVFormatContext *s) | |||
st = avformat_new_stream(s, NULL); | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_tag = 0; /* no fourcc */ | |||
st->codec->codec_id = AV_CODEC_ID_ADPCM_EA_XAS; | |||
st->codec->channels = cdata->channels; | |||
st->codec->channel_layout = channel_layout; | |||
st->codec->sample_rate = sample_rate; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_tag = 0; /* no fourcc */ | |||
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_EA_XAS; | |||
st->codecpar->channels = cdata->channels; | |||
st->codecpar->channel_layout = channel_layout; | |||
st->codecpar->sample_rate = sample_rate; | |||
avpriv_set_pts_info(st, 64, 1, sample_rate); | |||
cdata->audio_pts = 0; | |||
@@ -499,14 +499,14 @@ static int init_video_stream(AVFormatContext *s, VideoProperties *video) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
video->stream_index = st->index; | |||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codec->codec_id = video->codec; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | |||
st->codecpar->codec_id = video->codec; | |||
// parsing is necessary to make FFmpeg generate correct timestamps | |||
if (st->codec->codec_id == AV_CODEC_ID_MPEG2VIDEO) | |||
if (st->codecpar->codec_id == AV_CODEC_ID_MPEG2VIDEO) | |||
st->need_parsing = AVSTREAM_PARSE_HEADERS; | |||
st->codec->codec_tag = 0; /* no fourcc */ | |||
st->codec->width = video->width; | |||
st->codec->height = video->height; | |||
st->codecpar->codec_tag = 0; /* no fourcc */ | |||
st->codecpar->width = video->width; | |||
st->codecpar->height = video->height; | |||
st->duration = st->nb_frames = video->nb_frames; | |||
if (video->time_base.num) | |||
avpriv_set_pts_info(st, 64, video->time_base.num, video->time_base.den); | |||
@@ -551,17 +551,17 @@ static int ea_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
avpriv_set_pts_info(st, 33, 1, ea->sample_rate); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->codec_id = ea->audio_codec; | |||
st->codec->codec_tag = 0; /* no tag */ | |||
st->codec->channels = ea->num_channels; | |||
st->codec->sample_rate = ea->sample_rate; | |||
st->codec->bits_per_coded_sample = ea->bytes * 8; | |||
st->codec->bit_rate = st->codec->channels * | |||
st->codec->sample_rate * | |||
st->codec->bits_per_coded_sample / 4; | |||
st->codec->block_align = st->codec->channels * | |||
st->codec->bits_per_coded_sample; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->codec_id = ea->audio_codec; | |||
st->codecpar->codec_tag = 0; /* no tag */ | |||
st->codecpar->channels = ea->num_channels; | |||
st->codecpar->sample_rate = ea->sample_rate; | |||
st->codecpar->bits_per_coded_sample = ea->bytes * 8; | |||
st->codecpar->bit_rate = st->codecpar->channels * | |||
st->codecpar->sample_rate * | |||
st->codecpar->bits_per_coded_sample / 4; | |||
st->codecpar->block_align = st->codecpar->channels * | |||
st->codecpar->bits_per_coded_sample; | |||
ea->audio_stream_index = st->index; | |||
st->start_time = 0; | |||
} | |||
@@ -66,15 +66,15 @@ static int epaf_read_header(AVFormatContext *s) | |||
if (!st) | |||
return AVERROR(ENOMEM); | |||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codec->channels = channels; | |||
st->codec->sample_rate = sample_rate; | |||
st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | |||
st->codecpar->channels = channels; | |||
st->codecpar->sample_rate = sample_rate; | |||
switch (codec) { | |||
case 0: | |||
st->codec->codec_id = le ? AV_CODEC_ID_PCM_S16LE : AV_CODEC_ID_PCM_S16BE; | |||
st->codecpar->codec_id = le ? AV_CODEC_ID_PCM_S16LE : AV_CODEC_ID_PCM_S16BE; | |||
break; | |||
case 2: | |||
st->codec->codec_id = AV_CODEC_ID_PCM_S8; | |||
st->codecpar->codec_id = AV_CODEC_ID_PCM_S8; | |||
break; | |||
case 1: | |||
avpriv_request_sample(s, "24-bit Paris PCM format"); | |||
@@ -82,10 +82,10 @@ static int epaf_read_header(AVFormatContext *s) | |||
return AVERROR_INVALIDDATA; | |||
} | |||
st->codec->bits_per_coded_sample = av_get_bits_per_sample(st->codec->codec_id); | |||
st->codec->block_align = st->codec->bits_per_coded_sample * st->codec->channels / 8; | |||
st->codecpar->bits_per_coded_sample = av_get_bits_per_sample(st->codecpar->codec_id); | |||
st->codecpar->block_align = st->codecpar->bits_per_coded_sample * st->codecpar->channels / 8; | |||
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); | |||
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); | |||
if (avio_skip(s->pb, 2024) < 0) | |||
return AVERROR_INVALIDDATA; | |||