Re: [libav-devel] [PATCH] Add support for multichannel ATRAC3+ to OpenMG demuxer
On Sat, 28 Sep 2013 14:03:19 +0200, Maxim Polijakowski max_p...@gmx.de wrote: Am 28.09.2013 07:35, schrieb Anton Khirnov: [...] framesize = ((codec_params 0x3FF) * 8) + 8; samplerate = ff_oma_srate_tab[(codec_params 13) 7] * 100; if (!samplerate) { @@ -372,7 +379,7 @@ static int oma_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } st-codec-sample_rate = samplerate; -st-codec-bit_rate= samplerate * framesize * 8 / 1024; +st-codec-bit_rate= samplerate * framesize * 8 / 2048; This part looks unrelated. Was bitrate wrong previously? Yes, because ATRAC3+ sample frame size was set to the wrong value of 1024 samples. The displayed bitrate always higher than it actually was... You're right - it looks unrelated. Should I make this only line a separate patch? It should be split, but no need to send a new patch just for this. I'll split it myself before pushing if nobody has any other comments. -- Anton Khirnov ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] Add support for multichannel ATRAC3+ to OpenMG demuxer
Hi crews, the attached patch adds support for multichannel ATRAC3+ streams to the OpenMG demuxer. It also sets the currently wrong ATRAC3+ frame size to right one of 2048 samples. The patch for ATRAC3+ codec itself is in preparation and will be posted shortly... Please find attached the updated patch... Best regards Maxim From cb20dd04f8ba8342dc2992df4287b55df3b2175c Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski max_p...@gmx.de Date: Sat, 28 Sep 2013 00:18:18 +0200 Subject: [PATCH] Add support for multichannel ATRAC3+ streams. --- libavformat/oma.c| 15 +++ libavformat/oma.h|3 +++ libavformat/omadec.c | 15 +++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/libavformat/oma.c b/libavformat/oma.c index aaaf0b2..27b5988 100644 --- a/libavformat/oma.c +++ b/libavformat/oma.c @@ -21,6 +21,7 @@ #include internal.h #include oma.h #include libavcodec/avcodec.h +#include libavutil/channel_layout.h const uint16_t ff_oma_srate_tab[8] = { 320, 441, 480, 882, 960, 0 }; @@ -31,3 +32,17 @@ const AVCodecTag ff_oma_codec_tags[] = { { AV_CODEC_ID_PCM_S16BE, OMA_CODECID_LPCM}, { 0 }, }; + +/** map ATRAC-X channel id to internal channel layout */ +const uint64_t ff_oma_chid_to_native_layout[7] = { +AV_CH_LAYOUT_MONO, +AV_CH_LAYOUT_STEREO, +AV_CH_LAYOUT_SURROUND, +AV_CH_LAYOUT_4POINT0, +AV_CH_LAYOUT_5POINT1_BACK, +AV_CH_LAYOUT_6POINT1_BACK, +AV_CH_LAYOUT_7POINT1 +}; + +/** map ATRAC-X channel id to total number of channels */ +const int ff_oma_chid_to_num_channels[7] = {1, 2, 3, 4, 6, 7, 8}; diff --git a/libavformat/oma.h b/libavformat/oma.h index 1f0ddf9..9a35da2 100644 --- a/libavformat/oma.h +++ b/libavformat/oma.h @@ -41,4 +41,7 @@ extern const uint16_t ff_oma_srate_tab[8]; extern const AVCodecTag ff_oma_codec_tags[]; +extern const uint64_t ff_oma_chid_to_native_layout[7]; +extern const int ff_oma_chid_to_num_channels[7]; + #endif /* AVFORMAT_OMA_H */ diff --git a/libavformat/omadec.c b/libavformat/omadec.c index 274112e..e5a2090 100644 --- a/libavformat/omadec.c +++ b/libavformat/omadec.c @@ -1,7 +1,7 @@ /* * Sony OpenMG (OMA) demuxer * - * Copyright (c) 2008 Maxim Poliakovski + * Copyright (c) 2008, 2013 Maxim Poliakovski * 2008 Benjamin Larsson * 2011 David Goldwich * @@ -284,7 +284,7 @@ static int decrypt_init(AVFormatContext *s, ID3v2ExtraMeta *em, uint8_t *header) static int oma_read_header(AVFormatContext *s) { int ret, framesize, jsflag, samplerate; -uint32_t codec_params; +uint32_t codec_params, channel_id; int16_t eid; uint8_t buf[EA3_HEADER_SIZE]; uint8_t *edata; @@ -364,7 +364,14 @@ static int oma_read_header(AVFormatContext *s) avpriv_set_pts_info(st, 64, 1, st-codec-sample_rate); break; case OMA_CODECID_ATRAC3P: -st-codec-channels = (codec_params 10) 7; +channel_id = (codec_params 10) 7; +if (!channel_id) { +av_log(s, AV_LOG_ERROR, + Invalid ATRAC-X channel id: %d\n, channel_id); +return AVERROR_INVALIDDATA; +} +st-codec-channel_layout = ff_oma_chid_to_native_layout[channel_id - 1]; +st-codec-channels = ff_oma_chid_to_num_channels[channel_id - 1]; framesize = ((codec_params 0x3FF) * 8) + 8; samplerate = ff_oma_srate_tab[(codec_params 13) 7] * 100; if (!samplerate) { @@ -372,7 +379,7 @@ static int oma_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } st-codec-sample_rate = samplerate; -st-codec-bit_rate= samplerate * framesize * 8 / 1024; +st-codec-bit_rate= samplerate * framesize * 8 / 2048; avpriv_set_pts_info(st, 64, 1, samplerate); av_log(s, AV_LOG_ERROR, Unsupported codec ATRAC3+!\n); break; -- 1.7.9.5 ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] Add support for multichannel ATRAC3+ to OpenMG demuxer
On Sat, 28 Sep 2013 00:35:27 +0200, Maxim Polijakowski max_p...@gmx.de wrote: Hi crews, the attached patch adds support for multichannel ATRAC3+ streams to the OpenMG demuxer. It also sets the currently wrong ATRAC3+ frame size to right one of 2048 samples. The patch for ATRAC3+ codec itself is in preparation and will be posted shortly... Please find attached the updated patch... Best regards Maxim From cb20dd04f8ba8342dc2992df4287b55df3b2175c Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski max_p...@gmx.de Date: Sat, 28 Sep 2013 00:18:18 +0200 Subject: [PATCH] Add support for multichannel ATRAC3+ streams. --- libavformat/oma.c| 15 +++ libavformat/oma.h|3 +++ libavformat/omadec.c | 15 +++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/libavformat/oma.c b/libavformat/oma.c index aaaf0b2..27b5988 100644 --- a/libavformat/oma.c +++ b/libavformat/oma.c @@ -21,6 +21,7 @@ #include internal.h #include oma.h #include libavcodec/avcodec.h +#include libavutil/channel_layout.h const uint16_t ff_oma_srate_tab[8] = { 320, 441, 480, 882, 960, 0 }; @@ -31,3 +32,17 @@ const AVCodecTag ff_oma_codec_tags[] = { { AV_CODEC_ID_PCM_S16BE, OMA_CODECID_LPCM}, { 0 }, }; + +/** map ATRAC-X channel id to internal channel layout */ +const uint64_t ff_oma_chid_to_native_layout[7] = { +AV_CH_LAYOUT_MONO, +AV_CH_LAYOUT_STEREO, +AV_CH_LAYOUT_SURROUND, +AV_CH_LAYOUT_4POINT0, +AV_CH_LAYOUT_5POINT1_BACK, +AV_CH_LAYOUT_6POINT1_BACK, +AV_CH_LAYOUT_7POINT1 +}; + +/** map ATRAC-X channel id to total number of channels */ +const int ff_oma_chid_to_num_channels[7] = {1, 2, 3, 4, 6, 7, 8}; diff --git a/libavformat/oma.h b/libavformat/oma.h index 1f0ddf9..9a35da2 100644 --- a/libavformat/oma.h +++ b/libavformat/oma.h @@ -41,4 +41,7 @@ extern const uint16_t ff_oma_srate_tab[8]; extern const AVCodecTag ff_oma_codec_tags[]; +extern const uint64_t ff_oma_chid_to_native_layout[7]; +extern const int ff_oma_chid_to_num_channels[7]; + #endif /* AVFORMAT_OMA_H */ diff --git a/libavformat/omadec.c b/libavformat/omadec.c index 274112e..e5a2090 100644 --- a/libavformat/omadec.c +++ b/libavformat/omadec.c @@ -1,7 +1,7 @@ /* * Sony OpenMG (OMA) demuxer * - * Copyright (c) 2008 Maxim Poliakovski + * Copyright (c) 2008, 2013 Maxim Poliakovski * 2008 Benjamin Larsson * 2011 David Goldwich * @@ -284,7 +284,7 @@ static int decrypt_init(AVFormatContext *s, ID3v2ExtraMeta *em, uint8_t *header) static int oma_read_header(AVFormatContext *s) { int ret, framesize, jsflag, samplerate; -uint32_t codec_params; +uint32_t codec_params, channel_id; int16_t eid; uint8_t buf[EA3_HEADER_SIZE]; uint8_t *edata; @@ -364,7 +364,14 @@ static int oma_read_header(AVFormatContext *s) avpriv_set_pts_info(st, 64, 1, st-codec-sample_rate); break; case OMA_CODECID_ATRAC3P: -st-codec-channels = (codec_params 10) 7; +channel_id = (codec_params 10) 7; +if (!channel_id) { +av_log(s, AV_LOG_ERROR, + Invalid ATRAC-X channel id: %d\n, channel_id); +return AVERROR_INVALIDDATA; +} +st-codec-channel_layout = ff_oma_chid_to_native_layout[channel_id - 1]; +st-codec-channels = ff_oma_chid_to_num_channels[channel_id - 1]; framesize = ((codec_params 0x3FF) * 8) + 8; samplerate = ff_oma_srate_tab[(codec_params 13) 7] * 100; if (!samplerate) { @@ -372,7 +379,7 @@ static int oma_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } st-codec-sample_rate = samplerate; -st-codec-bit_rate= samplerate * framesize * 8 / 1024; +st-codec-bit_rate= samplerate * framesize * 8 / 2048; This part looks unrelated. Was bitrate wrong previously? The rest looks ok. -- Anton Khirnov ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] Add support for multichannel ATRAC3+ to OpenMG demuxer
On Wed, Sep 25, 2013 at 12:36:50PM +0200, Maxim Polijakowski wrote: the attached patch adds support for multichannel ATRAC3+ streams to the OpenMG demuxer. It also sets the currently wrong ATRAC3+ frame size to right one of 2048 samples. The patch for ATRAC3+ codec itself is in preparation and will be posted shortly... Please review and commit. Please send a proper Git patch that we can push directly. --- a/libavformat/omadec.c +++ b/libavformat/omadec.c @@ -364,7 +364,13 @@ static int oma_read_header(AVFormatContext *s) avpriv_set_pts_info(st, 64, 1, st-codec-sample_rate); break; case OMA_CODECID_ATRAC3P: -st-codec-channels = (codec_params 10) 7; +channel_id = (codec_params 10) 7; +if (!channel_id) { +av_log(s, AV_LOG_ERROR, Invalid ATRAC-X channel id: %d\n, channel_id); Please break this line. +st-codec-channel_layout = ff_oma_chid_to_native_layout[channel_id - 1]; +st-codec-channels = ff_oma_chid_to_num_channels[channel_id - 1]; Please vertically align the = while you're at it. Diego ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel