[MOVED FROM BAD 24/57] gst/flv/gstflvparse.c: Correct caps for video codec id 5: It's On2 VP6 with alpha channel which needs a different dec...

Original commit message from CVS:
* gst/flv/gstflvparse.c: (gst_flv_parse_audio_negotiate),
(gst_flv_parse_tag_audio), (gst_flv_parse_video_negotiate):
Correct caps for video codec id 5: It's On2 VP6 with alpha channel
which needs a different decoder and has different caps.
Add support for audio codec id 14, which is MP3 with 8kHz sampling
rate.
Fix endianness and signedness for raw audio codec ids.
Add support for alaw and mulaw audio.
This commit is contained in:
Sebastian Dröge 2008-10-09 10:00:51 +00:00 committed by Sebastian Dröge
parent 1905b18a65
commit fa59b574ba

View file

@ -406,15 +406,19 @@ gst_flv_parse_audio_negotiate (GstFLVDemux * demux, guint32 codec_tag,
codec_name = "Shockwave ADPCM"; codec_name = "Shockwave ADPCM";
break; break;
case 2: case 2:
case 14:
caps = gst_caps_new_simple ("audio/mpeg", caps = gst_caps_new_simple ("audio/mpeg",
"mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL); "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
codec_name = "MPEG 1 Audio, Layer 3 (MP3)"; codec_name = "MPEG 1 Audio, Layer 3 (MP3)";
break; break;
case 0: case 0:
case 3: case 3:
/* Assuming little endian for 0 (aka endianness of the
* system on which the file was created) as most people
* are probably using little endian machines */
caps = gst_caps_new_simple ("audio/x-raw-int", caps = gst_caps_new_simple ("audio/x-raw-int",
"endianness", G_TYPE_INT, G_BYTE_ORDER, "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
"signed", G_TYPE_BOOLEAN, TRUE, "signed", G_TYPE_BOOLEAN, (width == 8) ? FALSE : TRUE,
"width", G_TYPE_INT, width, "depth", G_TYPE_INT, width, NULL); "width", G_TYPE_INT, width, "depth", G_TYPE_INT, width, NULL);
codec_name = "Raw Audio"; codec_name = "Raw Audio";
break; break;
@ -429,6 +433,14 @@ gst_flv_parse_audio_negotiate (GstFLVDemux * demux, guint32 codec_tag,
"mpegversion", G_TYPE_INT, 4, NULL); "mpegversion", G_TYPE_INT, 4, NULL);
codec_name = "AAC"; codec_name = "AAC";
break; break;
case 7:
caps = gst_caps_new_simple ("audio/x-alaw", NULL);
codec_name = "A-Law";
break;
case 8:
caps = gst_caps_new_simple ("audio/x-mulaw", NULL);
codec_name = "Mu-Law";
break;
default: default:
GST_WARNING_OBJECT (demux, "unsupported audio codec tag %u", codec_tag); GST_WARNING_OBJECT (demux, "unsupported audio codec tag %u", codec_tag);
} }
@ -523,6 +535,12 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, const guint8 * data,
codec_data = 1; codec_data = 1;
} }
/* codec tags with special rates */
if (codec_tag == 5 || codec_tag == 14)
rate = 8000;
else if (codec_tag == 4)
rate = 16000;
GST_LOG_OBJECT (demux, "audio tag with %d channels, %dHz sampling rate, " GST_LOG_OBJECT (demux, "audio tag with %d channels, %dHz sampling rate, "
"%d bits width, codec tag %u (flags %02X)", channels, rate, width, "%d bits width, codec tag %u (flags %02X)", channels, rate, width,
codec_tag, flags); codec_tag, flags);
@ -710,10 +728,13 @@ gst_flv_parse_video_negotiate (GstFLVDemux * demux, guint32 codec_tag)
caps = gst_caps_new_simple ("video/x-flash-screen", NULL); caps = gst_caps_new_simple ("video/x-flash-screen", NULL);
codec_name = "Flash Screen Video"; codec_name = "Flash Screen Video";
case 4: case 4:
case 5:
caps = gst_caps_new_simple ("video/x-vp6-flash", NULL); caps = gst_caps_new_simple ("video/x-vp6-flash", NULL);
codec_name = "On2 VP6 Video"; codec_name = "On2 VP6 Video";
break; break;
case 5:
caps = gst_caps_new_simple ("video/x-vp6-alpha", NULL);
codec_name = "On2 VP6 Video with alpha channel";
break;
case 7: case 7:
caps = gst_caps_new_simple ("video/x-h264", NULL); caps = gst_caps_new_simple ("video/x-h264", NULL);
codec_name = "H.264/AVC Video"; codec_name = "H.264/AVC Video";