mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: tta: cast output data pointer to the correct type avconv: fix -frames for video encoders with delay. Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
e191f1f414
20
avconv.c
20
avconv.c
@ -925,6 +925,19 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
|
||||
AVCodecContext *avctx = ost->st->codec;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Audio encoders may split the packets -- #frames in != #packets out.
|
||||
* But there is no reordering, so we can limit the number of output packets
|
||||
* by simply dropping them here.
|
||||
* Counting encoded video frames needs to be done separately because of
|
||||
* reordering, see do_video_out()
|
||||
*/
|
||||
if (!(avctx->codec_type == AVMEDIA_TYPE_VIDEO && avctx->codec)) {
|
||||
if (ost->frame_number >= ost->max_frames)
|
||||
return;
|
||||
ost->frame_number++;
|
||||
}
|
||||
|
||||
while (bsfc) {
|
||||
AVPacket new_pkt = *pkt;
|
||||
int a = av_bitstream_filter_filter(bsfc, avctx, NULL,
|
||||
@ -952,7 +965,6 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
|
||||
print_error("av_interleaved_write_frame()", ret);
|
||||
exit_program(1);
|
||||
}
|
||||
ost->frame_number++;
|
||||
}
|
||||
|
||||
static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size)
|
||||
@ -1513,6 +1525,12 @@ static void do_video_out(AVFormatContext *s,
|
||||
}
|
||||
}
|
||||
ost->sync_opts++;
|
||||
/*
|
||||
* For video, number of frames in == number of packets out.
|
||||
* But there may be reordering, so we can't throw away frames on encoder
|
||||
* flush, we need to limit them here, before they go into encoder.
|
||||
*/
|
||||
ost->frame_number++;
|
||||
}
|
||||
}
|
||||
|
||||
|
20
ffmpeg.c
20
ffmpeg.c
@ -987,6 +987,19 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
|
||||
AVCodecContext *avctx = ost->st->codec;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Audio encoders may split the packets -- #frames in != #packets out.
|
||||
* But there is no reordering, so we can limit the number of output packets
|
||||
* by simply dropping them here.
|
||||
* Counting encoded video frames needs to be done separately because of
|
||||
* reordering, see do_video_out()
|
||||
*/
|
||||
if (!(avctx->codec_type == AVMEDIA_TYPE_VIDEO && avctx->codec)) {
|
||||
if (ost->frame_number >= ost->max_frames)
|
||||
return;
|
||||
ost->frame_number++;
|
||||
}
|
||||
|
||||
while (bsfc) {
|
||||
AVPacket new_pkt = *pkt;
|
||||
int a = av_bitstream_filter_filter(bsfc, avctx, NULL,
|
||||
@ -1014,7 +1027,6 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
|
||||
print_error("av_interleaved_write_frame()", ret);
|
||||
exit_program(1);
|
||||
}
|
||||
ost->frame_number++;
|
||||
}
|
||||
|
||||
static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size)
|
||||
@ -1568,6 +1580,12 @@ static void do_video_out(AVFormatContext *s,
|
||||
}
|
||||
}
|
||||
ost->sync_opts++;
|
||||
/*
|
||||
* For video, number of frames in == number of packets out.
|
||||
* But there may be reordering, so we can't throw away frames on encoder
|
||||
* flush, we need to limit them here, before they go into encoder.
|
||||
*/
|
||||
ost->frame_number++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -326,7 +326,7 @@ static int tta_decode_frame(AVCodecContext *avctx, void *data,
|
||||
|
||||
// decode directly to output buffer for 24-bit sample format
|
||||
if (s->bps == 3)
|
||||
s->decode_buffer = s->frame.data[0];
|
||||
s->decode_buffer = (int32_t *)s->frame.data[0];
|
||||
|
||||
// init per channel states
|
||||
for (i = 0; i < s->channels; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user