Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Get playback working.

Tested with AAC, AC3, MP3 and AAC-LATM audio.
  • Loading branch information...
commit 126cff61eb9ec883d503b02c139eabc1990bcd5e 1 parent 6c3653c
@Beirdo Beirdo authored
View
1  mythtv/external/FFmpeg/libavcodec/Makefile
@@ -72,7 +72,6 @@ OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o \
psymodel.o iirfilter.o \
mpeg4audio.o kbdwin.o \
audio_frame_queue.o
-OBJS-$(CONFIG_AAC_LATM_DECODER) += aaclatmdec.o
OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o
OBJS-$(CONFIG_AC3_DECODER) += ac3dec.o ac3dec_data.o ac3.o kbdwin.o
OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3enc.o ac3tab.o \
View
434 mythtv/external/FFmpeg/libavcodec/aaclatmdec.c
@@ -1,434 +0,0 @@
-/*
- * AAC LATM decoder
- * Copyright (c) 2008-2010 Paul Kendall <paul@kcbbs.gen.nz>
- * Copyright (c) 2010 Janne Grunau <janne-ffmpeg@jannau.net>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * AAC LATM decoder
- * @author Paul Kendall <paul@kcbbs.gen.nz>
- * @author Janne Grunau <janne-ffmpeg@jannau.net>
- */
-
-/*
- Note: This decoder filter is intended to decode LATM streams transferred
- in MPEG transport streams which only contain one program.
- To do a more complex LATM demuxing a separate LATM demuxer should be used.
-*/
-
-#include "get_bits.h"
-#include "dsputil.h"
-
-#include "aac.h"
-#include "aacdectab.h"
-#include "mpeg4audio.h"
-
-#include <assert.h>
-
-#define LOAS_SYNC_WORD 0x2b7 // 11 bits
-#define MAX_SIZE 8*1024
-
-struct LATMContext
-{
- AACContext aac_ctx;
- AVCodec *aac_codec;
- uint8_t initialized;
-
- // parser data
- uint8_t audio_mux_version_A;
- uint8_t same_time_framing;
- uint8_t frame_length_type;
- uint32_t frame_length;
-};
-
-static inline int64_t latm_get_value(GetBitContext *b)
-{
- uint8_t bytesForValue = get_bits(b, 2);
- int64_t value = 0;
- int i;
- for (i=0; i<=bytesForValue; i++) {
- value <<= 8;
- value |= get_bits(b, 8);
- }
- return value;
-}
-
-// copied from libavcodec/mpeg4audio.c
-static av_always_inline unsigned int copy_bits(PutBitContext *pb,
- GetBitContext *gb, int bits)
-{
- unsigned int el = get_bits(gb, bits);
- put_bits(pb, bits, el);
- return el;
-}
-
-static void latm_read_ga_specific_config(int audio_object_type,
- MPEG4AudioConfig *c,
- GetBitContext *gb, PutBitContext *pb)
-{
- int ext_flag;
-
- copy_bits(pb, gb, 1); // framelen_flag
- if (copy_bits(pb, gb, 1)) // depends_on_coder
- copy_bits(pb, gb, 14); // delay
- ext_flag = copy_bits(pb, gb, 1);
-
- if (!c->chan_config)
- avpriv_copy_pce_data(pb, gb); // program_config_element
-
- if (audio_object_type == AOT_AAC_SCALABLE ||
- audio_object_type == AOT_ER_AAC_SCALABLE)
- copy_bits(pb, gb, 3); // layer number
-
- if (!ext_flag)
- return;
-
- if (audio_object_type == AOT_ER_BSAC) {
- copy_bits(pb, gb, 5); // numOfSubFrame
- copy_bits(pb, gb, 11); // layer_length
- } else if (audio_object_type == AOT_ER_AAC_LC ||
- audio_object_type == AOT_ER_AAC_LTP ||
- audio_object_type == AOT_ER_AAC_SCALABLE ||
- audio_object_type == AOT_ER_AAC_LD)
- copy_bits(pb, gb, 3); // stuff
- copy_bits(pb, gb, 1); // extflag3
-}
-
-static int latm_read_audio_specific_config(GetBitContext *gb,
- PutBitContext *pb)
-{
- int num_bits=0;
- int audio_object_type;
-
- MPEG4AudioConfig b, *c;
- c = &b;
-
- c->sbr = -1;
-
- audio_object_type = copy_bits(pb, gb, 5);
- if (audio_object_type == AOT_ESCAPE) {
- audio_object_type = AOT_ESCAPE + copy_bits(pb, gb, 6) + 1;
- }
- c->object_type = audio_object_type;
-
- c->sampling_index = copy_bits(pb, gb, 4);
- c->sample_rate = avpriv_mpeg4audio_sample_rates[c->sampling_index];
- if (c->sampling_index == 0x0f) {
- c->sample_rate = copy_bits(pb, gb, 24);
- }
- c->chan_config = copy_bits(pb, gb, 4);
-
- if (c->chan_config < FF_ARRAY_ELEMS(ff_mpeg4audio_channels))
- c->channels = ff_mpeg4audio_channels[c->chan_config];
-
- if (audio_object_type == AOT_AAC_MAIN ||
- audio_object_type == AOT_AAC_LC ||
- audio_object_type == AOT_AAC_SSR ||
- audio_object_type == AOT_AAC_LTP ||
- audio_object_type == AOT_AAC_SCALABLE ||
- audio_object_type == AOT_TWINVQ) {
- latm_read_ga_specific_config(audio_object_type, c, gb, pb);
- } else if (audio_object_type == AOT_SBR) {
- c->sbr = 1;
- c->ext_sampling_index = copy_bits(pb, gb, 4);
- c->ext_sample_rate = avpriv_mpeg4audio_sample_rates[c->ext_sampling_index];
- if (c->ext_sampling_index == 0x0f) {
- c->ext_sample_rate = copy_bits(pb, gb, 24);
- }
- c->object_type = copy_bits(pb, gb, 5);
- } else if (audio_object_type >= AOT_ER_AAC_LC) {
- latm_read_ga_specific_config(audio_object_type, c, gb, pb);
- copy_bits(pb, gb, 2); // epConfig
- }
-
- if (c->sbr == -1 && c->sample_rate <= 24000)
- c->sample_rate *= 2;
-
- // count the extradata
- num_bits = put_bits_count(pb);
-
- flush_put_bits(pb);
- return num_bits;
-}
-
-static int latm_decode_audio_specific_config(struct LATMContext *latmctx,
- GetBitContext *gb)
-{
- PutBitContext pb;
- int32_t esize, bits_consumed;
- uint8_t extradata[32+FF_INPUT_BUFFER_PADDING_SIZE];
- AVCodecContext *avctx = latmctx->aac_ctx.avctx;
-
- init_put_bits(&pb, extradata, 32 * 8);
-
- bits_consumed = latm_read_audio_specific_config(gb, &pb);
-
- if (bits_consumed < 0)
- return AVERROR_INVALIDDATA;
-
- esize = (bits_consumed+7) / 8;
-
- if (avctx->extradata_size != esize) {
- av_free(avctx->extradata);
- avctx->extradata = av_malloc(esize + FF_INPUT_BUFFER_PADDING_SIZE);
- if (!avctx->extradata)
- return AVERROR(ENOMEM);
-
- avctx->extradata_size = esize;
- memcpy(avctx->extradata, extradata, esize);
- memset(avctx->extradata+esize, 0, FF_INPUT_BUFFER_PADDING_SIZE);
- }
-
- return bits_consumed;
-}
-
-static int read_stream_mux_config(struct LATMContext *latmctx,
- GetBitContext *gb)
-{
- int ret, audio_mux_version = get_bits(gb, 1);
-
- latmctx->audio_mux_version_A = 0;
- if (audio_mux_version)
- latmctx->audio_mux_version_A = get_bits(gb, 1);
-
- if (!latmctx->audio_mux_version_A) {
-
- if (audio_mux_version)
- latm_get_value(gb); // taraFullness
-
- skip_bits(gb, 1); // allStreamSameTimeFraming
- skip_bits(gb, 6); // numSubFrames
- // numPrograms
- if (get_bits(gb, 4)) { // numPrograms
- av_log_missing_feature(latmctx->aac_ctx.avctx,
- "multiple programs are not supported\n", 1);
- return AVERROR_PATCHWELCOME;
- }
-
- // for each program (which there is only on in DVB)
-
- // for each layer (which there is only on in DVB)
- if (get_bits(gb, 3)) { // numLayer
- av_log_missing_feature(latmctx->aac_ctx.avctx,
- "multiple layers are not supported\n", 1);
- return AVERROR_PATCHWELCOME;
- }
-
- // for all but first stream: use_same_config = get_bits(gb, 1);
- if (!audio_mux_version) {
- ret = latm_decode_audio_specific_config(latmctx, gb);
- if (ret < 0)
- return ret;
- } else {
- int ascLen = latm_get_value(gb);
- ret = latm_decode_audio_specific_config(latmctx, gb);
- if (ret < 0)
- return ret;
- ascLen -= ret;
- skip_bits_long(gb, ascLen);
- }
-
- latmctx->frame_length_type = get_bits(gb, 3);
- switch (latmctx->frame_length_type) {
- case 0:
- skip_bits(gb, 8); // latmBufferFullness
- break;
- case 1:
- latmctx->frame_length = get_bits(gb, 9);
- break;
- case 3:
- case 4:
- case 5:
- skip_bits(gb, 6); // CELP frame length table index
- break;
- case 6:
- case 7:
- skip_bits(gb, 1); // HVXC frame length table index
- break;
- }
-
- if (get_bits(gb, 1)) { // other data
- if (audio_mux_version) {
- latm_get_value(gb); // other_data_bits
- } else {
- int esc;
- do {
- esc = get_bits(gb, 1);
- skip_bits(gb, 8);
- } while (esc);
- }
- }
-
- if (get_bits(gb, 1)) // crc present
- skip_bits(gb, 8); // config_crc
- }
-
- return 0;
-}
-
-static int read_payload_length_info(struct LATMContext *ctx, GetBitContext *gb)
-{
- uint8_t tmp;
-
- if (ctx->frame_length_type == 0) {
- int mux_slot_length = 0;
- do {
- tmp = get_bits(gb, 8);
- mux_slot_length += tmp;
- } while (tmp == 255);
- return mux_slot_length;
- } else if (ctx->frame_length_type == 1) {
- return ctx->frame_length;
- } else if (ctx->frame_length_type == 3 ||
- ctx->frame_length_type == 5 ||
- ctx->frame_length_type == 7) {
- skip_bits(gb, 2); // mux_slot_length_coded
- }
- return 0;
-}
-
-static int read_audio_mux_element(struct LATMContext *latmctx,
- GetBitContext *b,
- uint8_t *payload, int *payloadsize)
-{
- uint8_t use_same_mux = get_bits(b, 1);
- if (!use_same_mux) {
- read_stream_mux_config(latmctx, b);
- } else if (!latmctx->aac_ctx.avctx->extradata) {
- av_log(latmctx->aac_ctx.avctx, AV_LOG_DEBUG,
- "no decoder config found\n");
- return AVERROR(EAGAIN);
- }
- if (latmctx->audio_mux_version_A == 0) {
- int j;
- int mux_slot_length_bytes = read_payload_length_info(latmctx, b);
- mux_slot_length_bytes = FFMIN(mux_slot_length_bytes, *payloadsize);
- for (j=0; j<mux_slot_length_bytes; j++) {
- *payload++ = get_bits(b, 8);
- }
- *payloadsize = mux_slot_length_bytes;
- }
- return 0;
-}
-
-static int read_audio_sync_stream(struct LATMContext *latmctx,
- GetBitContext *gb, int size,
- uint8_t *payload, int *payloadsize)
-{
- int muxlength;
-
- if (get_bits(gb, 11) != LOAS_SYNC_WORD)
- return AVERROR_INVALIDDATA;
-
- muxlength = get_bits(gb, 13);
- // not enough data, the parser should have sorted this
- if (muxlength+3 > size)
- return AVERROR_INVALIDDATA;
-
- read_audio_mux_element(latmctx, gb, payload, payloadsize);
-
- return 0;
-}
-
-
-static int latm_decode_frame(AVCodecContext *avctx, void *out, int *out_size,
- AVPacket *avpkt)
-{
- struct LATMContext *latmctx = avctx->priv_data;
- uint8_t *tmp, tmpbuf[MAX_SIZE];
- int ret, bufsize = MAX_SIZE;
- GetBitContext gb;
-
- if(avpkt->size == 0)
- return 0;
-
- init_get_bits(&gb, avpkt->data, avpkt->size * 8);
-
- ret = read_audio_sync_stream(latmctx, &gb, avpkt->size, tmpbuf, &bufsize);
- if (ret < 0)
- return ret;
-
- if (!latmctx->initialized) {
- if (!avctx->extradata) {
- *out_size = 0;
- return avpkt->size;
- } else {
- assert(latmctx->aac_codec->init);
- ret = latmctx->aac_codec->init(avctx);
- if (ret < 0)
- return ret;
- latmctx->initialized = 1;
- }
- }
-
- tmp = avpkt->data;
- avpkt->data = tmpbuf;
- avpkt->size = bufsize;
-
- assert(latmctx->aac_codec->decode);
- ret = latmctx->aac_codec->decode(avctx, out, out_size, avpkt);
- avpkt->data = tmp;
- return ret;
-}
-
-static int latm_decode_init(AVCodecContext *avctx)
-{
- struct LATMContext *latmctx = avctx->priv_data;
- int ret;
-
- latmctx->aac_codec = avcodec_find_decoder_by_name("aac");
- if (!latmctx->aac_codec) {
- av_log(avctx, AV_LOG_ERROR, "AAC decoder is required by AAC LATM decoder.\n");
- return AVERROR(ENOSYS);
- }
-
- assert(latmctx->aac_codec->init);
- ret = latmctx->aac_codec->init(avctx);
-
- if (avctx->extradata_size > 0)
- latmctx->initialized = !ret;
- else
- latmctx->initialized = 0;
-
- return ret;
-}
-
-static int latm_decode_close(AVCodecContext *avctx)
-{
- struct LATMContext *latmctx = avctx->priv_data;
- assert(latmctx->aac_codec->close);
- return latmctx->aac_codec->close(avctx);
-}
-
-AVCodec aac_latm_decoder = {
- .name = "aac_latm",
- .type = AVMEDIA_TYPE_AUDIO,
- .id = CODEC_ID_AAC_LATM,
- .priv_data_size = sizeof(struct LATMContext),
- .init = latm_decode_init,
- .close = latm_decode_close,
- .decode = latm_decode_frame,
- .long_name = NULL_IF_CONFIG_SMALL("AAC LATM (Advanced Audio Codec LATM "
- "syntax)"),
- .sample_fmts = (const enum AVSampleFormat[]) {
- AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE
- },
- .channel_layouts = aac_channel_layout,
-};
View
10 mythtv/external/FFmpeg/libavformat/mpegts.c
@@ -713,9 +713,7 @@ static const StreamType ISO_types[] = {
{ 0x0b, AVMEDIA_TYPE_DATA, CODEC_ID_DSMCC_B }, /* DVB_CAROUSEL_ID */
{ 0x0f, AVMEDIA_TYPE_AUDIO, CODEC_ID_AAC },
{ 0x10, AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG4 },
- /* Makito encoder sets stream type 0x11 for AAC,
- * so auto-detect LOAS/LATM instead of hardcoding it. */
-// { 0x11, AVMEDIA_TYPE_AUDIO, CODEC_ID_AAC_LATM }, /* LATM syntax */
+ { 0x11, AVMEDIA_TYPE_AUDIO, CODEC_ID_AAC_LATM }, /* LATM syntax */
{ 0x1b, AVMEDIA_TYPE_VIDEO, CODEC_ID_H264 },
{ 0xd1, AVMEDIA_TYPE_VIDEO, CODEC_ID_DIRAC },
{ 0xea, AVMEDIA_TYPE_VIDEO, CODEC_ID_VC1 },
@@ -2782,7 +2780,7 @@ static int mpegts_read_header(AVFormatContext *s)
/* now find the info for the first service if we found any,
otherwise try to filter all PATs */
- ffurl_seek(pb, pos, SEEK_SET);
+ avio_seek(pb, pos, SEEK_SET);
ts->req_sid = sid = ts->prg[i].id;
handle_packets(ts, s->probesize / ts->raw_packet_size);
@@ -2797,7 +2795,7 @@ static int mpegts_read_header(AVFormatContext *s)
/* turn off crc checking */
ts->pmt_filter->u.section_filter.check_crc = 0;
/* try again */
- ffurl_seek(pb, pos, SEEK_SET);
+ avio_seek(pb, pos, SEEK_SET);
ts->req_sid = sid = ts->prg[i].id;
handle_packets(ts, s->probesize / ts->raw_packet_size);
}
@@ -2812,7 +2810,7 @@ static int mpegts_read_header(AVFormatContext *s)
"contents of first TS packet only!\n");
ts->pmt_filter->pmt_chop_at_ts = 1;
/* try again */
- ffurl_seek(pb, pos, SEEK_SET);
+ avio_seek(pb, pos, SEEK_SET);
ts->req_sid = sid = ts->prg[i].id;
handle_packets(ts, s->probesize / ts->raw_packet_size);
}
View
67 mythtv/libs/libmythtv/avformatdecoder.cpp
@@ -300,6 +300,7 @@ AvFormatDecoder::AvFormatDecoder(MythPlayer *parent,
// Interactive TV
itv(NULL),
// Audio
+ m_audioFrame(NULL),
audioSamples(NULL),
disable_passthru(false),
m_fps(0.0f),
@@ -309,8 +310,7 @@ AvFormatDecoder::AvFormatDecoder(MythPlayer *parent,
memset(ccX08_in_pmt, 0, sizeof(ccX08_in_pmt));
memset(ccX08_in_tracks, 0, sizeof(ccX08_in_tracks));
- audioSamples = (short int *)av_mallocz(AVCODEC_MAX_AUDIO_FRAME_SIZE *
- sizeof(int32_t));
+ m_audioFrame = avcodec_alloc_frame();
ccd608->SetIgnoreTimecode(true);
bool debug = VERBOSE_LEVEL_CHECK(VB_LIBAV, LOG_ANY);
@@ -344,7 +344,7 @@ AvFormatDecoder::~AvFormatDecoder()
sws_freeContext(sws_ctx);
- av_freep((void *)&audioSamples);
+ av_free(m_audioFrame);
if (avfRingBuffer)
delete avfRingBuffer;
@@ -812,7 +812,7 @@ void AvFormatDecoder::InitByteContext(void)
.arg(buf_size).arg(streamed));
readcontext.prot = &AVF_RingBuffer_Protocol;
- readcontext.flags = 0;
+ readcontext.flags = AVIO_FLAG_READ;
readcontext.is_streamed = streamed;
readcontext.max_packet_size = 0;
readcontext.priv_data = avfRingBuffer;
@@ -926,7 +926,9 @@ int AvFormatDecoder::OpenFile(RingBuffer *rbuffer, bool novideo,
return -1;
}
+#if 0
fmt->flags |= AVFMT_NOFILE;
+#endif
ic = avformat_alloc_context();
if (!ic)
@@ -941,7 +943,7 @@ int AvFormatDecoder::OpenFile(RingBuffer *rbuffer, bool novideo,
if (err < 0)
{
LOG(VB_GENERAL, LOG_ERR, LOC +
- QString("avformat err(%1) on av_open_input_file call.").arg(err));
+ QString("avformat err(%1) on avformat_open_input call.").arg(err));
return -1;
}
@@ -4053,6 +4055,7 @@ bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt,
avcodeclock->unlock();
AVPacket tmp_pkt;
+ av_init_packet(&tmp_pkt);
tmp_pkt.data = pkt->data;
tmp_pkt.size = pkt->size;
@@ -4102,16 +4105,19 @@ bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt,
ctx->channels = m_audio->GetMaxChannels();
}
- AVFrame frame;
+ avcodec_get_frame_defaults(m_audioFrame);
int got_frame = 0;
- data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- ret = avcodec_decode_audio4(ctx, &frame, &got_frame, &tmp_pkt);
+ ret = avcodec_decode_audio4(ctx, m_audioFrame, &got_frame,
+ &tmp_pkt);
if (ret > 0 && got_frame)
{
- decoded_size = data_size;
+ decoded_size = ret;
already_decoded = true;
- memcpy(audioSamples, frame.extended_data[0], decoded_size);
+ data_size = av_samples_get_buffer_size(NULL, ctx->channels,
+ m_audioFrame->nb_samples,
+ ctx->sample_fmt, 1);
+ audioSamples = m_audioFrame->extended_data[0];
}
reselectAudioTrack |= ctx->channels;
}
@@ -4162,23 +4168,28 @@ bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt,
decoded_size = -1;
if (m_audio->NeedDecodingBeforePassthrough())
{
- AVFrame frame;
+ avcodec_get_frame_defaults(m_audioFrame);
int got_frame = 0;
- data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- ret = avcodec_decode_audio4(ctx, &frame, &got_frame,
+ ret = avcodec_decode_audio4(ctx, m_audioFrame, &got_frame,
&tmp_pkt);
if (ret > 0 && got_frame)
{
- decoded_size = data_size;
- memcpy(audioSamples, frame.extended_data[0],
- decoded_size);
+ decoded_size = ret;
+ data_size =
+ av_samples_get_buffer_size(NULL, ctx->channels,
+ m_audioFrame->nb_samples,
+ ctx->sample_fmt, 1);
+ audioSamples = m_audioFrame->extended_data[0];
}
}
}
- memcpy(audioSamples, tmp_pkt.data, tmp_pkt.size);
- data_size = tmp_pkt.size;
- // We have processed all the data, there can't be any left
+ else
+ {
+ audioSamples = tmp_pkt.data;
+ data_size = tmp_pkt.size;
+ }
+ // We have processed all the data, there can't be any left
tmp_pkt.size = 0;
}
else
@@ -4194,15 +4205,19 @@ bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt,
else
ctx->request_channels = 0;
- AVFrame frame;
+ avcodec_get_frame_defaults(m_audioFrame);
int got_frame = 0;
- data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- ret = avcodec_decode_audio4(ctx, &frame, &got_frame, &tmp_pkt);
+ ret = avcodec_decode_audio4(ctx, m_audioFrame, &got_frame,
+ &tmp_pkt);
if (ret > 0 && got_frame)
{
- decoded_size = data_size;
- memcpy(audioSamples, frame.extended_data[0], data_size);
+ decoded_size = ret;
+ data_size =
+ av_samples_get_buffer_size(NULL, ctx->channels,
+ m_audioFrame->nb_samples,
+ ctx->sample_fmt, 1);
+ audioSamples = m_audioFrame->extended_data[0];
}
}
@@ -4237,8 +4252,8 @@ bool AvFormatDecoder::ProcessAudioPacket(AVStream *curstream, AVPacket *pkt,
long long temppts = lastapts;
if (audSubIdx != -1)
- extract_mono_channel(audSubIdx, &audioOut,
- (char *)audioSamples, data_size);
+ extract_mono_channel(audSubIdx, &audioOut, (char *)audioSamples,
+ data_size);
int frames = (ctx->channels <= 0 || decoded_size < 0) ? -1 :
decoded_size / (ctx->channels *
View
3  mythtv/libs/libmythtv/avformatdecoder.h
@@ -346,7 +346,8 @@ class AvFormatDecoder : public DecoderBase
InteractiveTV *itv; ///< MHEG/MHP decoder
// Audio
- short int *audioSamples;
+ AVFrame *m_audioFrame;
+ uint8_t *audioSamples;
bool disable_passthru;
AudioInfo audioIn;
Please sign in to comment.
Something went wrong with that request. Please try again.