Re: [FFmpeg-devel] [PATCH] avformat: add TiVo ty demuxer

2017-11-02 Thread Paul B Mahol
On 11/2/17, Michael Niedermayer  wrote:
> On Wed, Nov 01, 2017 at 02:40:27PM +0100, Paul B Mahol wrote:
>> Signed-off-by: Paul B Mahol 
>> ---
>>  libavformat/Makefile |   1 +
>>  libavformat/allformats.c |   1 +
>>  libavformat/ty.c | 775
>> +++
>>  3 files changed, 777 insertions(+)
>>  create mode 100644 libavformat/ty.c
>
> [...]
>
>> +static int64_t get_pts(const uint8_t *buf)
>> +{
>> +int a = buf[0] & 0xe >> 1;
>> +int b = AV_RB16(buf + 1);
>> +int c = AV_RB16(buf + 3);
>> +
>> +if (!(1 & a & b & c))
>> +return AV_NOPTS_VALUE;
>> +
>> +a >>= 1;
>> +b >>= 1;
>> +c >>= 1;
>> +return (((uint64_t)a) << 30) | (b << 15) | c;
>> +}
>
> duplicate of ff_parse_pes_pts()
>
> i didnt check most of the code but seeing this, i wonder how much
> more mpeg demuxing this duplicates ?

Only PES stuff.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] avformat: add TiVo ty demuxer

2017-11-01 Thread Michael Niedermayer
On Wed, Nov 01, 2017 at 02:40:27PM +0100, Paul B Mahol wrote:
> Signed-off-by: Paul B Mahol 
> ---
>  libavformat/Makefile |   1 +
>  libavformat/allformats.c |   1 +
>  libavformat/ty.c | 775 
> +++
>  3 files changed, 777 insertions(+)
>  create mode 100644 libavformat/ty.c

[...]

> +static int64_t get_pts(const uint8_t *buf)
> +{
> +int a = buf[0] & 0xe >> 1;
> +int b = AV_RB16(buf + 1);
> +int c = AV_RB16(buf + 3);
> +
> +if (!(1 & a & b & c))
> +return AV_NOPTS_VALUE;
> +
> +a >>= 1;
> +b >>= 1;
> +c >>= 1;
> +return (((uint64_t)a) << 30) | (b << 15) | c;
> +}

duplicate of ff_parse_pes_pts()

i didnt check most of the code but seeing this, i wonder how much
more mpeg demuxing this duplicates ?


> +
> +static int DemuxRecVideo(AVFormatContext *s, TyRecHdr *rec_hdr, AVPacket 
> *pkt)
> +{
> +TYDemuxContext *ty = s->priv_data;
> +AVIOContext *pb = s->pb;
> +const int subrec_type = rec_hdr->subrec_type;
> +const int64_t rec_size = rec_hdr->rec_size;
> +int esOffset1;
> +int got_packet = 0;
> +
> +avio_read(pb, ty->chunk, 32);
> +avio_seek(pb, -32, SEEK_CUR);
> +
> +if (subrec_type != 0x02 && subrec_type != 0x0c &&
> +subrec_type != 0x08 && rec_size > 4) {
> +/* get the PTS from this packet if it has one.
> + * on S1, only 0x06 has PES.  On S2, however, most all do.
> + * Do NOT Pass the PES Header to the MPEG2 codec */
> +esOffset1 = find_es_header(ty_VideoPacket, ty->chunk, 5);
> +if (esOffset1 != -1) {
> +ty->last_video_pts = get_pts(
> +>chunk[ esOffset1 + VIDEO_PTS_OFFSET ] );
> +if (subrec_type != 0x06) {
> +/* if we found a PES, and it's not type 6, then we're S2 */
> +/* The packet will have video data (& other headers) so we
> + * chop out the PES header and send the rest */
> +if (rec_size >= VIDEO_PES_LENGTH + esOffset1) {
> +int size = rec_hdr->rec_size - VIDEO_PES_LENGTH - 
> esOffset1;
> +avio_skip(pb, VIDEO_PES_LENGTH + esOffset1);

> +av_get_packet(pb, pkt, size);

this and other av_get_packet() calls lack error handling

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Complexity theory is the science of finding the exact solution to an
approximation. Benchmarking OTOH is finding an approximation of the exact


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel