summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-04-06 02:59:49 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-04-06 02:59:49 +0200
commit11d78415ca1beaa39303c280d7896024edc45aa7 (patch)
treecea1da5ffc8ae3e09d7375241a1a334e27703610
parentee6db0de3760ceb7b7a9968a5322c1d8e8e23861 (diff)
parent5371803dd5d9f7bbc62d68274084d25f10a8dc61 (diff)
Merge remote branch 'qatar/master'
* qatar/master: psymodel: extend API to include PE and bit allocation. avio: always compile dyn_buf functions Remove unnecessary parameter from ff_thread_init() and fix behavior Revert "aac_latm_dec: use aac context and aac m4ac" configure: tell user if libva is enabled like the rest of external libs. Add silence support for AV_SAMPLE_FMT_U8. avio: make URL_PROTOCOL_FLAG_NESTED_SCHEME internal avio: deprecate av_url_read_seek avio: deprecate av_url_read_pause ac3enc: NEON optimised extract_exponents Conflicts: libavcodec/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rwxr-xr-xconfigure1
-rw-r--r--ffmpeg.c10
-rw-r--r--libavcodec/aacdec.c4
-rw-r--r--libavcodec/arm/ac3dsp_init_arm.c2
-rw-r--r--libavcodec/arm/ac3dsp_neon.S20
-rw-r--r--libavcodec/psymodel.h9
-rw-r--r--libavcodec/utils.c1
-rw-r--r--libavformat/avio.c2
-rw-r--r--libavformat/avio.h31
-rw-r--r--libavformat/avio_internal.h22
-rw-r--r--libavformat/aviobuf.c4
-rw-r--r--libavformat/url.h5
12 files changed, 76 insertions, 35 deletions
diff --git a/configure b/configure
index 9a862216f8..3fceb31b2a 100755
--- a/configure
+++ b/configure
@@ -3171,6 +3171,7 @@ echo "librtmp enabled ${librtmp-no}"
echo "libschroedinger enabled ${libschroedinger-no}"
echo "libspeex enabled ${libspeex-no}"
echo "libtheora enabled ${libtheora-no}"
+echo "libva enabled ${vaapi-no}"
echo "libvorbis enabled ${libvorbis-no}"
echo "libvpx enabled ${libvpx-no}"
echo "libx264 enabled ${libx264-no}"
diff --git a/ffmpeg.c b/ffmpeg.c
index e2692de5e2..ad7e49d743 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1475,6 +1475,14 @@ static void print_report(AVFormatContext **output_files,
}
}
+static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size)
+{
+ int fill_char = 0x00;
+ if (sample_fmt == AV_SAMPLE_FMT_U8)
+ fill_char = 0x80;
+ memset(buf, fill_char, size);
+}
+
/* pkt = NULL means EOF (needed to flush decoder buffers) */
static int output_packet(AVInputStream *ist, int ist_index,
AVOutputStream **ost_table, int nb_ostreams,
@@ -1826,7 +1834,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
int frame_bytes = enc->frame_size*osize*enc->channels;
if (allocated_audio_buf_size < frame_bytes)
ffmpeg_exit(1);
- memset(audio_buf+fifo_bytes, 0, frame_bytes - fifo_bytes);
+ generate_silence(audio_buf+fifo_bytes, enc->sample_fmt, frame_bytes - fifo_bytes);
}
ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, (short *)audio_buf);
diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
index e7b312c415..5f86b89b38 100644
--- a/libavcodec/aacdec.c
+++ b/libavcodec/aacdec.c
@@ -2266,6 +2266,7 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
GetBitContext *gb)
{
AVCodecContext *avctx = latmctx->aac_ctx.avctx;
+ MPEG4AudioConfig m4ac;
int config_start_bit = get_bits_count(gb);
int bits_consumed, esize;
@@ -2275,8 +2276,7 @@ static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
return AVERROR_INVALIDDATA;
} else {
bits_consumed =
- decode_audio_specific_config(&latmctx->aac_ctx, avctx,
- &latmctx->aac_ctx.m4ac,
+ decode_audio_specific_config(NULL, avctx, &m4ac,
gb->buffer + (config_start_bit / 8),
get_bits_left(gb) / 8);
diff --git a/libavcodec/arm/ac3dsp_init_arm.c b/libavcodec/arm/ac3dsp_init_arm.c
index 8534c9b97c..9f01507853 100644
--- a/libavcodec/arm/ac3dsp_init_arm.c
+++ b/libavcodec/arm/ac3dsp_init_arm.c
@@ -28,6 +28,7 @@ int ff_ac3_max_msb_abs_int16_neon(const int16_t *src, int len);
void ff_ac3_lshift_int16_neon(int16_t *src, unsigned len, unsigned shift);
void ff_ac3_rshift_int32_neon(int32_t *src, unsigned len, unsigned shift);
void ff_float_to_fixed24_neon(int32_t *dst, const float *src, unsigned int len);
+void ff_ac3_extract_exponents_neon(uint8_t *exp, int32_t *coef, int nb_coefs);
void ff_ac3_bit_alloc_calc_bap_armv6(int16_t *mask, int16_t *psd,
int start, int end,
@@ -50,5 +51,6 @@ av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact)
c->ac3_lshift_int16 = ff_ac3_lshift_int16_neon;
c->ac3_rshift_int32 = ff_ac3_rshift_int32_neon;
c->float_to_fixed24 = ff_float_to_fixed24_neon;
+ c->extract_exponents = ff_ac3_extract_exponents_neon;
}
}
diff --git a/libavcodec/arm/ac3dsp_neon.S b/libavcodec/arm/ac3dsp_neon.S
index d33d978d7c..946b39f25b 100644
--- a/libavcodec/arm/ac3dsp_neon.S
+++ b/libavcodec/arm/ac3dsp_neon.S
@@ -92,3 +92,23 @@ function ff_float_to_fixed24_neon, export=1
bgt 1b
bx lr
endfunc
+
+function ff_ac3_extract_exponents_neon, export=1
+ vmov.i32 q14, #24
+ vmov.i32 q15, #8
+1:
+ vld1.32 {q0}, [r1,:128]
+ vabs.s32 q1, q0
+ vclz.i32 q3, q1
+ vsub.i32 q3, q3, q15
+ vcge.s32 q2, q3, q14
+ vbit q3, q14, q2
+ vbic q0, q0, q2
+ vmovn.i32 d6, q3
+ vmovn.i16 d6, q3
+ vst1.32 {q0}, [r1,:128]!
+ vst1.32 {d6[0]}, [r0,:32]!
+ subs r2, r2, #4
+ bgt 1b
+ bx lr
+endfunc
diff --git a/libavcodec/psymodel.h b/libavcodec/psymodel.h
index fc2f6d954c..a89b64c308 100644
--- a/libavcodec/psymodel.h
+++ b/libavcodec/psymodel.h
@@ -26,6 +26,8 @@
/** maximum possible number of bands */
#define PSY_MAX_BANDS 128
+/** maximum number of channels */
+#define PSY_MAX_CHANS 20
/**
* single band psychoacoustic information
@@ -62,6 +64,13 @@ typedef struct FFPsyContext {
int *num_bands; ///< number of scalefactor bands for possible frame sizes
int num_lens; ///< number of scalefactor band sets
+ float pe[PSY_MAX_CHANS]; ///< total PE for each channel in the frame
+
+ struct {
+ int size; ///< size of the bitresevoir in bits
+ int bits; ///< number of bits used in the bitresevoir
+ } bitres;
+
void* model_priv_data; ///< psychoacoustic model implementation private data
} FFPsyContext;
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 42689e03b9..a75c9ce7ea 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1337,7 +1337,6 @@ void ff_thread_await_progress(AVFrame *f, int progress, int field)
int avcodec_thread_init(AVCodecContext *s, int thread_count)
{
s->thread_count = thread_count;
- s->thread_type = FF_THREAD_FRAME | FF_THREAD_SLICE;
return ff_thread_init(s);
}
diff --git a/libavformat/avio.c b/libavformat/avio.c
index bae080b01c..ddaafc84ea 100644
--- a/libavformat/avio.c
+++ b/libavformat/avio.c
@@ -388,6 +388,7 @@ void url_set_interrupt_cb(URLInterruptCB *interrupt_cb)
url_interrupt_cb = interrupt_cb;
}
+#if FF_API_OLD_AVIO
int av_url_read_pause(URLContext *h, int pause)
{
if (!h->prot->url_read_pause)
@@ -402,3 +403,4 @@ int64_t av_url_read_seek(URLContext *h,
return AVERROR(ENOSYS);
return h->prot->url_read_seek(h, stream_index, timestamp, flags);
}
+#endif
diff --git a/libavformat/avio.h b/libavformat/avio.h
index 080be91202..dd22acfed7 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -114,6 +114,9 @@ attribute_deprecated int64_t url_filesize(URLContext *h);
attribute_deprecated int url_get_file_handle(URLContext *h);
attribute_deprecated int url_get_max_packet_size(URLContext *h);
attribute_deprecated void url_get_filename(URLContext *h, char *buf, int buf_size);
+attribute_deprecated int av_url_read_pause(URLContext *h, int pause);
+attribute_deprecated int64_t av_url_read_seek(URLContext *h, int stream_index,
+ int64_t timestamp, int flags);
#endif
/**
@@ -133,36 +136,10 @@ void url_set_interrupt_cb(URLInterruptCB *interrupt_cb);
#if FF_API_OLD_AVIO
/* not implemented */
attribute_deprecated int url_poll(URLPollEntry *poll_table, int n, int timeout);
-#endif
-
-/**
- * Pause and resume playing - only meaningful if using a network streaming
- * protocol (e.g. MMS).
- * @param pause 1 for pause, 0 for resume
- */
-int av_url_read_pause(URLContext *h, int pause);
-/**
- * Seek to a given timestamp relative to some component stream.
- * Only meaningful if using a network streaming protocol (e.g. MMS.).
- * @param stream_index The stream index that the timestamp is relative to.
- * If stream_index is (-1) the timestamp should be in AV_TIME_BASE
- * units from the beginning of the presentation.
- * If a stream_index >= 0 is used and the protocol does not support
- * seeking based on component streams, the call will fail with ENOTSUP.
- * @param timestamp timestamp in AVStream.time_base units
- * or if there is no stream specified then in AV_TIME_BASE units.
- * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE
- * and AVSEEK_FLAG_ANY. The protocol may silently ignore
- * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will
- * fail with ENOTSUP if used and not supported.
- * @return >= 0 on success
- * @see AVInputFormat::read_seek
- */
-int64_t av_url_read_seek(URLContext *h, int stream_index,
- int64_t timestamp, int flags);
#define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */
+#endif
typedef struct URLProtocol {
const char *name;
diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h
index bf2ddb2daf..0c4bd6950d 100644
--- a/libavformat/avio_internal.h
+++ b/libavformat/avio_internal.h
@@ -66,7 +66,29 @@ uint64_t ffio_read_varlen(AVIOContext *bc);
/** @warning must be called before any I/O */
int ffio_set_buf_size(AVIOContext *s, int buf_size);
+/**
+ * Pause and resume playing - only meaningful if using a network streaming
+ * protocol (e.g. MMS).
+ * @param pause 1 for pause, 0 for resume
+ */
int ffio_read_pause(AVIOContext *h, int pause);
+/**
+ * Seek to a given timestamp relative to some component stream.
+ * Only meaningful if using a network streaming protocol (e.g. MMS.).
+ * @param stream_index The stream index that the timestamp is relative to.
+ * If stream_index is (-1) the timestamp should be in AV_TIME_BASE
+ * units from the beginning of the presentation.
+ * If a stream_index >= 0 is used and the protocol does not support
+ * seeking based on component streams, the call will fail with ENOTSUP.
+ * @param timestamp timestamp in AVStream.time_base units
+ * or if there is no stream specified then in AV_TIME_BASE units.
+ * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE
+ * and AVSEEK_FLAG_ANY. The protocol may silently ignore
+ * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will
+ * fail with ENOTSUP if used and not supported.
+ * @return >= 0 on success
+ * @see AVInputFormat::read_seek
+ */
int64_t ffio_read_seek (AVIOContext *h, int stream_index,
int64_t timestamp, int flags);
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 14051cfc3d..1472380acf 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -1049,9 +1049,6 @@ int64_t ffio_read_seek(AVIOContext *s, int stream_index,
return ret;
}
-/* avio_open_dyn_buf and avio_close_dyn_buf are used in rtp.c to send a response
- * back to the server even if CONFIG_MUXERS is false. */
-#if CONFIG_MUXERS || CONFIG_NETWORK
/* buffer handling */
#if FF_API_OLD_AVIO
int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags)
@@ -1198,4 +1195,3 @@ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
av_free(s);
return size - padding;
}
-#endif /* CONFIG_MUXERS || CONFIG_NETWORK */
diff --git a/libavformat/url.h b/libavformat/url.h
index 2110129cb1..97652bb972 100644
--- a/libavformat/url.h
+++ b/libavformat/url.h
@@ -26,6 +26,11 @@
#define AVFORMAT_URL_H
#include "avio.h"
+#include "libavformat/version.h"
+
+#if !FF_API_OLD_AVIO
+#define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */
+#endif
/**
* Create a URLContext for accessing to the resource indicated by