summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/aac_ac3_parser.h2
-rw-r--r--libavcodec/aacdectab.h2
-rw-r--r--libavcodec/ac3.h2
-rw-r--r--libavcodec/ac3enc.c6
-rw-r--r--libavcodec/ac3enc.h2
-rw-r--r--libavcodec/arm/dca.h70
-rw-r--r--libavcodec/audioconvert.c2
-rw-r--r--libavcodec/audioconvert.h2
-rw-r--r--libavcodec/avcodec.h6
-rw-r--r--libavcodec/dca.c29
-rw-r--r--libavcodec/mlp_parser.c2
-rw-r--r--libavcodec/mlp_parser.h2
-rw-r--r--libavcodec/pthread.c5
-rw-r--r--libavcodec/thread.h3
-rw-r--r--libavcodec/version.h2
-rw-r--r--libavcodec/vorbis.h2
-rw-r--r--libavcodec/vorbis_data.c2
17 files changed, 83 insertions, 58 deletions
diff --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h
index ccc387d3aa..b1fb0cf59f 100644
--- a/libavcodec/aac_ac3_parser.h
+++ b/libavcodec/aac_ac3_parser.h
@@ -48,7 +48,7 @@ typedef struct AACAC3ParseContext {
int sample_rate;
int bit_rate;
int samples;
- int64_t channel_layout;
+ uint64_t channel_layout;
int service_type;
int remaining_size;
diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h
index 22ae00ff32..442ef91654 100644
--- a/libavcodec/aacdectab.h
+++ b/libavcodec/aacdectab.h
@@ -90,7 +90,7 @@ static const uint8_t aac_channel_layout_map[7][5][2] = {
{ { TYPE_CPE, 0 }, { TYPE_SCE, 0 }, { TYPE_LFE, 0 }, { TYPE_CPE, 2 }, { TYPE_CPE, 1 }, },
};
-static const int64_t aac_channel_layout[8] = {
+static const uint64_t aac_channel_layout[8] = {
AV_CH_LAYOUT_MONO,
AV_CH_LAYOUT_STEREO,
AV_CH_LAYOUT_SURROUND,
diff --git a/libavcodec/ac3.h b/libavcodec/ac3.h
index d53527844c..b9f34b9d90 100644
--- a/libavcodec/ac3.h
+++ b/libavcodec/ac3.h
@@ -120,7 +120,7 @@ typedef struct {
uint32_t bit_rate;
uint8_t channels;
uint16_t frame_size;
- int64_t channel_layout;
+ uint64_t channel_layout;
/** @} */
} AC3HeaderInfo;
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 3657ece1e0..93a08821be 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -77,7 +77,7 @@ static uint8_t exponent_group_tab[2][3][256];
/**
* List of supported channel layouts.
*/
-const int64_t ff_ac3_channel_layouts[19] = {
+const uint64_t ff_ac3_channel_layouts[19] = {
AV_CH_LAYOUT_MONO,
AV_CH_LAYOUT_STEREO,
AV_CH_LAYOUT_2_1,
@@ -2060,13 +2060,13 @@ av_cold int ff_ac3_encode_close(AVCodecContext *avctx)
* Set channel information during initialization.
*/
static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
- int64_t *channel_layout)
+ uint64_t *channel_layout)
{
int ch_layout;
if (channels < 1 || channels > AC3_MAX_CHANNELS)
return AVERROR(EINVAL);
- if ((uint64_t)*channel_layout > 0x7FF)
+ if (*channel_layout > 0x7FF)
return AVERROR(EINVAL);
ch_layout = *channel_layout;
if (!ch_layout)
diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h
index 4a017498f6..6ef1a5373a 100644
--- a/libavcodec/ac3enc.h
+++ b/libavcodec/ac3enc.h
@@ -258,7 +258,7 @@ typedef struct AC3EncodeContext {
} AC3EncodeContext;
-extern const int64_t ff_ac3_channel_layouts[19];
+extern const uint64_t ff_ac3_channel_layouts[19];
int ff_ac3_encode_init(AVCodecContext *avctx);
diff --git a/libavcodec/arm/dca.h b/libavcodec/arm/dca.h
index e85b82c1bd..9ff7f7c75e 100644
--- a/libavcodec/arm/dca.h
+++ b/libavcodec/arm/dca.h
@@ -27,38 +27,54 @@
#if HAVE_ARMV6 && HAVE_INLINE_ASM
-#define decode_blockcode decode_blockcode
-static inline int decode_blockcode(int code, int levels, int *values)
+#define decode_blockcodes decode_blockcodes
+static inline int decode_blockcodes(int code1, int code2, int levels,
+ int *values)
{
- int v0, v1, v2, v3;
+ int v0, v1, v2, v3, v4, v5;
- __asm__ ("smmul %4, %8, %11 \n"
- "smlabb %8, %4, %10, %8 \n"
- "smmul %5, %4, %11 \n"
- "sub %8, %8, %9, lsr #1 \n"
- "smlabb %4, %5, %10, %4 \n"
- "smmul %6, %5, %11 \n"
- "str %8, %0 \n"
- "sub %4, %4, %9, lsr #1 \n"
- "smlabb %5, %6, %10, %5 \n"
- "smmul %7, %6, %11 \n"
- "str %4, %1 \n"
- "sub %5, %5, %9, lsr #1 \n"
- "smlabb %6, %7, %10, %6 \n"
- "cmp %7, #0 \n"
- "str %5, %2 \n"
- "sub %6, %6, %9, lsr #1 \n"
- "it eq \n"
- "mvneq %7, #0 \n"
- "str %6, %3 \n"
+ __asm__ ("smmul %8, %14, %18 \n"
+ "smmul %11, %15, %18 \n"
+ "smlabb %14, %8, %17, %14 \n"
+ "smlabb %15, %11, %17, %15 \n"
+ "smmul %9, %8, %18 \n"
+ "smmul %12, %11, %18 \n"
+ "sub %14, %14, %16, lsr #1 \n"
+ "sub %15, %15, %16, lsr #1 \n"
+ "smlabb %8, %9, %17, %8 \n"
+ "smlabb %11, %12, %17, %11 \n"
+ "smmul %10, %9, %18 \n"
+ "smmul %13, %12, %18 \n"
+ "str %14, %0 \n"
+ "str %15, %4 \n"
+ "sub %8, %8, %16, lsr #1 \n"
+ "sub %11, %11, %16, lsr #1 \n"
+ "smlabb %9, %10, %17, %9 \n"
+ "smlabb %12, %13, %17, %12 \n"
+ "smmul %14, %10, %18 \n"
+ "smmul %15, %13, %18 \n"
+ "str %8, %1 \n"
+ "str %11, %5 \n"
+ "sub %9, %9, %16, lsr #1 \n"
+ "sub %12, %12, %16, lsr #1 \n"
+ "smlabb %10, %14, %17, %10 \n"
+ "smlabb %13, %15, %17, %13 \n"
+ "str %9, %2 \n"
+ "str %12, %6 \n"
+ "sub %10, %10, %16, lsr #1 \n"
+ "sub %13, %13, %16, lsr #1 \n"
+ "str %10, %3 \n"
+ "str %13, %7 \n"
: "=m"(values[0]), "=m"(values[1]),
"=m"(values[2]), "=m"(values[3]),
- "=&r"(v0), "=&r"(v1), "=&r"(v2), "=&r"(v3),
- "+&r"(code)
- : "r"(levels - 1), "r"(-levels), "r"(ff_inverse[levels])
- : "cc");
+ "=m"(values[4]), "=m"(values[5]),
+ "=m"(values[6]), "=m"(values[7]),
+ "=&r"(v0), "=&r"(v1), "=&r"(v2),
+ "=&r"(v3), "=&r"(v4), "=&r"(v5),
+ "+&r"(code1), "+&r"(code2)
+ : "r"(levels - 1), "r"(-levels), "r"(ff_inverse[levels]));
- return v3;
+ return code1 | code2;
}
#endif
diff --git a/libavcodec/audioconvert.c b/libavcodec/audioconvert.c
index e101095e40..c48fbb74c5 100644
--- a/libavcodec/audioconvert.c
+++ b/libavcodec/audioconvert.c
@@ -48,7 +48,7 @@ void avcodec_sample_fmt_string (char *buf, int buf_size, int sample_fmt)
}
#endif
-int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name)
+uint64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name)
{
switch(nb_channels) {
case 1: return AV_CH_LAYOUT_MONO;
diff --git a/libavcodec/audioconvert.h b/libavcodec/audioconvert.h
index 5f38cca513..7d8278fd47 100644
--- a/libavcodec/audioconvert.h
+++ b/libavcodec/audioconvert.h
@@ -80,7 +80,7 @@ int avcodec_channel_layout_num_channels(int64_t channel_layout);
* @param fmt_name Format name, or NULL if unknown
* @return Channel layout mask
*/
-int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name);
+uint64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name);
struct AVAudioConvert;
typedef struct AVAudioConvert AVAudioConvert;
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 18e16ff584..2fb200f047 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2758,14 +2758,14 @@ typedef struct AVCodecContext {
* - encoding: set by user.
* - decoding: set by user, may be overwritten by libavcodec.
*/
- int64_t channel_layout;
+ uint64_t channel_layout;
/**
* Request decoder to use this channel layout if it can (0 for default)
* - encoding: unused
* - decoding: Set by user.
*/
- int64_t request_channel_layout;
+ uint64_t request_channel_layout;
/**
* Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
@@ -3122,7 +3122,7 @@ typedef struct AVCodec {
const char *long_name;
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
- const int64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
+ const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
const AVClass *priv_class; ///< AVClass for the private context
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
diff --git a/libavcodec/dca.c b/libavcodec/dca.c
index 37977e5c55..07a9c0a484 100644
--- a/libavcodec/dca.c
+++ b/libavcodec/dca.c
@@ -128,7 +128,7 @@ static const int dca_ext_audio_descr_mask[] = {
* All 2 channel configurations -> AV_CH_LAYOUT_STEREO
*/
-static const int64_t dca_core_channel_layout[] = {
+static const uint64_t dca_core_channel_layout[] = {
AV_CH_FRONT_CENTER, ///< 1, A
AV_CH_LAYOUT_STEREO, ///< 2, A + B (dual mono)
AV_CH_LAYOUT_STEREO, ///< 2, L + R (stereo)
@@ -1037,7 +1037,7 @@ static void dca_downmix(float *samples, int srcfmt,
}
-#ifndef decode_blockcode
+#ifndef decode_blockcodes
/* Very compact version of the block code decoder that does not use table
* look-up but is slightly slower */
static int decode_blockcode(int code, int levels, int *values)
@@ -1051,12 +1051,13 @@ static int decode_blockcode(int code, int levels, int *values)
code = div;
}
- if (code == 0)
- return 0;
- else {
- av_log(NULL, AV_LOG_ERROR, "ERROR: block code look-up failed\n");
- return AVERROR_INVALIDDATA;
- }
+ return code;
+}
+
+static int decode_blockcodes(int code1, int code2, int levels, int *values)
+{
+ return decode_blockcode(code1, levels, values) |
+ decode_blockcode(code2, levels, values + 4);
}
#endif
@@ -1126,16 +1127,20 @@ static int dca_subsubframe(DCAContext * s, int base_channel, int block_index)
if (abits >= 11 || !dca_smpl_bitalloc[abits].vlc[sel].table){
if (abits <= 7){
/* Block code */
- int block_code1, block_code2, size, levels;
+ int block_code1, block_code2, size, levels, err;
size = abits_sizes[abits-1];
levels = abits_levels[abits-1];
block_code1 = get_bits(&s->gb, size);
- /* FIXME Should test return value */
- decode_blockcode(block_code1, levels, block);
block_code2 = get_bits(&s->gb, size);
- decode_blockcode(block_code2, levels, &block[4]);
+ err = decode_blockcodes(block_code1, block_code2,
+ levels, block);
+ if (err) {
+ av_log(s->avctx, AV_LOG_ERROR,
+ "ERROR: block code look-up failed\n");
+ return AVERROR_INVALIDDATA;
+ }
}else{
/* no coding */
for (m = 0; m < 8; m++)
diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c
index 151841a103..0c06dbbab4 100644
--- a/libavcodec/mlp_parser.c
+++ b/libavcodec/mlp_parser.c
@@ -107,7 +107,7 @@ static int truehd_channels(int chanmap)
return channels;
}
-int64_t ff_truehd_layout(int chanmap)
+uint64_t ff_truehd_layout(int chanmap)
{
int layout = 0, i;
diff --git a/libavcodec/mlp_parser.h b/libavcodec/mlp_parser.h
index 6e43bc38dc..3b81763d57 100644
--- a/libavcodec/mlp_parser.h
+++ b/libavcodec/mlp_parser.h
@@ -54,7 +54,7 @@ typedef struct MLPHeaderInfo
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb);
-int64_t ff_truehd_layout(int chanmap);
+uint64_t ff_truehd_layout(int chanmap);
extern const uint64_t ff_mlp_layout[32];
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index 83ecaad069..eb304720e4 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -525,7 +525,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
if (fctx->next_decoding >= (avctx->thread_count-1)) fctx->delaying = 0;
*got_picture_ptr=0;
- return 0;
+ return avpkt->size;
}
/*
@@ -566,7 +566,8 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
fctx->next_finished = finished;
- return p->result;
+ /* return the size of the consumed packet if no error occurred */
+ return (p->result >= 0) ? avpkt->size : p->result;
}
void ff_thread_report_progress(AVFrame *f, int n, int field)
diff --git a/libavcodec/thread.h b/libavcodec/thread.h
index 9cfb31d5a1..1c5ffe7a73 100644
--- a/libavcodec/thread.h
+++ b/libavcodec/thread.h
@@ -42,6 +42,9 @@ void ff_thread_flush(AVCodecContext *avctx);
* Submits a new frame to a decoding thread.
* Returns the next available frame in picture. *got_picture_ptr
* will be 0 if none is available.
+ * The return value on success is the size of the consumed packet for
+ * compatiblity with avcodec_decode_video2(). This means the decoder
+ * has to consume the full packet.
*
* Parameters are the same as avcodec_decode_video2().
*/
diff --git a/libavcodec/version.h b/libavcodec/version.h
index f3de82b193..98eb48086c 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -22,7 +22,7 @@
#define LIBAVCODEC_VERSION_MAJOR 53
#define LIBAVCODEC_VERSION_MINOR 37
-#define LIBAVCODEC_VERSION_MICRO 0
+#define LIBAVCODEC_VERSION_MICRO 1
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
diff --git a/libavcodec/vorbis.h b/libavcodec/vorbis.h
index 15b5d85b36..cad080ef3a 100644
--- a/libavcodec/vorbis.h
+++ b/libavcodec/vorbis.h
@@ -27,7 +27,7 @@ extern const float ff_vorbis_floor1_inverse_db_table[256];
extern const float * const ff_vorbis_vwin[8];
extern const uint8_t ff_vorbis_channel_layout_offsets[8][8];
extern const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8];
-extern const int64_t ff_vorbis_channel_layouts[9];
+extern const uint64_t ff_vorbis_channel_layouts[9];
typedef struct {
uint16_t x;
diff --git a/libavcodec/vorbis_data.c b/libavcodec/vorbis_data.c
index 8fa624168a..aab06b7453 100644
--- a/libavcodec/vorbis_data.c
+++ b/libavcodec/vorbis_data.c
@@ -44,7 +44,7 @@ const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8] = {
{ 0, 2, 1, 6, 7, 4, 5, 3 },
};
-const int64_t ff_vorbis_channel_layouts[9] = {
+const uint64_t ff_vorbis_channel_layouts[9] = {
AV_CH_LAYOUT_MONO,
AV_CH_LAYOUT_STEREO,
AV_CH_LAYOUT_SURROUND,