summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-09-25 16:11:34 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-09-25 16:11:34 +0200
commitabcaacf1acb4c7d7c2df5718fd56a714d4998305 (patch)
treee1d7a138ddab9f9863d792719aa349a73f79f2fa
parentd3ef2da59df2bf65bea0ae7b519625c51c6f21dc (diff)
parent7a1a9dd56cb4cafad054bf6d65b21bb24d31c544 (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: pthread: make sure AVFrame.extended_data is set properly. libfdk-aac: reindent after last commit libfdk-aac: Limit to supported sample rates. cbrt_tablegen: Include libm.h oggparsetheora: make it more robust ogg: prevent NULL pointer deference in theora gptopts Conflicts: libavformat/oggparsetheora.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/cbrt_tablegen.c1
-rw-r--r--libavcodec/libfdk-aacenc.c36
-rw-r--r--libavcodec/pthread.c4
-rw-r--r--libavformat/oggparsetheora.c16
4 files changed, 38 insertions, 19 deletions
diff --git a/libavcodec/cbrt_tablegen.c b/libavcodec/cbrt_tablegen.c
index e0a8e63a8b..babb85a07b 100644
--- a/libavcodec/cbrt_tablegen.c
+++ b/libavcodec/cbrt_tablegen.c
@@ -21,6 +21,7 @@
*/
#include <stdlib.h>
+#include "libavutil/libm.h"
#define CONFIG_HARDCODED_TABLES 0
#include "cbrt_tablegen.h"
#include "tableprint.h"
diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c
index 965ead6c16..36df84f741 100644
--- a/libavcodec/libfdk-aacenc.c
+++ b/libavcodec/libfdk-aacenc.c
@@ -391,20 +391,26 @@ static const uint64_t aac_channel_layout[] = {
0,
};
+static const int aac_sample_rates[] = {
+ 96000, 88200, 64000, 48000, 44100, 32000,
+ 24000, 22050, 16000, 12000, 11025, 8000, 0
+};
+
AVCodec ff_libfdk_aac_encoder = {
- .name = "libfdk_aac",
- .type = AVMEDIA_TYPE_AUDIO,
- .id = AV_CODEC_ID_AAC,
- .priv_data_size = sizeof(AACContext),
- .init = aac_encode_init,
- .encode2 = aac_encode_frame,
- .close = aac_encode_close,
- .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
- .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
- AV_SAMPLE_FMT_NONE },
- .long_name = NULL_IF_CONFIG_SMALL("Fraunhofer FDK AAC"),
- .priv_class = &aac_enc_class,
- .defaults = aac_encode_defaults,
- .profiles = profiles,
- .channel_layouts = aac_channel_layout,
+ .name = "libfdk_aac",
+ .type = AVMEDIA_TYPE_AUDIO,
+ .id = AV_CODEC_ID_AAC,
+ .priv_data_size = sizeof(AACContext),
+ .init = aac_encode_init,
+ .encode2 = aac_encode_frame,
+ .close = aac_encode_close,
+ .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
+ .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
+ AV_SAMPLE_FMT_NONE },
+ .long_name = NULL_IF_CONFIG_SMALL("Fraunhofer FDK AAC"),
+ .priv_class = &aac_enc_class,
+ .defaults = aac_encode_defaults,
+ .profiles = profiles,
+ .supported_samplerates = aac_sample_rates,
+ .channel_layouts = aac_channel_layout,
};
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index e951032722..c0a872eba0 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -387,6 +387,10 @@ static attribute_align_arg void *frame_worker_thread(void *arg)
p->got_frame = 0;
p->result = codec->decode(avctx, &p->frame, &p->got_frame, &p->avpkt);
+ /* many decoders assign whole AVFrames, thus overwriting extended_data;
+ * make sure it's set correctly */
+ p->frame.extended_data = p->frame.data;
+
if (p->state == STATE_SETTING_UP) ff_thread_finish_setup(avctx);
pthread_mutex_lock(&p->progress_mutex);
diff --git a/libavformat/oggparsetheora.c b/libavformat/oggparsetheora.c
index 4810357d03..6bea4ec2a8 100644
--- a/libavformat/oggparsetheora.c
+++ b/libavformat/oggparsetheora.c
@@ -53,7 +53,8 @@ theora_header (AVFormatContext * s, int idx)
os->private = thp;
}
- if (os->buf[os->pstart] == 0x80) {
+ switch (os->buf[os->pstart]) {
+ case 0x80: {
GetBitContext gb;
int width, height;
AVRational timebase;
@@ -109,9 +110,16 @@ theora_header (AVFormatContext * s, int idx)
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->codec->codec_id = AV_CODEC_ID_THEORA;
st->need_parsing = AVSTREAM_PARSE_HEADERS;
-
- } else if (os->buf[os->pstart] == 0x81) {
- ff_vorbis_comment (s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
+ }
+ break;
+ case 0x81:
+ ff_vorbis_comment(s, &st->metadata, os->buf + os->pstart + 7, os->psize - 8);
+ case 0x82:
+ if (!thp->version)
+ return -1;
+ break;
+ default:
+ return -1;
}
st->codec->extradata = av_realloc (st->codec->extradata,