Compare commits
31 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
620197d1ff | ||
![]() |
73e7fe8e64 | ||
![]() |
973e67e5d2 | ||
![]() |
d89cd16afa | ||
![]() |
7cbceb16ad | ||
![]() |
157dd52700 | ||
![]() |
23614d09d5 | ||
![]() |
bea4894d0c | ||
![]() |
250cf2d4da | ||
![]() |
93d076b4fd | ||
![]() |
8749b83e0b | ||
![]() |
a9b600cf39 | ||
![]() |
c3c8365dbd | ||
![]() |
6432f8826d | ||
![]() |
e04ae11fa0 | ||
![]() |
08fadda68a | ||
![]() |
9473e5a05d | ||
![]() |
8a24ccfee3 | ||
![]() |
3ba55ea4ae | ||
![]() |
265db41540 | ||
![]() |
ed5041143e | ||
![]() |
965f96c5ed | ||
![]() |
3b6aeb148b | ||
![]() |
259bb2555b | ||
![]() |
665b67014f | ||
![]() |
1051c152f9 | ||
![]() |
5a0862af55 | ||
![]() |
6e94e77632 | ||
![]() |
f5bb7b9992 | ||
![]() |
0e9209183a | ||
![]() |
90932a9e3c |
23
Changelog
23
Changelog
@ -3,6 +3,27 @@ releases are sorted from youngest to oldest.
|
||||
|
||||
version <next>:
|
||||
|
||||
version 2.7.1:
|
||||
- postproc: fix unaligned access
|
||||
- avformat: clarify what package needs to be compiled with SSL support
|
||||
- avcodec/libx264: Avoid reconfig on equivalent aspect ratios
|
||||
- avcodec/flacenc: Fix Invalid Rice order
|
||||
- tls_gnutls: fix hang on disconnection
|
||||
- avcodec/hevc_ps: Only discard overread VPS if a previous is available
|
||||
- ffmpeg: Free last_frame instead of just unref
|
||||
- avcodec/ffv1enc: fix bps for >8bit yuv when not explicitly set
|
||||
- avio: fix potential crashes when combining ffio_ensure_seekback + crc
|
||||
- examples/demuxing_decoding: use properties from frame instead of video_dec_ctx
|
||||
- h264: er: Copy from the previous reference only if compatible
|
||||
- doc: fix spelling errors
|
||||
- configure: only disable VSX for !ppc64el
|
||||
- ffmpeg_opt: Check for localtime() failure
|
||||
- avformat/singlejpeg: fix standalone compilation
|
||||
- configure: Disable VSX on unspecified / generic CPUs
|
||||
- avformat: Fix bug in parse_rps for HEVC.
|
||||
- takdec: ensure chan2 is a valid channel index
|
||||
- avcodec/h264_slice: Use AVFrame dimensions for grayscale handling
|
||||
|
||||
|
||||
version 2.7:
|
||||
- FFT video filter
|
||||
@ -573,7 +594,7 @@ easier to use. The changes are:
|
||||
all the stream in the first input file, except for the second audio
|
||||
stream'.
|
||||
* There is a new option -c (or -codec) for choosing the decoder/encoder to
|
||||
use, which allows to precisely specify target stream(s) consistently with
|
||||
use, which makes it possible to precisely specify target stream(s) consistently with
|
||||
other options. E.g. -c:v lib264 sets the codec for all video streams, -c:a:0
|
||||
libvorbis sets the codec for the first audio stream and -c copy copies all
|
||||
the streams without reencoding. Old -vcodec/-acodec/-scodec options are now
|
||||
|
@ -545,6 +545,7 @@ x86 Michael Niedermayer
|
||||
Releases
|
||||
========
|
||||
|
||||
2.7 Michael Niedermayer
|
||||
2.6 Michael Niedermayer
|
||||
2.5 Michael Niedermayer
|
||||
2.4 Michael Niedermayer
|
||||
|
15
RELEASE_NOTES
Normal file
15
RELEASE_NOTES
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
┌─────────────────────────────────────┐
|
||||
│ RELEASE NOTES for FFmpeg 2.7 "Nash" │
|
||||
└─────────────────────────────────────┘
|
||||
|
||||
The FFmpeg Project proudly presents FFmpeg 2.7 "Nash", about 3
|
||||
months after the release of FFmpeg 2.6.
|
||||
|
||||
A complete Changelog is available at the root of the project, and the
|
||||
complete Git history on http://source.ffmpeg.org.
|
||||
|
||||
We hope you will like this release as much as we enjoyed working on it, and
|
||||
as usual, if you have any questions about it, or any FFmpeg related topic,
|
||||
feel free to join us on the #ffmpeg IRC channel (on irc.freenode.net) or ask
|
||||
on the mailing-lists.
|
7
configure
vendored
7
configure
vendored
@ -4607,6 +4607,9 @@ unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
|
||||
EOF
|
||||
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
|
||||
|
||||
if ! enabled ppc64 || enabled bigendian; then
|
||||
disable vsx
|
||||
fi
|
||||
|
||||
check_gas() {
|
||||
log "check_gas using '$as' as AS"
|
||||
@ -5236,8 +5239,8 @@ disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreF
|
||||
enable securetransport; }
|
||||
|
||||
makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo
|
||||
enabled makeinfo && (makeinfo --version | \
|
||||
grep -q 'makeinfo (GNU texinfo) 5' > /dev/null 2>&1) \
|
||||
enabled makeinfo \
|
||||
&& [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
|
||||
&& enable makeinfo_html || disable makeinfo_html
|
||||
disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
|
||||
perl -v > /dev/null 2>&1 && enable perl || disable perl
|
||||
|
@ -31,7 +31,7 @@ PROJECT_NAME = FFmpeg
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER =
|
||||
PROJECT_NUMBER = 2.7.1
|
||||
|
||||
# With the PROJECT_LOGO tag one can specify a logo or icon that is included
|
||||
# in the documentation. The maximum height of the logo should not exceed 55
|
||||
|
@ -95,7 +95,7 @@ This decoder aims to implement the complete FLAC specification from Xiph.
|
||||
|
||||
@item -use_buggy_lpc
|
||||
The lavc FLAC encoder used to produce buggy streams with high lpc values
|
||||
(like the default value). This option allows to decode such streams
|
||||
(like the default value). This option makes it possible to decode such streams
|
||||
correctly by using lavc's old buggy lpc logic for decoding.
|
||||
|
||||
@end table
|
||||
|
@ -81,22 +81,24 @@ static int decode_packet(int *got_frame, int cached)
|
||||
fprintf(stderr, "Error decoding video frame (%s)\n", av_err2str(ret));
|
||||
return ret;
|
||||
}
|
||||
if (video_dec_ctx->width != width || video_dec_ctx->height != height ||
|
||||
video_dec_ctx->pix_fmt != pix_fmt) {
|
||||
/* To handle this change, one could call av_image_alloc again and
|
||||
* decode the following frames into another rawvideo file. */
|
||||
fprintf(stderr, "Error: Width, height and pixel format have to be "
|
||||
"constant in a rawvideo file, but the width, height or "
|
||||
"pixel format of the input video changed:\n"
|
||||
"old: width = %d, height = %d, format = %s\n"
|
||||
"new: width = %d, height = %d, format = %s\n",
|
||||
width, height, av_get_pix_fmt_name(pix_fmt),
|
||||
video_dec_ctx->width, video_dec_ctx->height,
|
||||
av_get_pix_fmt_name(video_dec_ctx->pix_fmt));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (*got_frame) {
|
||||
|
||||
if (frame->width != width || frame->height != height ||
|
||||
frame->format != pix_fmt) {
|
||||
/* To handle this change, one could call av_image_alloc again and
|
||||
* decode the following frames into another rawvideo file. */
|
||||
fprintf(stderr, "Error: Width, height and pixel format have to be "
|
||||
"constant in a rawvideo file, but the width, height or "
|
||||
"pixel format of the input video changed:\n"
|
||||
"old: width = %d, height = %d, format = %s\n"
|
||||
"new: width = %d, height = %d, format = %s\n",
|
||||
width, height, av_get_pix_fmt_name(pix_fmt),
|
||||
frame->width, frame->height,
|
||||
av_get_pix_fmt_name(frame->format));
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("video_frame%s n:%d coded_n:%d pts:%s\n",
|
||||
cached ? "(cached)" : "",
|
||||
video_frame_count++, frame->coded_picture_number,
|
||||
|
@ -117,7 +117,7 @@ static int open_output_file(const char *filename)
|
||||
/* in this example, we choose transcoding to same codec */
|
||||
encoder = avcodec_find_encoder(dec_ctx->codec_id);
|
||||
if (!encoder) {
|
||||
av_log(NULL, AV_LOG_FATAL, "Neccessary encoder not found\n");
|
||||
av_log(NULL, AV_LOG_FATAL, "Necessary encoder not found\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
|
2
ffmpeg.c
2
ffmpeg.c
@ -1178,6 +1178,8 @@ static void do_video_out(AVFormatContext *s,
|
||||
av_frame_unref(ost->last_frame);
|
||||
if (next_picture)
|
||||
av_frame_ref(ost->last_frame, next_picture);
|
||||
else
|
||||
av_frame_free(&ost->last_frame);
|
||||
}
|
||||
|
||||
static double psnr(double d)
|
||||
|
@ -2438,6 +2438,9 @@ static int opt_vstats(void *optctx, const char *opt, const char *arg)
|
||||
time_t today2 = time(NULL);
|
||||
struct tm *today = localtime(&today2);
|
||||
|
||||
if (!today)
|
||||
return AVERROR(errno);
|
||||
|
||||
snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min,
|
||||
today->tm_sec);
|
||||
return opt_vstats_file(NULL, opt, filename);
|
||||
|
@ -103,7 +103,7 @@ typedef struct ASSSplitContext ASSSplitContext;
|
||||
* Split a full ASS file or a ASS header from a string buffer and store
|
||||
* the split structure in a newly allocated context.
|
||||
*
|
||||
* @param buf String containing the ASS formated data.
|
||||
* @param buf String containing the ASS formatted data.
|
||||
* @return Newly allocated struct containing split data.
|
||||
*/
|
||||
ASSSplitContext *ff_ass_split(const char *buf);
|
||||
|
@ -247,7 +247,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
|
||||
|
||||
/* Build VLC decoding tables suitable for use with get_vlc().
|
||||
|
||||
'nb_bits' set thee decoding table size (2^nb_bits) entries. The
|
||||
'nb_bits' set the decoding table size (2^nb_bits) entries. The
|
||||
bigger it is, the faster is the decoding. But it should not be too
|
||||
big to save memory and L1 cache. '9' is a good compromise.
|
||||
|
||||
@ -265,7 +265,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
|
||||
'xxx_size' : gives the number of bytes of each entry of the 'bits'
|
||||
or 'codes' tables.
|
||||
|
||||
'wrap' and 'size' allows to use any memory configuration and types
|
||||
'wrap' and 'size' make it possible to use any memory configuration and types
|
||||
(byte/word/long) to store the 'bits', 'codes', and 'symbols' tables.
|
||||
|
||||
'use_static' should be set to 1 for tables, which should be freed
|
||||
|
@ -75,17 +75,20 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define write16(p, value) \
|
||||
do { \
|
||||
if (s->big_endian) AV_WB16(p, value); \
|
||||
else AV_WL16(p, value); \
|
||||
} while(0)
|
||||
static av_always_inline void write16_internal(int big_endian, void *p, int value)
|
||||
{
|
||||
if (big_endian) AV_WB16(p, value);
|
||||
else AV_WL16(p, value);
|
||||
}
|
||||
|
||||
#define write32(p, value) \
|
||||
do { \
|
||||
if (s->big_endian) AV_WB32(p, value); \
|
||||
else AV_WL32(p, value); \
|
||||
} while(0)
|
||||
static av_always_inline void write32_internal(int big_endian, void *p, int value)
|
||||
{
|
||||
if (big_endian) AV_WB32(p, value);
|
||||
else AV_WL32(p, value);
|
||||
}
|
||||
|
||||
#define write16(p, value) write16_internal(s->big_endian, p, value)
|
||||
#define write32(p, value) write32_internal(s->big_endian, p, value)
|
||||
|
||||
static void encode_rgb48_10bit(AVCodecContext *avctx, const AVPicture *pic, uint8_t *dst)
|
||||
{
|
||||
|
@ -753,7 +753,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
||||
s->chroma_planes = desc->nb_components < 3 ? 0 : 1;
|
||||
s->colorspace = 0;
|
||||
s->transparency = desc->nb_components == 4;
|
||||
if (!avctx->bits_per_raw_sample)
|
||||
if (!avctx->bits_per_raw_sample && !s->bits_per_raw_sample)
|
||||
s->bits_per_raw_sample = 8;
|
||||
break;
|
||||
case AV_PIX_FMT_RGB32:
|
||||
|
@ -705,7 +705,7 @@ static uint64_t calc_rice_params(RiceContext *rc,
|
||||
bits[pmin] = UINT32_MAX;
|
||||
for (i = pmax; ; ) {
|
||||
bits[i] = calc_optimal_rice_params(&tmp_rc, i, sums, n, pred_order, kmax, exact);
|
||||
if (bits[i] < bits[opt_porder]) {
|
||||
if (bits[i] < bits[opt_porder] || pmax == pmin) {
|
||||
opt_porder = i;
|
||||
*rc = tmp_rc;
|
||||
}
|
||||
|
@ -251,11 +251,11 @@ static int alloc_picture(H264Context *h, H264Picture *pic)
|
||||
av_pix_fmt_get_chroma_sub_sample(pic->f->format,
|
||||
&h_chroma_shift, &v_chroma_shift);
|
||||
|
||||
for(i=0; i<FF_CEIL_RSHIFT(h->avctx->height, v_chroma_shift); i++) {
|
||||
for(i=0; i<FF_CEIL_RSHIFT(pic->f->height, v_chroma_shift); i++) {
|
||||
memset(pic->f->data[1] + pic->f->linesize[1]*i,
|
||||
0x80, FF_CEIL_RSHIFT(h->avctx->width, h_chroma_shift));
|
||||
0x80, FF_CEIL_RSHIFT(pic->f->width, h_chroma_shift));
|
||||
memset(pic->f->data[2] + pic->f->linesize[2]*i,
|
||||
0x80, FF_CEIL_RSHIFT(h->avctx->width, h_chroma_shift));
|
||||
0x80, FF_CEIL_RSHIFT(pic->f->width, h_chroma_shift));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1549,12 +1549,15 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl)
|
||||
* vectors. Given we are concealing a lost frame, this probably
|
||||
* is not noticeable by comparison, but it should be fixed. */
|
||||
if (h->short_ref_count) {
|
||||
if (prev) {
|
||||
if (prev &&
|
||||
h->short_ref[0]->f->width == prev->f->width &&
|
||||
h->short_ref[0]->f->height == prev->f->height &&
|
||||
h->short_ref[0]->f->format == prev->f->format) {
|
||||
av_image_copy(h->short_ref[0]->f->data,
|
||||
h->short_ref[0]->f->linesize,
|
||||
(const uint8_t **)prev->f->data,
|
||||
prev->f->linesize,
|
||||
h->avctx->pix_fmt,
|
||||
prev->f->format,
|
||||
h->mb_width * 16,
|
||||
h->mb_height * 16);
|
||||
h->short_ref[0]->poc = prev->poc + 2;
|
||||
|
@ -499,7 +499,8 @@ int ff_hevc_decode_nal_vps(HEVCContext *s)
|
||||
if (get_bits_left(gb) < 0) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"Overread VPS by %d bits\n", -get_bits_left(gb));
|
||||
goto err;
|
||||
if (s->vps_list[vps_id])
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (s->vps_list[vps_id] &&
|
||||
|
@ -76,7 +76,7 @@
|
||||
* encodes them with just enough bits to reproduce the background noise.
|
||||
*
|
||||
* Discontinuous Transmission (DTX)
|
||||
* DTX is an addition to VAD/VBR operation, that allows to stop transmitting
|
||||
* DTX is an addition to VAD/VBR operation, that makes it possible to stop transmitting
|
||||
* completely when the background noise is stationary.
|
||||
* In file-based operation only 5 bits are used for such frames.
|
||||
*/
|
||||
|
@ -191,8 +191,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
|
||||
x4->params.b_tff = frame->top_field_first;
|
||||
x264_encoder_reconfig(x4->enc, &x4->params);
|
||||
}
|
||||
if (x4->params.vui.i_sar_height != ctx->sample_aspect_ratio.den ||
|
||||
x4->params.vui.i_sar_width != ctx->sample_aspect_ratio.num) {
|
||||
if (x4->params.vui.i_sar_height*ctx->sample_aspect_ratio.num != ctx->sample_aspect_ratio.den * x4->params.vui.i_sar_width) {
|
||||
x4->params.vui.i_sar_height = ctx->sample_aspect_ratio.den;
|
||||
x4->params.vui.i_sar_width = ctx->sample_aspect_ratio.num;
|
||||
x264_encoder_reconfig(x4->enc, &x4->params);
|
||||
|
@ -504,7 +504,7 @@ static int hadamard8_diff8x8_altivec(MpegEncContext *s, uint8_t *dst,
|
||||
}
|
||||
|
||||
/*
|
||||
* 16x8 works with 16 elements; it allows to avoid replicating loads, and
|
||||
* 16x8 works with 16 elements; it can avoid replicating loads, and
|
||||
* gives the compiler more room for scheduling. It's only used from
|
||||
* inside hadamard8_diff16_altivec.
|
||||
*
|
||||
|
@ -801,6 +801,12 @@ static int tak_decode_frame(AVCodecContext *avctx, void *data,
|
||||
if (s->mcdparams[i].present) {
|
||||
s->mcdparams[i].index = get_bits(gb, 2);
|
||||
s->mcdparams[i].chan2 = get_bits(gb, 4);
|
||||
if (s->mcdparams[i].chan2 >= avctx->channels) {
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
"invalid channel 2 (%d) for %d channel(s)\n",
|
||||
s->mcdparams[i].chan2, avctx->channels);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if (s->mcdparams[i].index == 1) {
|
||||
if ((nbit == s->mcdparams[i].chan2) ||
|
||||
(ch_mask & 1 << s->mcdparams[i].chan2))
|
||||
|
@ -3286,7 +3286,7 @@ static void decode_b(AVCodecContext *ctx, int row, int col,
|
||||
}
|
||||
|
||||
// emulated overhangs if the stride of the target buffer can't hold. This
|
||||
// allows to support emu-edge and so on even if we have large block
|
||||
// makes it possible to support emu-edge and so on even if we have large block
|
||||
// overhangs
|
||||
emu[0] = (col + w4) * 8 > f->linesize[0] ||
|
||||
(row + h4) > s->rows;
|
||||
@ -3988,7 +3988,8 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame,
|
||||
int size = pkt->size;
|
||||
VP9Context *s = ctx->priv_data;
|
||||
int res, tile_row, tile_col, i, ref, row, col;
|
||||
int retain_segmap_ref = s->segmentation.enabled && !s->segmentation.update_map;
|
||||
int retain_segmap_ref = s->segmentation.enabled && !s->segmentation.update_map
|
||||
&& s->frames[REF_FRAME_SEGMAP].segmentation_map;
|
||||
ptrdiff_t yoff, uvoff, ls_y, ls_uv;
|
||||
AVFrame *f;
|
||||
int bytesperpixel;
|
||||
|
@ -80,7 +80,7 @@
|
||||
"movq %%mm"#R1", "#OFF"(%1) \n\t" \
|
||||
"add %2, %0 \n\t"
|
||||
|
||||
/** Sacrifying mm6 allows to pipeline loads from src */
|
||||
/** Sacrificing mm6 makes it possible to pipeline loads from src */
|
||||
static void vc1_put_ver_16b_shift2_mmx(int16_t *dst,
|
||||
const uint8_t *src, x86_reg stride,
|
||||
int rnd, int64_t shift)
|
||||
|
@ -27,7 +27,7 @@
|
||||
* @author Benoit Fouet ( benoit fouet free fr )
|
||||
* @author Nicolas George ( nicolas george normalesup org )
|
||||
*
|
||||
* This avdevice decoder allows to capture audio from an ALSA (Advanced
|
||||
* This avdevice decoder can capture audio from an ALSA (Advanced
|
||||
* Linux Sound Architecture) device.
|
||||
*
|
||||
* The filename parameter is the name of an ALSA PCM device capable of
|
||||
|
@ -26,7 +26,7 @@
|
||||
* @author Luca Abeni ( lucabe72 email it )
|
||||
* @author Benoit Fouet ( benoit fouet free fr )
|
||||
*
|
||||
* This avdevice encoder allows to play audio to an ALSA (Advanced Linux
|
||||
* This avdevice encoder can play audio to an ALSA (Advanced Linux
|
||||
* Sound Architecture) device.
|
||||
*
|
||||
* The filename parameter is the name of an ALSA PCM device capable of
|
||||
|
@ -324,7 +324,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
|
||||
* Following API allows user to probe device capabilities (supported codecs,
|
||||
* pixel formats, sample formats, resolutions, channel counts, etc).
|
||||
* It is build on top op AVOption API.
|
||||
* Queried capabilities allows to set up converters of video or audio
|
||||
* Queried capabilities make it possible to set up converters of video or audio
|
||||
* parameters that fit to the device.
|
||||
*
|
||||
* List of capabilities that can be queried:
|
||||
|
@ -411,7 +411,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
|
||||
continue;
|
||||
} else if (ret < 0)
|
||||
return ret;
|
||||
d = av_rescale_q(frame->pts, tb, AV_TIME_BASE_Q);
|
||||
d = av_rescale_q_rnd(frame->pts, tb, AV_TIME_BASE_Q, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
|
||||
av_dlog(avctx, "sink_idx:%d time:%f\n", i, d);
|
||||
av_frame_unref(frame);
|
||||
|
||||
|
@ -67,7 +67,7 @@
|
||||
* with an AVFMT_NOFILE format).
|
||||
*
|
||||
* @section lavf_options Passing options to (de)muxers
|
||||
* Lavf allows to configure muxers and demuxers using the @ref avoptions
|
||||
* It is possible to configure lavf muxers and demuxers using the @ref avoptions
|
||||
* mechanism. Generic (format-independent) libavformat options are provided by
|
||||
* AVFormatContext, they can be examined from a user program by calling
|
||||
* av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass
|
||||
@ -234,7 +234,7 @@
|
||||
* @defgroup lavf_io I/O Read/Write
|
||||
* @{
|
||||
* @section lavf_io_dirlist Directory listing
|
||||
* The directory listing API allows to list files on remote servers.
|
||||
* The directory listing API makes it possible to list files on remote servers.
|
||||
*
|
||||
* Some of possible use cases:
|
||||
* - an "open file" dialog to choose files from a remote location,
|
||||
@ -2361,7 +2361,7 @@ int av_write_uncoded_frame(AVFormatContext *s, int stream_index,
|
||||
/**
|
||||
* Write a uncoded frame to an output media file.
|
||||
*
|
||||
* If the muxer supports it, this function allows to write an AVFrame
|
||||
* If the muxer supports it, this function makes it possible to write an AVFrame
|
||||
* structure directly, without encoding it into a packet.
|
||||
* It is mostly useful for devices and similar special muxers that use raw
|
||||
* video or PCM data and will not serialize it into a byte stream.
|
||||
|
@ -263,7 +263,7 @@ int ffurl_alloc(URLContext **puc, const char *filename, int flags,
|
||||
|
||||
*puc = NULL;
|
||||
if (av_strstart(filename, "https:", NULL))
|
||||
av_log(NULL, AV_LOG_WARNING, "https protocol not found, recompile with "
|
||||
av_log(NULL, AV_LOG_WARNING, "https protocol not found, recompile FFmpeg with "
|
||||
"openssl, gnutls,\n"
|
||||
"or securetransport enabled.\n");
|
||||
return AVERROR_PROTOCOL_NOT_FOUND;
|
||||
|
@ -79,7 +79,7 @@ typedef struct AVIODirEntry {
|
||||
char *name; /**< Filename */
|
||||
int type; /**< Type of the entry */
|
||||
int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise.
|
||||
Name can be encoded with UTF-8 eventhough 0 is set. */
|
||||
Name can be encoded with UTF-8 even though 0 is set. */
|
||||
int64_t size; /**< File size in bytes, -1 if unknown. */
|
||||
int64_t modification_timestamp; /**< Time of last modification in microseconds since unix
|
||||
epoch, -1 if unknown. */
|
||||
|
@ -812,6 +812,7 @@ int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
|
||||
int max_buffer_size = s->max_packet_size ?
|
||||
s->max_packet_size : IO_BUFFER_SIZE;
|
||||
int filled = s->buf_end - s->buffer;
|
||||
ptrdiff_t checksum_ptr_offset = s->checksum_ptr ? s->checksum_ptr - s->buffer : -1;
|
||||
|
||||
buf_size += s->buf_ptr - s->buffer + max_buffer_size;
|
||||
|
||||
@ -829,6 +830,8 @@ int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
|
||||
s->buf_end = buffer + (s->buf_end - s->buffer);
|
||||
s->buffer = buffer;
|
||||
s->buffer_size = buf_size;
|
||||
if (checksum_ptr_offset >= 0)
|
||||
s->checksum_ptr = s->buffer + checksum_ptr_offset;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -562,7 +562,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
|
||||
if (enc->codec_id == AV_CODEC_ID_H264 || enc->codec_id == AV_CODEC_ID_MPEG4) {
|
||||
/* check if extradata looks like mp4 formated */
|
||||
/* check if extradata looks like mp4 formatted */
|
||||
if (enc->extradata_size > 0 && *(uint8_t*)enc->extradata != 1)
|
||||
if ((ret = ff_avc_parse_nal_units_buf(pkt->data, &data, &size)) < 0)
|
||||
return ret;
|
||||
|
@ -449,7 +449,7 @@ static int parse_rps(GetBitContext *gb, unsigned int rps_idx,
|
||||
*
|
||||
* NumDeltaPocs[RefRpsIdx]: num_delta_pocs[rps_idx - 1]
|
||||
*/
|
||||
for (i = 0; i < num_delta_pocs[rps_idx - 1]; i++) {
|
||||
for (i = 0; i <= num_delta_pocs[rps_idx - 1]; i++) {
|
||||
uint8_t use_delta_flag = 0;
|
||||
uint8_t used_by_curr_pic_flag = get_bits1(gb);
|
||||
if (!used_by_curr_pic_flag)
|
||||
|
@ -1668,6 +1668,14 @@ static int matroska_parse_tracks(AVFormatContext *s)
|
||||
if (!track->codec_id)
|
||||
continue;
|
||||
|
||||
if (track->audio.samplerate < 0 || track->audio.samplerate > INT_MAX ||
|
||||
isnan(track->audio.samplerate)) {
|
||||
av_log(matroska->ctx, AV_LOG_WARNING,
|
||||
"Invalid sample rate %f, defaulting to 8000 instead.\n",
|
||||
track->audio.samplerate);
|
||||
track->audio.samplerate = 8000;
|
||||
}
|
||||
|
||||
if (track->type == MATROSKA_TRACK_TYPE_VIDEO) {
|
||||
if (!track->default_duration && track->video.frame_rate > 0)
|
||||
track->default_duration = 1000000000 / track->video.frame_rate;
|
||||
@ -1869,6 +1877,18 @@ static int matroska_parse_tracks(AVFormatContext *s)
|
||||
NULL, NULL, NULL, NULL);
|
||||
avio_write(&b, "TTA1", 4);
|
||||
avio_wl16(&b, 1);
|
||||
if (track->audio.channels > UINT16_MAX ||
|
||||
track->audio.bitdepth > UINT16_MAX) {
|
||||
av_log(matroska->ctx, AV_LOG_WARNING,
|
||||
"Too large audio channel number %"PRIu64
|
||||
" or bitdepth %"PRIu64". Skipping track.\n",
|
||||
track->audio.channels, track->audio.bitdepth);
|
||||
av_freep(&extradata);
|
||||
if (matroska->ctx->error_recognition & AV_EF_EXPLODE)
|
||||
return AVERROR_INVALIDDATA;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
avio_wl16(&b, track->audio.channels);
|
||||
avio_wl16(&b, track->audio.bitdepth);
|
||||
if (track->audio.out_samplerate < 0 || track->audio.out_samplerate > INT_MAX)
|
||||
|
@ -250,7 +250,9 @@ AVOutputFormat ff_mjpeg_muxer = {
|
||||
.write_packet = ff_raw_write_packet,
|
||||
.flags = AVFMT_NOTIMESTAMPS,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if CONFIG_SINGLEJPEG_MUXER
|
||||
AVOutputFormat ff_singlejpeg_muxer = {
|
||||
.name = "singlejpeg",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("JPEG single image"),
|
||||
|
@ -87,7 +87,7 @@ static int tls_close(URLContext *h)
|
||||
{
|
||||
TLSContext *c = h->priv_data;
|
||||
if (c->need_shutdown)
|
||||
gnutls_bye(c->session, GNUTLS_SHUT_RDWR);
|
||||
gnutls_bye(c->session, GNUTLS_SHUT_WR);
|
||||
if (c->session)
|
||||
gnutls_deinit(c->session);
|
||||
if (c->cred)
|
||||
|
@ -502,7 +502,7 @@ int main(void)
|
||||
printf("Testing av_append_path_component()\n");
|
||||
#define TEST_APPEND_PATH_COMPONENT(path, component, expected) \
|
||||
fullpath = av_append_path_component((path), (component)); \
|
||||
printf("%s = %s\n", fullpath, expected); \
|
||||
printf("%s = %s\n", fullpath ? fullpath : "(null)", expected); \
|
||||
av_free(fullpath);
|
||||
TEST_APPEND_PATH_COMPONENT(NULL, NULL, "(null)")
|
||||
TEST_APPEND_PATH_COMPONENT("path", NULL, "path");
|
||||
|
@ -309,7 +309,7 @@ AVClassCategory av_default_get_category(void *ptr);
|
||||
|
||||
/**
|
||||
* Format a line of log the same way as the default callback.
|
||||
* @param line buffer to receive the formated line
|
||||
* @param line buffer to receive the formatted line
|
||||
* @param line_size size of the buffer
|
||||
* @param print_prefix used to store whether the prefix must be printed;
|
||||
* must point to a persistent integer initially set to 1
|
||||
|
@ -213,7 +213,7 @@
|
||||
* In some cases it may be more convenient to put all options into an
|
||||
* AVDictionary and call av_opt_set_dict() on it. A specific case of this
|
||||
* are the format/codec open functions in lavf/lavc which take a dictionary
|
||||
* filled with option as a parameter. This allows to set some options
|
||||
* filled with option as a parameter. This makes it possible to set some options
|
||||
* that cannot be set otherwise, since e.g. the input file format is not known
|
||||
* before the file is actually opened.
|
||||
*/
|
||||
|
@ -530,7 +530,7 @@ enum AVColorRange {
|
||||
* Illustration showing the location of the first (top left) chroma sample of the
|
||||
* image, the left shows only luma, the right
|
||||
* shows the location of the chroma sample, the 2 could be imagined to overlay
|
||||
* each other but are drawn seperately due to limitations of ASCII
|
||||
* each other but are drawn separately due to limitations of ASCII
|
||||
*
|
||||
* 1st 2nd 1st 2nd horizontal luma sample positions
|
||||
* v v v v
|
||||
|
@ -76,6 +76,7 @@ try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
|
||||
#include "config.h"
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -997,7 +998,7 @@ void pp_postprocess(const uint8_t * src[3], const int srcStride[3],
|
||||
int i;
|
||||
const int count= FFMAX(mbHeight * QPStride, mbWidth);
|
||||
for(i=0; i<(count>>2); i++){
|
||||
((uint32_t*)c->nonBQPTable)[i] = ((const uint32_t*)QP_store)[i] & 0x3F3F3F3F;
|
||||
AV_WN32(c->nonBQPTable + (i<<2), AV_RN32(QP_store + (i<<2)) & 0x3F3F3F3F);
|
||||
}
|
||||
for(i<<=2; i<count; i++){
|
||||
c->nonBQPTable[i] = QP_store[i] & 0x3F;
|
||||
|
Loading…
x
Reference in New Issue
Block a user