[FFmpeg-soc] [soc]: r4627 - in spdif: spdif.c todo
bwolowiec
subversion at mplayerhq.hu
Mon Jul 6 19:45:13 CEST 2009
Author: bwolowiec
Date: Mon Jul 6 19:45:13 2009
New Revision: 4627
Log:
Add support for mpeg
Modified:
spdif/spdif.c
spdif/todo
Modified: spdif/spdif.c
==============================================================================
--- spdif/spdif.c Mon Jul 6 09:28:07 2009 (r4626)
+++ spdif/spdif.c Mon Jul 6 19:45:13 2009 (r4627)
@@ -30,12 +30,11 @@
#define IEC958_AC3 0x01
#define IEC958_MPEG1_LAYER1 0x04
#define IEC958_MPEG1_LAYER23 0x05
-//#define IEC958_MPEG2_NO_EXT 0x05 /* No extension */
//#define IEC958_MPEG2_EXT 0x06 /* With extension */
//#define IEC958_MPEG2_AAC 0x07
-//#define IEC958_MPEG2_LAYER1_LSW 0x08 /* Low Sampling Frequency */
-//#define IEC958_MPEG2_LAYER2_LSW 0x09 /* Low Sampling Frequency */
-//#define IEC958_MPEG2_LAYER3_LSW 0x0A /* Low Sampling Frequency */
+#define IEC958_MPEG2_LAYER1_LSF 0x08 /* Low Sampling Frequency */
+#define IEC958_MPEG2_LAYER2_LSF 0x09 /* Low Sampling Frequency */
+#define IEC958_MPEG2_LAYER3_LSF 0x0A /* Low Sampling Frequency */
#define IEC958_DTS1 0x0B
#define IEC958_DTS2 0x0C
#define IEC958_DTS3 0x0D
@@ -99,20 +98,27 @@ static int spdif_header_dts(AVFormatCont
return 0;
}
-static int spdif_header_mpeg1_layer1(AVFormatContext *s, AVPacket *pkt){
- IEC958Context *ctx = s->priv_data;
+static uint8_t mpeg_data_type[2][3] = {
+ // LAYER1 LAYER2 LAYER3
+ { IEC958_MPEG2_LAYER1_LSF, IEC958_MPEG2_LAYER2_LSF, IEC958_MPEG2_LAYER3_LSF }, //MPEG2 LSF
+ { IEC958_MPEG1_LAYER1, IEC958_MPEG1_LAYER23, IEC958_MPEG1_LAYER23 }, //MPEG1
+};
- ctx->data_type = IEC958_MPEG1_LAYER1;
- ctx->pkt_offset = 384<<2; //TODO
- return 0;
-}
+static uint16_t mpeg_pkt_offset[2][3] = {
+ //LAYER1 LAYER2 LAYER3
+ { 768, 2304, 1152 }, // MPEG2 LSF
+ { 384, 1152, 1152 }, // MPEG1
+};
-static int spdif_header_mpeg1_layer23(AVFormatContext *s, AVPacket *pkt){
+static int spdif_header_mpeg(AVFormatContext *s, AVPacket *pkt){
IEC958Context *ctx = s->priv_data;
+ int lsf = (pkt->data[1]>>3)&1;
+ int layer = 3-((pkt->data[1]>>1)&3);
- ctx->data_type = IEC958_MPEG1_LAYER23;
+ av_log(NULL, AV_LOG_DEBUG, "lsf: %i layer: %i\n", lsf, layer);
+ ctx->data_type = mpeg_data_type[lsf][layer];
+ ctx->pkt_offset = mpeg_pkt_offset[lsf][layer]<<2;
// TODO Data type dependant info (normal/karaoke, dynamic range control)
- ctx->pkt_offset = 1152<<2; //TODO
return 0;
}
@@ -124,11 +130,9 @@ static int spdif_write_header(AVFormatCo
ctx->header_info = spdif_header_ac3;
break;
case CODEC_ID_MP1:
- ctx->header_info = spdif_header_mpeg1_layer1;
- break;
case CODEC_ID_MP2:
case CODEC_ID_MP3:
- ctx->header_info = spdif_header_mpeg1_layer23;
+ ctx->header_info = spdif_header_mpeg;
break;
case CODEC_ID_DTS:
ctx->header_info = spdif_header_dts;
Modified: spdif/todo
==============================================================================
--- spdif/todo Mon Jul 6 09:28:07 2009 (r4626)
+++ spdif/todo Mon Jul 6 19:45:13 2009 (r4627)
@@ -3,8 +3,12 @@
-test AC3 - tested with TomorrowNeverDies-2.1-48khz-192kbit.ac3, Canyon-5.1-48khz-448kbit.ac3,
Broadway-5.1-48khz-448kbit.ac3 and FFmpeg AC3 encoder
-test DTS - tested with (only RAW_BE version) 5.1 24bit.dts, ES 6.1 - 5.1 16bit.dts and FFmpeg DCA encoder
+-test MPEG
+
+-add support for mpeg2 with extension
+-info about normal/karaoke mode in mpeg
+-info about dynamic range control in mpeg
--add support for mpeg
-add support for wma
-add support for aac
-add support for eac3
More information about the FFmpeg-soc
mailing list