Re: [libav-devel] [PATCH] Add support for multichannel ATRAC3+ to OpenMG demuxer

2013-09-28 Thread Anton Khirnov

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

2013-09-27 Thread Maxim Polijakowski



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

2013-09-27 Thread Anton Khirnov

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

2013-09-25 Thread Diego Biurrun
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