On 04/14/2011 01:56 PM, Kostya wrote:
> On Thu, Apr 14, 2011 at 01:32:39PM +0200, Luca Barbato wrote:
>> Since the container is relatively simple adding it is straightforward.
>> ---
>>  libavformat/flvenc.c |   43 +++++++++++++++++++++++++++++++++++++++++--
>>  1 files changed, 41 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
>> index 7ffe995..51180c9 100644
>> --- a/libavformat/flvenc.c
>> +++ b/libavformat/flvenc.c
>> @@ -173,7 +173,7 @@ static int flv_write_header(AVFormatContext *s)
>>  {
>>      AVIOContext *pb = s->pb;
>>      FLVContext *flv = s->priv_data;
>> -    AVCodecContext *audio_enc = NULL, *video_enc = NULL;
>> +    AVCodecContext *audio_enc = NULL, *video_enc = NULL, *data_enc = NULL;
>>      int i;
>>      double framerate = 0.0;
>>      int metadata_size_pos, data_size;
>> @@ -200,6 +200,14 @@ static int flv_write_header(AVFormatContext *s)
>>                  audio_enc = enc;
>>                  if (get_audio_flags(enc)<0) return -1;
>>              break;
>> +            case AVMEDIA_TYPE_DATA:
>> +                if (enc->codec_id != CODEC_ID_TEXT) {
>> +                    av_log(enc, AV_LOG_ERROR,
>> +                                "codec not compatible with flv\n");
>> +                    return -1;
>> +                }
>> +                data_enc = enc;
>> +            break;
>>              default:
>>                  av_log(enc, AV_LOG_ERROR, "codec not compatible with 
>> flv\n");
>>                  return -1;
>> @@ -241,7 +249,7 @@ static int flv_write_header(AVFormatContext *s)
>>  
>>      /* mixed array (hash) with size and string/type/data tuples */
>>      avio_w8(pb, AMF_DATA_TYPE_MIXEDARRAY);
>> -    avio_wb32(pb, 5*!!video_enc + 5*!!audio_enc + 2); // +2 for duration 
>> and file size
>> +    avio_wb32(pb, 5*!!video_enc + 5*!!audio_enc + 2 + 1*!!data_enc); // +2 
>> for duration and file size
>>  
>>      put_amf_string(pb, "duration");
>>      flv->duration_offset= avio_tell(pb);
>> @@ -287,6 +295,11 @@ static int flv_write_header(AVFormatContext *s)
>>          put_amf_string(pb, tag->value);
>>      }
>>  
>> +    if (data_enc) {
>> +        put_amf_string(pb, "data-stream");
>> +        put_amf_double(pb, data_enc->codec_id);
>> +    }
>> +
> 
> I don't think it's good idea to put lavc internal codec ID here, the rest
> looks ok.

I need something useful to mark the stream, could be extended to use
tags/consecutive numbers.

lu


-- 

Luca Barbato
Gentoo/linux
http://dev.gentoo.org/~lu_zero

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to